数据分析-深度学习Pytorch Day12

时间:2023-01-30 21:56:09

自编码器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

1.2、无监督学习

数据分析-深度学习Pytorch Day12
数据分析-深度学习Pytorch Day12
  • 注意:其实无监督并不是没有目标,它也是有目标的,比如看下面的auto-encode,它的目标是什么?它的目标就是它自己,这么一想其实unsupervised learning也是非常有道理的。

  • 比如下面MNIST数据集,输入这样的图片,经过这样一个神经网络NN(encoder),得到一个输出,再经过一个网络(decoder);也可以如下图中的理解。这就是auto-encoder,特别简单。

  • 可视化可以参考这个网站,比较直观的感受784-3(784维降低到3维):降维度可视化网站链接

数据分析-深度学习Pytorch Day12
数据分析-深度学习Pytorch Day12

1.3、Auto-Encoders中loss function如何设计

  • 介绍如下、

数据分析-深度学习Pytorch Day12
1.3.1、PCA和Auto-encoder对比
数据分析-深度学习Pytorch Day12
  • 效果对比:

数据分析-深度学习Pytorch Day12
  • 再看一个可视化的效果

数据分析-深度学习Pytorch Day12

二、Auto-Encoders的变种

2.1、变种1:原图像中引入噪声

  • 下面讲解一下auto-encoder的变种吧!首先比较简答的是:容易想到如果只是在像素级别里重建,这样没有发现一些更深层次的东西,那你很有可能只是记住一些特征,比如这个数字,你可能直接把这个像素给记住了;那么为了防止记住怎么办?我们给原图像加一些噪声

数据分析-深度学习Pytorch Day12

2.2、变种2:借助Drop out

  • Drop out是Hintton大神发明的,Drop out也是现在一种比较常用的技术,但是他并没有发表在paper上面,据说是Hitton在给他的学生上课的时候随口提出来的小trick(技巧),帮助你提升神经网络性能的技巧。

  • 看下图:首先在Training的时候回有目的的,让这部分的连接断开,具体的操作我们手动的让这部分的权值暂时设置为0,就是相当于暂时断掉了。这样可以理解为:给你的信息有限,这样就迫使你的系统更加的robust,你就不会依赖于所有的神经元,而是部分的神经元。然后你再Test的时候:就会让你的这个任务变得更加的简单了,所有的Drop out设置都恢复了。

数据分析-深度学习Pytorch Day12

2.3、变种3:Adversarial Auto-Encoders

  • 这个是比较有名的,这个跟后面要介绍的GAN非常相关了,这个直接把GAN中的技术应用到这里Auto-Encoders了,

数据分析-深度学习Pytorch Day12
  • 但是实际上最原始的auto-encoders大家发现;比如你从【-1, 1】变换h分布的时候,重建出来的图片它可能是一样的,就是没有呈现出这种分布过来,这样的话就比价烦人了,那么怎么解决这个问题呢?Adversarial Auto-Encoders是怎样解决这个问题的呢?如下图添加了一个Discriminator,还没有讲到GAN,现在可以理解为一个识别器(鉴别器)

  • 我们假设一个分布,高斯分布,均值为0,方差为1,我们希望你属于一个这样的分布,如果你没有输入这个分布,我们鉴别你,我们把真实的z和希望得到的z’都送给这个网络做鉴别这个差距,如果差距大,就是不属于预设的这个分布,我们输出一个fake,我们这个分布属于预设的分布,就是属于这个高斯分布,我们输出这个1。通过这样的话就能迫使就能是我们中间得到的这个hidden vector除了能完成重建工作之外,还能符合我们想要的分布,这样就很好解决上一张图片中所说的不平衡的问题(分布不均匀,乱七八糟)。

数据分析-深度学习Pytorch Day12
  • 由这个Adversarial Auto-Encoders引出这节课的重点所在。

数据分析-深度学习Pytorch Day12
数据分析-深度学习Pytorch Day12
数据分析-深度学习Pytorch Day12
数据分析-深度学习Pytorch Day12
  • sample()是不可微的,不能进行反向传播,

数据分析-深度学习Pytorch Day12
  • 之前介绍了Adversarial Auto-Encoders,我们现在从神经网络的角度理解一下。

数据分析-深度学习Pytorch Day12

2.4、对比Auto-Encoder和Adversarial Auto-Encoder的区别

  • VAE重建的效果好一些。

数据分析-深度学习Pytorch Day12
数据分析-深度学习Pytorch Day12