【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder

我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。

已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-notes

本节对应笔记:

本节内容综述

  1. Auto-encoder 思想是,对数据进行压缩;此外,要有一个 Decoder 来把数据解压。Encoder 与 Decoder 在一起训练。
  2. 从 PCA 开始介绍起。可见【李宏毅2020 ML/DL】P57 Unsupervised Learning - Linear Methods | PCA & Matrix Factorization
  3. 开始介绍 Deep Auto-encoder ,2006年的成果。
  4. 用在文字处理上Auto-encoder Text Retrieval
  5. 此外,也可用在图像搜索上Similar Image Search
  6. 还可以用在预训练神经网络上Pre-training DNN这个方法可能很适用于半监督学习。
  7. 此外,还有一些加噪的编码方法De-noising auto-encoder,还提及了Contractive auto-encoder。
  8. 还提及了 Restricted Boltzmann Machine 以及 Deep Belief Network,见 Learn More 。
  9. 最后详细介绍了 CNN 。介绍了很有趣的去卷积,发现去卷积其实就是卷积
  10. 最后进行思考,我们是否可以用 Decoder 来产生新的东西?

小细节

Deep Auto-encoder

【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
此外,注意到可以按照 PCA的思路,将 Encoder 与 Decoder 的参数一一对应。这可以通过为二者赋同样的初值得到。并且,还需要设置同样的更新过程,这样可以节省一半的参数,降低过拟合的概率。

但是这并不是必要的。

来看一篇 2006 年的论文成果。

【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder

如图,使用了 Deep Auto-encoder ,可以解码会很清晰的图片。

【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
如图,使用了深层的编码,即便是2维的编码,其聚类效果也是很好的。

Auto-encoder Text Retrieval

Bag-of-word

【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
如果这个词出现过,在词袋(一个词袋可能表示一篇文章)中,就是1,否者是0。

【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
如上,使用 Auto-encoder 效果远好于 LSA 。

Auto-encoder Similar Image Search

【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
如上,直接算像素插值,找不到好结果。
【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
如上,如果经过编码,会找到比较同类的结果。

Auto-encoder Pre-training DNN

【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder

如上图右边,要注意,可能需要对编码的层进行一个大的正则(当编码层维度大于被编码对象时)。
【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
如上,然后保存住这个网络的参数。训练下一层。
【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
如上,再训练长度为 500 的这一层。

【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
之后,再通过反向传播微调就行。

注意:

  • 现在可能已经不太需要使用这个预训练技术了(因为机器条件好了);
  • 但是如果有大量无标签数据和少量标签数据,我们可以通过无标签数据进行预训练。

因此,这个方法可能更适于半监督学习。

De-noising auto-encoder

【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
如图,在输入时,加入一些噪声,这样,神经网络就会学到一些去噪的技巧。

此外,还提到了Contractive auto-encoder,在编码时,做个约束,目的是加了噪声编码还能不变。而De-noising 是为了解码后还能还原。

Learn More

【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
上述两个,都不是神经网络。李老师不准备在本课程中展开。

CNN as Encoder

【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
如图,怎么做去卷积层(Deconvolution)去池化层(Unpooling)呢?

Unpooling

【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
如上,做 Unpooling 的前提是,要记得Pooling在哪里取的值

但是,在 Keras 里没有记录这些位置,直接做了重复值。

Deconvolution

其实 Deconvolution 就是 convolution 。
【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder

老师先拿一维的卷积举例子。很巧妙。因此,在Keras里甚至直接使用卷积层就行。

Next…

【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
如图,我们做了一个二维的 code ,在红色框框里取样;发现左上角”四不像“,因为红色框框左上角确实没有东西。

我们还可以对 code 加 L2 正则,以限制 code 产生在原点附近。
【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
如上,发现两个维度其实是意义的:

  • 从左到右,是否有圈圈;
  • 从上到下则表示是否倾斜。