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输出特征图。
在这里插入图片描述

2.再来回顾一下PCA

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

3.Deep Auto-encoder

看一下他的模型:
在这里插入图片描述
注意:1、当时这个方法不好训练,需要逐层使用RBM来初始化;2、根据CA的经验,可以看到左右两边的权重是有对应的转置关系的。实际上可以忽略这种转置关系,直接使用反向传播来更新参数。

直接上实验验证好坏
从Hinton大佬的文章里面的一些截图:可以看到Deep Auto-encoder的结果吊打比PCA。
在这里插入图片描述

PCA的做法:784维降到30维
在这里插入图片描述

Deep Auto-encoder的做法:784维先扩展到1000维
在这里插入图片描述
如果用PCA降到2维,可以看到不同颜色代表的不同数字都混在一起了在这里插入图片描述
如果是Deep Auto-encoder,数字就是分开的。在这里插入图片描述

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

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

如果用像素为单位来进行比较得到的效果是不好的。例如下面用MJ的图片进行搜索,得到的结果。。。那个马蹄是来搞笑的吗。。。
在这里插入图片描述
所以:可以用Auto-encoder对N张图片(无监督学习不差数据)进行encoder,然后再对code进行查询。在这里插入图片描述
所以不是在像素上找相似,结果不好,反而转成code之后就很好了

4.3 Pre-training DNN
接下来看看如何对Auto-encoder进行初始化,用的是Pre-training DNN,具体做法如下:
假设我们要对MINST使用Auto-encoder进行识别,使用的模型如下图:在这里插入图片描述
输入是784维,第一个隐藏层(蓝色)是1000维,第二个隐藏层(绿色)是1000维,第三个隐藏层(深蓝)500维,输出code是10维。
Pre-training第一步:目标是初始化第一个隐藏层的参数。
构造如下模型:在这里插入图片描述
根据之前的经验知道,这里的目标是使得输入x和输出x^
(也就是code)越接近越好。
需要注意的是,在之前的Auto-encoder模型中,code比输入一般来说是要小的,这里的是一样的维度,因此在训练的时候很容易啥都没学到(直接把输入搬到输出呗),这个时候需要强制的加上L1的弄,强制的使得参数变得稀疏。
训练结束后,得到了w1
然后把w1固定,构造如下模型:
在这里插入图片描述
最后的W4 用随机初始化就可以了,最后再用反向传播进行fine-tune
在这里插入图片描述
划重点:
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,左边应该是相反的事情,
在这里插入图片描述
5.1CNN-Unpooling
通常的做法是:
在这里插入图片描述
注意中间黑白色的部分,要记录下来最大值所在的位置,是白色,最后unpooling的时候要把最大值放到记录的位置,其他位置补零。效果如下图:因为补0,所以特征图扩散类。在这里插入图片描述
当然还有比较偷懒的做法,直接不记录位置,最后unpooling的时候所有的位置都填充最大值。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值