自编码器Auto-Encoders! |
文章目录
一、自编码器Auto-Encoders
1.1、回顾之前的知识
1.2、无监督学习
1.3、Auto-Encoders中loss function如何设计
1.3.1、PCA和Auto-encoder对比
二、Auto-Encoders的变种
2.1、变种1:原图像中引入噪声
2.2、变种2:借助Drop out
2.3、变种3:Adversarial Auto-Encoders
2.4、对比Auto-Encoder和Adversarial Auto-Encoder的区别
一、自编码器Auto-Encoders
1.1、回顾之前的知识
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzdiNjJkNjJkZGFlNDVkZTkzZDQxNjRlM2Q4ZWVlYTQ5LnBuZw%3D%3D.png?w=700)
1.2、无监督学习
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzVjMzQ2MWRmY2IxYjAyOTQzNDdhMmJhODVhYTExMjJhLnBuZw%3D%3D.png?w=700)
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0L2Y2YjE3OTcxYzU2NTYyNjEwYmI3YzU0ZjUzNmQ0MmVkLnBuZw%3D%3D.png?w=700)
注意:其实无监督并不是没有目标,它也是有目标的,比如看下面的auto-encode,它的目标是什么?它的目标就是它自己,这么一想其实unsupervised learning也是非常有道理的。
比如下面MNIST数据集,输入这样的图片,经过这样一个神经网络NN(encoder),得到一个输出,再经过一个网络(decoder);也可以如下图中的理解。这就是auto-encoder,特别简单。
可视化可以参考这个网站,比较直观的感受784-3(784维降低到3维):降维度可视化网站链接
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0L2RmODVjYTQ0NTdmZGYxMGU0NDhlYmQyZTAyOTdjY2FjLnBuZw%3D%3D.png?w=700)
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzhiYzNhMzBkYzlmODA5OWQ4NWQ5YzRhZDE3OTk5Yzc2LnBuZw%3D%3D.png?w=700)
1.3、Auto-Encoders中loss function如何设计
介绍如下、
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0L2ZhM2EzMjZmYzA5OGI2ZGMyNGE0MzA2MmQ2NmJkMTIwLnBuZw%3D%3D.png?w=700)
1.3.1、PCA和Auto-encoder对比
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzhmN2YxMmZhZjhiMWE1MTNmYTdkNWYzZDNjYTc4OGMzLnBuZw%3D%3D.png?w=700)
效果对比:
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzYxMTk5MmJlMTMzOTBlZWJiZDZkMzgwODJlZTI4ODMyLnBuZw%3D%3D.png?w=700)
再看一个可视化的效果
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzZlOGJiMmM3ZmQ3N2ExM2U2MjlhODgxMmY4MTVhNmJkLnBuZw%3D%3D.png?w=700)
二、Auto-Encoders的变种
2.1、变种1:原图像中引入噪声
下面讲解一下auto-encoder的变种吧!首先比较简答的是:容易想到如果只是在像素级别里重建,这样没有发现一些更深层次的东西,那你很有可能只是记住一些特征,比如这个数字,你可能直接把这个像素给记住了;那么为了防止记住怎么办?我们给原图像加一些噪声
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0L2FjNTRkOTgyZWExNmI2OGRkYjE1YTk0MzVjM2QxODAwLnBuZw%3D%3D.png?w=700)
2.2、变种2:借助Drop out
Drop out是Hintton大神发明的,Drop out也是现在一种比较常用的技术,但是他并没有发表在paper上面,据说是Hitton在给他的学生上课的时候随口提出来的小trick(技巧),帮助你提升神经网络性能的技巧。
看下图:首先在Training的时候回有目的的,让这部分的连接断开,具体的操作我们手动的让这部分的权值暂时设置为0,就是相当于暂时断掉了。这样可以理解为:给你的信息有限,这样就迫使你的系统更加的robust,你就不会依赖于所有的神经元,而是部分的神经元。然后你再Test的时候:就会让你的这个任务变得更加的简单了,所有的Drop out设置都恢复了。
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzhiM2ZiZjlkOTliMThlN2U0YjI0MjU1OTBhNmQ0YmM5LnBuZw%3D%3D.png?w=700)
2.3、变种3:Adversarial Auto-Encoders
这个是比较有名的,这个跟后面要介绍的GAN非常相关了,这个直接把GAN中的技术应用到这里Auto-Encoders了,
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0Lzk1YWQ4Y2UxMGVmYmY0MGE5NDkwZDUxZDdmNGEwYmU2LnBuZw%3D%3D.png?w=700)
但是实际上最原始的auto-encoders大家发现;比如你从【-1, 1】变换h分布的时候,重建出来的图片它可能是一样的,就是没有呈现出这种分布过来,这样的话就比价烦人了,那么怎么解决这个问题呢?Adversarial Auto-Encoders是怎样解决这个问题的呢?如下图添加了一个Discriminator,还没有讲到GAN,现在可以理解为一个识别器(鉴别器)
我们假设一个分布,高斯分布,均值为0,方差为1,我们希望你属于一个这样的分布,如果你没有输入这个分布,我们鉴别你,我们把真实的z和希望得到的z’都送给这个网络做鉴别这个差距,如果差距大,就是不属于预设的这个分布,我们输出一个fake,我们这个分布属于预设的分布,就是属于这个高斯分布,我们输出这个1。通过这样的话就能迫使就能是我们中间得到的这个hidden vector除了能完成重建工作之外,还能符合我们想要的分布,这样就很好解决上一张图片中所说的不平衡的问题(分布不均匀,乱七八糟)。
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0L2M5MzAwZTEyY2QwMjQwOGFlMDA5YzlmNGUxOWQ2ZjA1LnBuZw%3D%3D.png?w=700)
由这个Adversarial Auto-Encoders引出这节课的重点所在。
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzIyYzdlYjIwNmQzZGZhNDcxOGQxZjU2YWE1NTlmMTA3LnBuZw%3D%3D.png?w=700)
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0L2RlNGU2ODU0OWU3ZmQ5NDY5OWMxM2U4NGY4MzAyYjBkLnBuZw%3D%3D.png?w=700)
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzdlOTA5MGE4OWYwYmJjMDk4ZjRkMjE3ZDk2MzYwOGNlLnBuZw%3D%3D.png?w=700)
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0Lzc4MDQzNjNkMzYwMzRkZjgzYjEwYzIwNzljNzVhN2M5LnBuZw%3D%3D.png?w=700)
sample()是不可微的,不能进行反向传播,
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0L2Q3ZWU1OTNlZTYwN2I3OTMyZjBhYWZhNzJmYzQ0ZGM5LnBuZw%3D%3D.png?w=700)
之前介绍了Adversarial Auto-Encoders,我们现在从神经网络的角度理解一下。
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0L2Q3ODk1YzcwMTAzOTJmMmE1ZGQ3MWU1NjE2ODFmMjE4LnBuZw%3D%3D.png?w=700)
2.4、对比Auto-Encoder和Adversarial Auto-Encoder的区别
VAE重建的效果好一些。
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0L2EyODZkNmFjNzBmODg4ZDQ0YjgzN2ZmZWZiOWYyZmI5LnBuZw%3D%3D.png?w=700)
![数据分析-深度学习Pytorch Day12 数据分析-深度学习Pytorch Day12](https://image.shishitao.com:8440/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2ltZ19jb252ZXJ0LzQxMTU5ZTc4ZDY0MGVjNTZkMDgyMzMzMDk4YzEzODk4LnBuZw%3D%3D.png?w=700)