写在前面
- 本篇博客是本人在学习李宏毅老师的《机器学习》课程中的Auto-Encoder时,记录的相关笔记,由于只记录了我认为相对重要的部分,所以可能有未记录的部分。博客中的图片来自于教学视频中的截图,视频资源地址为:传送门,感兴趣的读者可以前去学习,李宏毅老师讲解的非常透彻,让人醍醐灌顶。
Auto-Encoder
Auto-Encoder可以看出是自监督的一种,在训练的时候不需要数据集提供标签,也可以说是预训练。
Auto-Encoder的结构
-
Auto-Encoder由编码器和解码器组成,都是网络,数据集可以是一些无标注的图片。
-
编码器读入一张图片,输出一个向量,解码器读入这个向量,最后产生一张图片。Auto-Encoder的目标就是要让产生的图片和输入的图片越接近越好。
-
Encoder训练是为了捕获输入数据的关键特征,是对输入数据的另一种表示形式,一般比原始数据更简单。而Decoder是将这种表示重构回原始输入。将Encoder的输出用于下游任务,相当于是迁移学习或特征提取,在不依赖具体任务的情况下,提取输入数据的通用特征。
-
Auto-Encoder可以做什么?
- 比如一张图片组成的向量非常长,在经过Encoder之后,得到一个更低维的向量,然后用这个低维的向量去做下游任务。相当于将复杂的东西用简单的形式表示了,这样在做下游任务的时候,就不需要过多的训练资料。
-
De-noising Auto-Encoder
- 在Encoder读入图片前,先对图片加噪声。这种结构目标是要让生成的图片和加噪声前的图片越相似越好。
- Bert可以看成是De-noising Auto-Encoder
Auto-Decoder的应用
特征解耦(Feature Disentangle)
- decoder输出的向量表示中,包含了不同方面的信息,比如一段声音中的内容、声音特征,这个向量的前50维代表内容,后50维代表声音特征。
- 这种方法可以用来做语者转换:同一段内容由不同人的声音读出来。比如下图所示,此时有两段不同内容且声音不同的语音序列,通过Encoder后,可以得到相应的向量表示,这个向量包含了序列的内容和声音特征,抽取出两个向量中的内容和声音特征,将男生的内容向量和女生的声音向量组合在一起形成一个新的向量,输入给Decoder将得到新的语音序列。
文章总结
-
我们可以训练Auto-encoder来做文章总结。具体的,Encoder读入一篇文章,输出一段文字序列,这段文字是Encoder从文章中提取的关键内容,Decoder会读入这段文字还原这篇文章,注意到Encoder和Decoder都是输入一段序列,输出一段序列,所以Encoder和Decoder都是Seq2seq模型。
-
所以只要有大量的文章资料,就可以以无监督的学习的方式训练模型。
- 但是这种方式训练会存在一个问题,就是Encoder和Decoder之间可能存在自己的暗号,导致Encoder总结出来的东西人看不懂,但是Decoder能看懂并还原,所以我们需要一个判别器来增强机器生成的总结的真实性,也就是将文字输入给Discriminator。这部分属于GAN的知识。
图片压缩
- 我们知道Encoder可以提取高维图片的特征信息用低维的向量表示,所以Auto-encoder又可以用来做图片压缩。具体的,Encoder做的事情是压缩图片,得到的低维向量可以看作是压缩后的结果的向量表示,Decoder做的事情是解压缩,重建图像,得到与原始图像在结构上和外观上相似的图像,所以最终Decoder产生了压缩后失帧的图片。
异常检测(Anomaly Detection)
- 异常检测:给定一个训练资料集,异常检测系统需要检测一个新的输入是否和训练资料中的某个或某些资料相似。
- 通过定义异常的标准可能不同,取决于你的数据集是什么
-
异常检测的方法有很多中,使用Auto-Anomaly来做异常检测是一种可行的方法。
- 在训练时,和标准的训练Auto-encoder的方式一样,目的就是要让生成的图片和原始图片越相似越好。
- 在测试时,输入图片给Auto-encoder,计算Auto-encoder输出的图片和原始输入的图片的差异,如果差异较小,说明这张图片是正常图片,如果差异较大,说明这张图片可能是异常图片。这是因为在训练Auto-encoder的时候,Auto-encoder学习到了还原类似训练集中的图片的能力,如果新的图片和训练资料中的图片相似,那么Auto-encoder是可以较好的还原图片的,否则的话,还原出来的图片和原始输入图片差异较大。