TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!

自编码器Auto-Encoders以及实战!

文章目录

    • 一. 自编码器Auto-Encoders
      • 1.1. 回顾之前的知识
      • 1.2. 无监督学习
      • 1.3. Auto-Encoders中loss function如何设计
      • 1.4. PCA和Auto-encoder对比
    • 二. Auto-Encoders的变种
      • 2.1. 变种1: 原图像中引入噪声
      • 2.2. 变种2: 借助Drop out
      • 2.3. 预备知识相对熵
        • 2.3.1. 信息熵
        • 2.3.2. 交叉熵
        • 2.3.3. KL散度又称相对熵
        • 2.3.4. 相对熵具体例子
        • 2.3.5. 相对熵的性质
        • 2.3.6. JS散度
      • 2.4. 变种3:Adversarial Auto-Encoders(比较有名)
      • 2.5. 对比Auto-Encoder和Adversarial Auto-Encoder的区别
    • 未完~~~~~~~~~~~~~
    • 三. 需要全套课程视频+PPT+代码资源可以私聊我!

一. 自编码器Auto-Encoders

1.1. 回顾之前的知识

TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第1张图片

1.2. 无监督学习

TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第2张图片
  • 机器学习的三大方向:
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第3张图片
  • 为什么需要无监督学习?
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第4张图片
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第5张图片
  • 通过上面了解了为什么需要无监督学习,下面看一下无监督学习的一种形态!注意:其实无监督并不是没有目标,它也是有目标的,比如看下面的auto-encode,它的目标是什么?它的目标就是它自己,这么一想其实unsupervised learning也是非常有道理的。
  • 比如下面MNIST数据集,输入这样的图片,经过这样一个神经网络NN(encoder),得到一个输出,再经过一个网络(decoder);也可以如下图中的理解。这就是auto-encoder,特别简单。
  • 可视化可以参考这个网站,比较直观的感受784-3784维降低到3维):降维度可视化网站链接
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第6张图片

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

  • 介绍如下
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第7张图片

1.4. PCA和Auto-encoder对比

TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第8张图片
  • 效果对比:
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第9张图片
  • 再看一个可视化的效果
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第10张图片

二. Auto-Encoders的变种

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

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

2.2. 变种2: 借助Drop out

  • Drop outHintton大神发明的,Drop out也是现在一种比较常用的技术,但是他并没有发表在paper上面,据说是Hintton在给他的学生上课的时候随口提出来的小trick(技巧),帮助你提升神经网络性能的技巧。
  • 看下图:首先在Training的时候回有目的的,让这部分的连接断开,具体的操作我们手动的让这部分的权值暂时设置为0,就是相当于暂时断掉了。这样可以理解为:给你的信息有限,这样就迫使你的系统更加的robust,你就不会依赖于所有的神经元,而是部分的神经元。然后你再Test的时候:就会让你的这个任务变得更加的简单了,所有的Drop out设置都恢复了。

2.3. 预备知识相对熵

  • 下面的资料来自哈工大刘远超老师的PPT资料,表示感谢!
  • 信息论中的熵的概念;
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第12张图片

2.3.1. 信息熵

TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第13张图片

2.3.2. 交叉熵

TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第14张图片

2.3.3. KL散度又称相对熵

TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第15张图片
  • 其中: D K L ( P ∥ Q ) = ∑ x ∈ X P ( x ) log ⁡ 1 Q ( x ) − ∑ x ∈ X P ( x ) log ⁡ 1 P ( x ) \mathrm D_{K L}(\mathrm P \| \mathrm Q)=\sum_{x \in \mathrm X} \mathrm P(x) \log \frac{1}{\mathrm Q(x)}-\sum_{x \in X}\mathrm P(x) \log \frac{1}{\mathrm P(x)} DKL(PQ)=xXP(x)logQ(x)1xXP(x)logP(x)1 = − ∑ x ∈ X P ( x ) log ⁡ Q ( x ) + ∑ x ∈ X P ( x ) log ⁡ P ( x ) =- \sum_{x \in \mathrm X} \mathrm P(x) \log {\mathrm Q(x)}+\sum_{x \in X}\mathrm P(x) \log {\mathrm P(x)} =xXP(x)logQ(x)+xXP(x)logP(x) = ∑ x ∈ X P ( x ) log ⁡ P ( x ) Q ( x ) =\sum_{x \in X}\mathrm P(x) \log \frac{ \mathrm P(x)}{\mathrm Q(x)} =xXP(x)logQ(x)P(x)

