目录

 

- 1. 引言

- 2. 基本架构

- 3. 应用

    - 3.1 作为一种降维的方法

    - 3.2 消除噪声

    - 3.3 Text Retrieval

    - 3.4 Similar Image Search

    - 3.5 Auto Encoder for CNN

        - 3.5.1 Unpooling

        - 3.5.2 Deconvolution

        - 3.5.3 Pre-training DNN

    - 3.6 使用decoder生成样本?

概述

终于了解是auto-encoder技术,三位巨佬的说法,unsupervised learning 才是AI的未来,因为你不能总是要求太多标签数据,这一直一直是一共难题。

  • 基本架构
  • 应用
    • 作为降维方法,非常好的非线性降维手段之一
    • 消除噪声,随机添加噪声重构原图
    • 文本搜索图片搜索
    • cnn中auto encoder的做法
    • 使用decoder生成样本。

1. 引言

这是两位祖师爷的话,这个领域确实有意思。

Unsupervised Learning-Auto Encoder

2. 基本架构

auto encoder架构如下,一般中间的成为bottle layer,没什么好讲的,值得注意的是,图中前后的W,你可以tight起来,让它们的值完全一样,也可以直接train。原理上没什么好讲的,确实非常直观,下面主要是介绍一系列非常有意思的应用,以理解auto encoder的神妙的地方。

Unsupervised Learning-Auto Encoder

3. 应用

3.1 作为一种降维的方法

前面讲了非线性的降维方法,auto encoder中间的bottle也是一种非常好的方法。下图是sallow auto encoder和deep auto encoder的区别,也可以认为是线性和非线性去的区别。

Unsupervised Learning-Auto Encoder

3.2 消除噪声

比如说用来消除噪声,给原始图片加随机噪声,让它reconstruct原图片,以达到对本来就有噪声的数据自动去噪的目的。但是,就我看来重构的结构比较模糊,但是这个用着nn train之前提前去噪应该非常合适。比如说,在adversarial attack的时候,做攻击防御,完全可以用auto encoder来实现。

Unsupervised Learning-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,逆文档词频。

Unsupervised Learning-Auto Encoder

这种方法的问题在于无法考虑上下文关系,完全放弃上下文关系。如果使用auto encoder的方法来做,就能得到相当不错的结果。下图是LSA和auto encoder降维到2维的对比。

Unsupervised Learning-Auto Encoder

3.4 Similar Image Search

相似图片搜索,如果直接使用像素点相似度(Euclidean distance)的话,会找到各种奇怪的东西。

Unsupervised Learning-Auto Encoder

如果使用auto encoder的话,可以找到更加类似的结果。

Unsupervised Learning-Auto Encoder

3.5 Auto Encoder for CNN

我们知道在cnn中有pooling和convolution两个操作,那么对于auto-encoder应该怎么去做呢?

Unsupervised Learning-Auto Encoder

感觉好像很复杂,其实实现是比较简单的。

3.5.1 Unpooling

可以记住maxpooling选择的位置,在unpooling的时候进行逆向操作,空位补0,如下图,上方是放大的结果。但在keras中,实现的方式更加简单,直接就是进行repeat。

Unsupervised Learning-Auto Encoder

3.5.2 Deconvolution

这个看起来好像十分复杂,但其实这个反倒非常简单,因为convolution和deconvolution的结果是一模一样的。图中是一个一维卷积的例子,左边是正常cnn,从直观上,我们dcnn需要做的就是中间所画,将一个unit变为多个unit,而其实这种操作,等同于直接做cnn如右边的图。可以看到,其实是完全一样的效果。

Unsupervised Learning-Auto Encoder

3.5.3 Pre-training DNN

Greedy Layer-wise Pre-training again。用于对DNN进行预训练。提出来是因为以前dnn很难train。它的想法也非常巧妙,它在每个层次做auto encoer,一层一层地trian,然后fix主前面的参差数。

Unsupervised Learning-Auto Encoder

最后进行fine-tuning

Unsupervised Learning-Auto Encoder

这种方法早期用于帮助网络训练,但后来nn都变得比较好trian,所以可以直接train。但类似的方法可以用在你只有少量标签数据的时候,这个应该是一种值得研究的方法。

3.6 使用decoder生成样本?

老师说,这是非常简单的,他把minst用auto encoder压到2维(code),然后再code的范围内做sample,然后用decoder重构图片。这样做的关键在于,你sample出来的code不一定是image decode出来的。所以我觉得这种方法可以用作data augment,解决数据不平衡问题。

Unsupervised Learning-Auto Encoder

值得一提的是,图中老师对最后的code做了l2-regularization,使得code范围都接近0,方便sample。

相关文章: