目录
Auto encoder
简介
如下图所示,在李宏毅老师的课中是这样介绍的,auto encoder将输入通过encoder编码得到code,之后通过decoder解码得到output,最后希望达到的效果就是input和output越接近越好。为了达到这个效果,可以将encoder和decoder一起训练。
应用
在李宏毅老师的课中提到了几种auto encoder的应用
文本检索
vector space model的想法是把文件表示为一个向量。如图红色为要检索的文本,可以通过比较它与其他文本的余弦相似度来检索。
相似照片检索
如果直接从像素层面通过计算欧拉距离来查找相似的照片,效果并不是很好。所以希望通过将照片编程成code,再进行比较。
预训练DNN
想要为下图左边的神经网络找一组比较好的初始参数,来减少训练的复杂。就可以通过auto encoder来实现。如图右所示可以训练一个auto encoder。
将784维数据转化为1000维的参数W1固定下来,作为左图对应位置的初始参数。
使用同样的方法初始化其他的参数,最后输出层的参数随机初始化就可。然后在之后的训练过程仅需要fine tune(微调)。
但是随着目前pre-training方法更新,这种方法也渐渐被替代。
de-nosing auto-encoder
卷积的auto encoder
卷积中两个重要的概念:卷积(convolution)和池化(pooling)。在decoder中对应的变成了deconvolution和unpooling。
unpooling
unpooling相当于是在做pooling的逆过程。将pooled maps通过unpooling转化为原来图像。如下图左侧,将pooled maps中每个像素转化对应颜色位置的一堆像素。例如在最大池化中,为了知道pooled maps中像素是从哪个位置获得的,要记录rectified feature maps中被选为最大像素的位置之后才能还原。常用的方法有直接把pooled maps中像素填充在获得的位,其他位置填0,如下图左侧黄色图中琐事。或者直接把黄色位置都填充为layer above reconstruction黄色位置的像素。
deconvolution
deconvolution实质上就是convolution。 下图左抽象的是卷积操作,相当于三个像素卷积得到一个像素。第一黑框里面的操作是下图左中卷积操作的逆过程。
第一个黑框操作等价于第二个黑框操作: 第二个黑框中灰色的神经元表示的是0填充。蓝框中的像素和黄框中像素是等价的,是因为篮筐是由a绿色线+b蓝色线+c橘色线,而黄框的像素也是a绿色线+b蓝色线+c橘色线。其他output像素也同理,因此第二个黑框等价于第一个黑框中的操作。
第一个黑框中的deconvolution操作相当于第二个黑框中操作,而第二个黑框中实质是卷积操作的步骤。所以deconvolution实质上就是convolution。
embedding
embedding指用低维向量对物体进行编码并保留其含义;即使用一个低维的向量来代表一个对象。auto encoder就是完成embedding的一个技术。
feature disentangle
feature disentangle即特征分离。如下图,使用两个encoder可以产生不同的code,提取出不同的information
比如在语音上面特征分离可以用来完成变音,过程如下图所示。