2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder

1.先来介绍一下encoder

Auto-encoder
因为对于encoder来说,我们有输入,但是输出的code是什么样子,我们是不知道的。没关系,先learn一个decoder,上下两个东西如果单独拿出来是没有办法train的,所以没法单独,就接在一起,一起学,就可以了。这个时候的输入和输出都有了。
对于encoder来说,输出的code通常维度要小于输入的维度,用于Compact representation of the input object。
对于decoder而言,他的主要作用是reconstruct the original object
注意看这张图,encoder输入图输出code,decoder输入code输出特征图。
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第1张图片

2.再来回顾一下PCA

实际上是做这件事:下面那个过程的x到x^,我们要minimize这个差的平方,让它尽可能的小
(input一张image x,(把x-平均当成input)再把x*weigh得到component的weight,然后component的weight 再乘个matrix得到x ^,)
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第2张图片
等于PCA就是hidden layer,Output of the hidden layer is the code
而且前面这个部分就是encoder,后面就是decoder
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第3张图片
意思就是PCA也可以看做Auto-encoder的一种简单形式,那么如果Auto-encoder推广到Deep Auto-encoder呢?

3.Deep Auto-encoder

看一下他的模型:
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第4张图片
注意:1、当时这个方法不好训练,需要逐层使用RBM来初始化;2、根据CA的经验,可以看到左右两边的权重是有对应的转置关系的。实际上可以忽略这种转置关系,直接使用反向传播来更新参数。

直接上实验验证好坏
从Hinton大佬的文章里面的一些截图:可以看到Deep Auto-encoder的结果吊打比PCA。
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第5张图片

PCA的做法:784维降到30维
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第6张图片

Deep Auto-encoder的做法:784维先扩展到1000维
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第7张图片
如果用PCA降到2维,可以看到不同颜色代表的不同数字都混在一起了2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第8张图片
如果是Deep Auto-encoder,数字就是分开的。2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第9张图片

4.Auto-encoder在其他领域的应用

4.1文本检索,本质上就是找到与文本最相近的向量
Vector Space Model
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第10张图片
这种做法,如何用向量来表示document非常重要,最简单做法就是Bag-of-word:
每个词用one-hot向量表示,那么句子就是下面这个样子(有的时候还会乘上一些权重以表示词的重要程度):
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第11张图片
这个模型的弱点也明显,就是没有考虑词与词之间的语义信息(无法知道苹果和橙子都是水果,因为词之间是independent的)。Semantics are not considered.
所以但是如果用上Auto-encoder,那么语义信息就很自然的被包含进来了。The documents talking about the same thing will have close code.
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第12张图片
结果变成,有同类关系了,同一颜色的点代表某一类
就是说,输入一个东西,先把它变成二维,然后看到是属于某一类。
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第13张图片
如果用LSA:结果就不好,不分开2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第14张图片
4.2 Auto-encoder-Similar Image Search
可以用在以图找图应用上

如果用像素为单位来进行比较得到的效果是不好的。例如下面用MJ的图片进行搜索,得到的结果。。。那个马蹄是来搞笑的吗。。。
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第15张图片
所以:可以用Auto-encoder对N张图片(无监督学习不差数据)进行encoder,然后再对code进行查询。2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第16张图片
所以不是在像素上找相似,结果不好,反而转成code之后就很好了

4.3 Pre-training DNN
接下来看看如何对Auto-encoder进行初始化,用的是Pre-training DNN,具体做法如下:
假设我们要对MINST使用Auto-encoder进行识别,使用的模型如下图:2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第17张图片
输入是784维,第一个隐藏层(蓝色)是1000维,第二个隐藏层(绿色)是1000维,第三个隐藏层(深蓝)500维,输出code是10维。
Pre-training第一步:目标是初始化第一个隐藏层的参数。
构造如下模型:2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第18张图片
根据之前的经验知道,这里的目标是使得输入x和输出x^
(也就是code)越接近越好。
需要注意的是,在之前的Auto-encoder模型中,code比输入一般来说是要小的,这里的是一样的维度,因此在训练的时候很容易啥都没学到(直接把输入搬到输出呗),这个时候需要强制的加上L1的弄,强制的使得参数变得稀疏。
训练结束后,得到了w1
然后把w1固定,构造如下模型:
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第19张图片
最后的W4 用随机初始化就可以了,最后再用反向传播进行fine-tune
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第20张图片
划重点:
Pre-training这个方法现在之前训练比较深的网络时比较有用,现在不用这个方法也可以进行训练了。但是当我们有大量的unlabel data,少量的label data,这个时候可以用unlabel data Pre-training模型,然后再用label data进行fine-tune

4.4De-noising auto-encoder
Auto-encoder的另外一个改进方法就是De-noising:
目标是x和y越接近越好,X加噪声得到x’,encode之后变成c,decode之后变成y,这个模型的鲁棒性比较好,因为在学习样本的code的过程中,顺便把噪声的样子也学习到了,杂序去掉,因此噪声对这个模型的影响也就小了。

另外一个类似的改进模型是Contractive auto-encoder
还有Deep Belief Network

5.看看Auto-encoder 给CNN

右边是encoder,左边应该是相反的事情,
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第21张图片
5.1CNN-Unpooling
通常的做法是:
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第22张图片
注意中间黑白色的部分,要记录下来最大值所在的位置,是白色,最后unpooling的时候要把最大值放到记录的位置,其他位置补零。效果如下图:因为补0,所以特征图扩散类。2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第23张图片
当然还有比较偷懒的做法,直接不记录位置,最后unpooling的时候所有的位置都填充最大值。

5.2CNN-Deconvolution
事实上deconvolution is convolution.
下面是一个一维卷积的例子,不同颜色代表不同权重。
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第24张图片
要对这个卷积过程进行反卷积,实际上就是:
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第25张图片
这个过程很容易理解,但是实作起来麻烦,上面实际上是等价于把输入进行padding后卷积:
2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder_第26张图片
这里注意观察权重对应的颜色,计算结果是完全一样的。所以反卷积实际上可以看做是padding后的卷积操作,这样就不需要额外编制代码,而是直接调用卷积的函数即可。

你可能感兴趣的:(2020李宏毅学习笔记——44.Unsupervised learning Deep Auto-encoder)