2.3.4. 相对熵具体例子

TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第16张图片

2.3.5. 相对熵的性质

TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第17张图片

2.3.6. JS散度

TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第18张图片

2.4. 变种3:Adversarial Auto-Encoders(比较有名)

  • 这个是比较有名的,这个跟后面要介绍的GAN非常相关了,这个直接把GAN中的技术应用到这里Auto-Encoders了,
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第19张图片
  • 但是实际上最原始的auto-encoders大家发现;比如你从 [ − 1 , 1 ] [-1,1] [1,1]变换 h 分布的时候,重建出来的图片它可能是一样的,就是没有呈现出这种分布过来,这样的话就比价烦人了,那么怎么解决这个问题呢?Adversarial Auto-Encoders是怎样解决这个问题的呢?如下图添加了一个Discriminator,还没有讲到GAN,现在可以理解为一个识别器(鉴别器)
  • 我们假设一个分布,高斯分布,均值为 0 0 0,方差为 1 1 1,我们希望你属于一个这样的分布,如果你没有输入这个分布,我们鉴别你,我们把真实的 z z z 和希望得到的 z ′ z' z 都送给这个网络做鉴别这个差距,如果差距大,就是不属于预设的这个分布,我们输出一个fake,我们这个分布属于预设的分布,就是属于这个高斯分布,我们输出这个 1 1 1。通过这样的话就能迫使就能是我们中间得到的这个hidden vector除了能完成重建工作之外,还能符合我们想要的分布,这样就很好解决上一张图片中所说的不平衡的问题(分布不均匀,乱七八糟)。
  • Adversarial Auto-Encoder额外添加了一个Discriminator(可以理解为一个识别器)
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第20张图片
  • 由这个Adversarial Auto-Encoders引出这节课的重点所在。
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第21张图片
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第22张图片
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第23张图片
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第24张图片
  • sample()是不可微的,不能进行反向传播;
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第25张图片
  • 之前介绍了Adversarial Auto-Encoders,我们现在从神经网络的角度理解一下。
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第26张图片

2.5. 对比Auto-Encoder和Adversarial Auto-Encoder的区别

  • VAE重建的效果好一些。
TensorFlow2.0笔记17:自编码器Auto-Encoders以及实战!_第27张图片
  • VAE除了重建的效果比AE好一些,更重要的是作为一个 s t o c h a s t i c stochastic stochastic模型,它学习的是 q ( h ) q(h) q(h),通过从 q ( h ) q(h) q(h) s a m p l e sample sample出不同的 h h h,这样就可以重建或者说用来做生成的模型,如果h是二维的 [ h 0 , h 1 ] [h0, h1] [h0,h1] h 0 h_{0} h0属于 h 0 ∼ N ( μ 0 , σ 0 2 ) h_{0} \sim N\left(\mu_{0}, \sigma_{0}^{2}\right) h0N(μ0,σ02)的分布, h 1 h_{1} h1属于 h 1 ∼ N ( μ 0 , σ 1 2 ) h_{1} \sim N\left(\mu_{0}, \sigma_{1}^{2}\right) h1N(μ0,σ12)的分布,知道了这2个分布,我们就改变 μ 0 , σ 0 , μ 1 , σ 1 \mu_{0},\sigma_{0}, \mu_{1},\sigma_{1} μ0,σ0,μ1,σ1,我们再 s a m p l e sample sample一下, s a m p l e sample sample出来新的 h h h, h h h再送入后面的 d e c o d e r decoder decoder,就能得到 x ‾ \overline{x} x,通过多个 s a m p l e sample sample之后得到不同的 h h h,也可以得到不同的 x ‾ \overline{x} x,这样的话就可以实现生成。
  • 看下图横坐标 h 0 h_{0} h0改变,纵坐标 h 1 h_{1} h1改变,改变以后相当于上面说的分布改变了,那么sample生成的图片就有随机性在里面。

未完~~~~~~~~~~~~~

三. 需要全套课程视频+PPT+代码资源可以私聊我!

你可能感兴趣的:(深度学习,Tensorflow,Deep,Learning)