Deep Auto-encoder

原文 https://www.cnblogs.com/yangmang/p/7428014.html

autoencoder可以用于数据压缩、降维,预训练神经网络,生成数据等等。

autoencoder的架构

autoencoder的架构是这样的:

需要分别训练一个Encoder和一个Decoder。

比如,一张数字图片784维,放入Encoder进行压缩,编程code,通常要小于原来的784维;

然后可以将压缩后的code,放入Decoder进行reconsturct,产生和原来相似的图片。

Encoder和Decoder需要一起进行训练。

下面看看PCA对于数据的压缩:

输入同样是一张图片,通过选择W,找到数据的主特征向量,压缩图片得到code,然后使用W的转置,恢复图片。

我们知道,PCA对数据的降维是线性的(linear),恢复数据会有一定程度的失真。上面通过PCA恢复的图片也是比较模糊的。

所以,我们也可以把PCA理解成为一个线性的autoencoder,W就是encode的作用,w的转置就是decode的作用,最后的目的是decode的结果和原始图片越接近越好。

现在来看真正意义上的Deep Auto-encoder的结构。通常encoder每层对应的W和decoder每层对应的W不需要对称(转置)。

从上面可以看出,Auto-encoder产生的图片,比PCA还原的图片更加接近真实图片。

上面是使用PCA和autoencoder对于数字图片压缩后的可视化结果,明显autoencoder的区分度更高。

De-noising auto-encoder

为了让aotoencoder训练的更好,更加robust,我们在训练的时候加入一些noise,这就是De-noising auto-encoder。

examples

接下来再看两个例子。

文本检索,简单的词袋模型,将文本转化成词向量。

当搜索的词和文本向量角度越接近,就说明内容越相关。

将词向量放入autoencoder中进行压缩,得到code,内容相近的文本,code也越接近。

不同主题的文本被明显的分开,得到右上的2维图像。

搜索图片的相似性。

搜索红框中的迈克杰克逊的照片,下面是使用像素点之间的欧式距离得到的搜索结果。

下面使用autoencoder编码后的code,进行相似性的搜索结果。

 

使用CNN实现autoencoder

经过多次convolution和pooling后的code,可以再经过deconvolution和unpooling恢复。

下面将如何实现unpooling和deconvolution。

在maxpooling时,需要记住max值在图片中的位置。

当进行unpooling时,把小的图片做扩展,先把max值恢复到之前的位置,然后在之前进行maxpooling的field内的像素都置为0.

接下来看Deconvolution

现在假设一个field里面有3个像素点,每个filter的3个weight作用下得到一个output,如图左。

而deconvolution就是要让这3个output复原成原来那么多的点,一个output变成3各点,把重叠的点加起来,如图中。

现在,将3个output进行扩展,给扩展的点的值为0,然后就依然做convolution,还是可以得到和图中相同的结果。

所以,deconvolution其实就是convolution。

最后,我们可以使用autoencoder压缩后的code,输入到decoder里,得到一张新的图像,如下所示。

 

分享到:更多 ()

抢沙发

评论前必须登录!