我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。
已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-notes
本节对应笔记:
本节内容综述- Auto-encoder 思想是,对数据进行压缩;此外,要有一个 Decoder 来把数据解压。Encoder 与 Decoder 在一起训练。
- 从 PCA 开始介绍起。可见【李宏毅2020 ML/DL】P57 Unsupervised Learning - Linear Methods | PCA & Matrix Factorization。
- 开始介绍 Deep Auto-encoder ,2006年的成果。
- 用在文字处理上Auto-encoder Text Retrieval。
- 此外,也可用在图像搜索上Similar Image Search。
- 还可以用在预训练神经网络上Pre-training DNN。这个方法可能很适用于半监督学习。
- 此外,还有一些加噪的编码方法De-noising auto-encoder,还提及了Contractive auto-encoder。
- 还提及了 Restricted Boltzmann Machine 以及 Deep Belief Network,见 Learn More 。
- 最后详细介绍了 CNN 。介绍了很有趣的去卷积,发现去卷积其实就是卷积。
- 最后进行思考,我们是否可以用 Decoder 来产生新的东西?
文章目录
小细节
Deep Auto-encoder
此外,注意到可以按照 PCA的思路,将 Encoder 与 Decoder 的参数一一对应。这可以通过为二者赋同样的初值得到。并且,还需要设置同样的更新过程,这样可以节省一半的参数,降低过拟合的概率。
但是这并不是必要的。
来看一篇 2006 年的论文成果。
如图,使用了 Deep Auto-encoder ,可以解码会很清晰的图片。
如图,使用了深层的编码,即便是2维的编码,其聚类效果也是很好的。
Auto-encoder Text Retrieval
Bag-of-word
如果这个词出现过,在词袋(一个词袋可能表示一篇文章)中,就是1,否者是0。
如上,使用 Auto-encoder 效果远好于 LSA 。
Auto-encoder Similar Image Search
如上,直接算像素插值,找不到好结果。
如上,如果经过编码,会找到比较同类的结果。
Auto-encoder Pre-training DNN
如上图右边,要注意,可能需要对编码的层进行一个大的正则(当编码层维度大于被编码对象时)。
如上,然后保存住这个网络的参数。训练下一层。
如上,再训练长度为 500 的这一层。
之后,再通过反向传播微调就行。
注意:
- 现在可能已经不太需要使用这个预训练技术了(因为机器条件好了);
- 但是如果有大量无标签数据和少量标签数据,我们可以通过无标签数据进行预训练。
因此,这个方法可能更适于半监督学习。
De-noising auto-encoder
如图,在输入时,加入一些噪声,这样,神经网络就会学到一些去噪的技巧。
此外,还提到了Contractive auto-encoder,在编码时,做个约束,目的是加了噪声编码还能不变。而De-noising 是为了解码后还能还原。
Learn More
上述两个,都不是神经网络。李老师不准备在本课程中展开。
CNN as Encoder
如图,怎么做去卷积层(Deconvolution)和去池化层(Unpooling)呢?
Unpooling
如上,做 Unpooling 的前提是,要记得Pooling在哪里取的值。
但是,在 Keras 里没有记录这些位置,直接做了重复值。
Deconvolution
其实 Deconvolution 就是 convolution 。
老师先拿一维的卷积举例子。很巧妙。因此,在Keras里甚至直接使用卷积层就行。
Next…
如图,我们做了一个二维的 code ,在红色框框里取样;发现左上角”四不像“,因为红色框框左上角确实没有东西。
我们还可以对 code 加 L2 正则,以限制 code 产生在原点附近。
如上,发现两个维度其实是意义的:
- 从左到右,是否有圈圈;
- 从上到下则表示是否倾斜。