|
目录 |
|
- 1. 引言 - 2. 基本架构 - 3. 应用 - 3.2 消除噪声 概述 终于了解是auto-encoder技术,三位巨佬的说法,unsupervised learning 才是AI的未来,因为你不能总是要求太多标签数据,这一直一直是一共难题。
|
1. 引言
这是两位祖师爷的话,这个领域确实有意思。
2. 基本架构
auto encoder架构如下,一般中间的成为bottle layer,没什么好讲的,值得注意的是,图中前后的W,你可以tight起来,让它们的值完全一样,也可以直接train。原理上没什么好讲的,确实非常直观,下面主要是介绍一系列非常有意思的应用,以理解auto encoder的神妙的地方。
3. 应用
3.1 作为一种降维的方法
前面讲了非线性的降维方法,auto encoder中间的bottle也是一种非常好的方法。下图是sallow auto encoder和deep auto encoder的区别,也可以认为是线性和非线性去的区别。
3.2 消除噪声
比如说用来消除噪声,给原始图片加随机噪声,让它reconstruct原图片,以达到对本来就有噪声的数据自动去噪的目的。但是,就我看来重构的结构比较模糊,但是这个用着nn train之前提前去噪应该非常合适。比如说,在adversarial attack的时候,做攻击防御,完全可以用auto encoder来实现。
Vincent, Pascal, et al. "Extracting and composing robust features with denoising autoencoders." ICML, 2008
Rifai, Salah, et al. "Contractive auto-encoders: Explicit invariance during feature extraction.“ Proceedings of the 28th International Conference on Machine Learning (ICML-11). 2011.
3.3 Text Retrieval
文本分类,主题分类。
在吴军的数学之美中就看过介绍,一种最trivial的做法就是,统计每个词的词频(bag),然后将文章变为向量,然后通过cosine之类的方法去计算相似度,或者是做搜索匹配——将query同样转成向量,然后匹配相似度。此外,统计词频其实是不够的,因为有些词就会不断出现但却一点用没有,例如说“的”,“是”……所以说词的重要性完全不一样的,常见的做法就是逆词频TF-IDF,逆文档词频。
这种方法的问题在于无法考虑上下文关系,完全放弃上下文关系。如果使用auto encoder的方法来做,就能得到相当不错的结果。下图是LSA和auto encoder降维到2维的对比。
3.4 Similar Image Search
相似图片搜索,如果直接使用像素点相似度(Euclidean distance)的话,会找到各种奇怪的东西。
如果使用auto encoder的话,可以找到更加类似的结果。
3.5 Auto Encoder for CNN
我们知道在cnn中有pooling和convolution两个操作,那么对于auto-encoder应该怎么去做呢?
感觉好像很复杂,其实实现是比较简单的。
3.5.1 Unpooling
可以记住maxpooling选择的位置,在unpooling的时候进行逆向操作,空位补0,如下图,上方是放大的结果。但在keras中,实现的方式更加简单,直接就是进行repeat。
3.5.2 Deconvolution
这个看起来好像十分复杂,但其实这个反倒非常简单,因为convolution和deconvolution的结果是一模一样的。图中是一个一维卷积的例子,左边是正常cnn,从直观上,我们dcnn需要做的就是中间所画,将一个unit变为多个unit,而其实这种操作,等同于直接做cnn如右边的图。可以看到,其实是完全一样的效果。
3.5.3 Pre-training DNN
Greedy Layer-wise Pre-training again。用于对DNN进行预训练。提出来是因为以前dnn很难train。它的想法也非常巧妙,它在每个层次做auto encoer,一层一层地trian,然后fix主前面的参差数。
最后进行fine-tuning
这种方法早期用于帮助网络训练,但后来nn都变得比较好trian,所以可以直接train。但类似的方法可以用在你只有少量标签数据的时候,这个应该是一种值得研究的方法。
3.6 使用decoder生成样本?
老师说,这是非常简单的,他把minst用auto encoder压到2维(code),然后再code的范围内做sample,然后用decoder重构图片。这样做的关键在于,你sample出来的code不一定是image decode出来的。所以我觉得这种方法可以用作data augment,解决数据不平衡问题。
值得一提的是,图中老师对最后的code做了l2-regularization,使得code范围都接近0,方便sample。