WDK李宏毅学习笔记第十一周02_More about Auto-encoder

More about Auto-encoder

文章目录


摘要

Auto-encoder是一个很重要的技术,在很多方面都有应用,本章说明了auto-encoder的一些简单变形以及最小化重建误差的一些方法,介绍了用Au-encoder处理有顺序的数据(Skip thought、Quick thought、CPC),最后阐述了将Embedding变得容易解释的几种方法(Feature Disentangle、One-Hot、Binary、VQVAE、Seq2seq2seq auto-Embedding)。

1、More than minimizing reconstruction error

1.1 回顾Auto-encoder

Auto-encoder就是有一个Encoder,向encoder输入一个input,就会得到一个vector(Embedding、Latent Representation、Latent code),通过Decoder又可以还原出input的信息,我们希望最后输出的和输入越接近越好,即最小化重建误差(Reconstruction error)。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder

1.2 What is good embedding?

让我们回到一开始的初衷,我们并不是每次都要求输入和输出一样,我们有时也希望得到一个关于input有代表性,解释性强的embedding,例如machine知道看到蓝色的耳机,它就会想到三九而不是其他人。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder
而我们如何知道Embedding能否很好的包含输入的特性呢?我们可以用Discriminator,用于判断图片与code是否匹配,Discriminator就是一个分类器,它可以分辨出不同的角色对应的特征。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder
我们还可以用Discriminator构建一个Loss Function,用该Loss Function就可以评估一个model的好坏。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder

1.3 Typical auto-encoder is a special case

实际上,Discriminator还是可以认为在最小化重建误差。如下图Discriminator接收一个图片和一个vector,vector通过Decoder解码生成一个图片然后和输入图片进行比较,看它们的接近程度计算分数。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder

2 Squential Data

2.1 Skip thought

在有序列的数据上,我们也是可以采用上述model的,如下图Skip thought的方法,model经过训练后,Encoder接收一个句子,然后输出句子的上一句和下一句。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder

2.2 Quick thought

Quick thought是 Skip thought延申的想法,它不使用Decoder,而是使用一个Classifier,它将当前的句子,下一个句子和一些随机采样的句子作为输入,然后输出当前句子的下一句。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder

2.3 Contrastive Predictive Coding(CPC)

CPC也是接收一段序列数据,然后输出下一段数据。如下图:
WDK李宏毅学习笔记第十一周02_More about Auto-encoder

3、Feature Disentangle

如何让embedding更容易被解释?经过Encoder得到的Embedding其实包含了很多输入数据的信息,当输入是声音信号时,Embedding可能包含了内容信息、讲话者信息等,如果输入的是一段文字,Embedding就可能包含语法信息、语义信息等。以声音信号为例,假设encoder得到的Embedding是一个100维的向量,它只包含了内容和讲话者身份的两种信息,我们希望能通过训练使得它的前100维代表内容信息,后50维代表讲话者身份信息。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder
这个在语言处理方面其实有很大的用处,如下图,我们可以将代表男生身份信息的维度部分与代表女生说话内容信息结合在一起,最后合成代表男生说话的vector。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder
如何做呢?我们可以在一般的Encoder-Decoder架构中引入一个Speaker Classifier,它将Embedding的前50维作为输入,来区别说话者的身份信息,我们希望的是Embedding可以骗过Speaker Classifier,这样machine就会为了骗过Speaker Classifier而将说话者的信息存放在后50维。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder
另一种方式是用两个Encoder分别输出身份的信息和内容信息,再处理内容信息的Encoder上加一个IN,该IN可以清除身份信息,最后得到的Embedding再组合放入Decoder中。但是该方法还存在问题,就是第2个的Encoder处理得到的Embedding还包含内容信息。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder
改进的方法就是在Decoder中加入AdaIN,过滤掉代表身份信息的Embedding中保留的内容信息。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder

4、Discrete Representation

4.1 One-Hot and Binary

如果model可以从连续性变量表示转化为离散表示,那会更容易理解,例如:用One-Hot表示,做法简单,只需将连续型变量中最大值的变成1,其他值的取0。还有一种方法就是设置Binary,例如当变量大于0.5取1,小于0.5取0。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder
这两个model,binary更好,所需要的内存更小,而且Binary可以处理在训练集中从未出现过的类别。

4.2 Vector Quantized Variational Auto-Encoder(VQVAE)

VQVAE是在Encoder-Decoder架构中引入一个Codebook,Codebook存放了很多经过处理过的Vector,当输入经过encoder处理得到embedding后,会先将embedding与Codebook中的vector比较,将相似性最高的Codebook中的vector丢给Decoder,这样最后得到的Embedding就是我们所期望的。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder

4.3 Seq2seq2seq auto-Embedding

Seq2seq2seq auto-Embedding就是说input一篇文章,输出不是向量而是代表一串文字的seq2seq,然后decoder将该串文章吃进去还原出原本的文章。那显然中间的文字就是文章摘要。但是这个model之间training是得不到好的结果的,因为machine并没有学到语法,它很可能会得到我们看不懂的一串文字。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder
为了解决该问题,我们可以在该model加入GAN让机器判断word sequence是否是人写的使得其掌握语法。
WDK李宏毅学习笔记第十一周02_More about Auto-encoder

方法

  1. 最小化重建误差使用的是Discriminator,Discriminator就是一个分类器,当model输出不是我们期望的值时,Discriminator能够判别处理,用Discriminator就可构建一个Loss function用于给model打分。
  2. Skip thought使用的方法是用Encoder接收一个句子,然后Decoder输出该句子的前一句以及下一句,这样就可以很好的将文章中每一句联系起来。
  3. Quick thought是用Encoder接收多个句子(当前句子、随机采样句子、下一个句子),然后经过分类器处理输出当前句子的下一句。
  4. Feature Disentangle可用的方法有好几个,本质的思想就是让Embedding的对应的维度能有存放其独立对应的信息,比如在Encoder-Decoder中加入Speaker Classifier,逼迫model在学习的时候只能将某些信息放在特定的维度,也可使用多个Encoder再加入过滤器,将一些信息过滤掉,让特定的维度存放特定的信息。
  5. One-Hot使用的是One-Hot编码,该方法占用内存大,且会丢失输入之间联系的信息,Binary的方法是设置Binary,大于Binary的值取1,其他取0,该方法相比One-Hot所占内存更小,且可以正确认识不在训练集的数据。
  6. VQVAE使用的方法是Encoder-Decoder架构中引入Codebook,Codebook中有很多个处理得到的vector,Embedding需要和Codebook中的vector做对比,最后将Codebook中与Embedding相似度最高的vector丢入Decoder。
  7. Seq2seq2seq是专门对有顺序的数据进行处理的,例如在对文章自动写摘要的时候,使用的方法是在Seq2seq2seq架构中引入GAN让model知道正确的语义是怎样的,然后写出和人写的差不多的摘要。

结论与展望

可以将Auto-encoder理解为是一种思想,它可以嵌入到其他一些model中使用,也可以做一些变形以方便处理问题。Discriminator可以很好的处理最小化重建误差问题,且可以构建Loss Function给model打分。Feature Disentangle则可以让Embedding变得可解释的,在处理变声器问题上,该方法很适合。Discrete Representation主要的思想就是将连续型变量离散化,其中设置Binary的方法就明显优于One-Hot的方法,VQVAE可以使得到的Embedding都是我们所期望的,Seq2seq2seq则比较适合处理有顺序的数据。

上一篇:使用prerender-spa-plugin实现vue预渲染


下一篇:【OCP最新题库解析(052)--题56】 Which three are true about the Automatic