AutoEncoder及Variational AutoEncoder模型

2023-05-16

AutoEncoder及Variational AutoEncoder模型

一、AutoEncoder概述

  • 作为一种无监督或者自监督算法,自编码器本质上是一种数据压缩算法。
  • 从现有情况来看,无监督学习很有可能是一把决定深度学习未来发展方向的钥匙,在缺乏高质量打标数据的监督机器学习时代,若是能在无监督学习方向上有所突破对于未来深度学习的发展意义重大。
    在这里插入图片描述
  • 所谓自编码器(Autoencoder,AE),就是一种利用反向传播算法使得输出值等于输入值的神经网络,它先将输入压缩成潜在空间表征,然后将这种压缩后的空间表征重构为输出。
    在这里插入图片描述
  • 它的隐藏成层的向量具有降维的作用。所以,从本质上来讲,自编码器是一种数据压缩算法,其压缩和解压缩算法都是通过神经网络来实现的。
  • AutoEncoder通常有两个方面的应用:
    1. 是数据去噪,
    2. 是为进行可视化而降维。
    3. 进行图像压缩
    4. 传统自编码器被用于降维或特征学习
  • 自编码器在适当的维度和系数约束下可以学习到比PCA等技术更有意义的数据映射。

二、AutoEncoder结构

  • 自编码器有如下三个特点:
    1. 数据相关性。就是指自编码器只能压缩与自己此前训练数据类似的数据,比如说我们使用mnist训练出来的自编码器用来压缩人脸图片,效果肯定会很差。
    2. 数据有损性。自编码器在解压时得到的输出与原始输入相比会有信息损失,所以自编码器是一种数据有损的压缩算法。
    3. 自动学习性。自动编码器是从数据样本中自动学习的,这意味着很容易对指定类的输入训练出一种特定的编码器,而不需要完成任何新工作。

在这里插入图片描述

  • 构建一个自编码器需要两部分:编码器(Encoder)和解码器(Decoder)。
    • 编码器将输入压缩为潜在空间表征,编码器会创建一个隐藏层(或多个隐藏层)包含了输入数据含义的低维向量。可以用函数 f ( x ) f(x) f(x) 来表示,
    • 解码器将潜在空间表征重构为输出,即通过隐藏层的低维向量重建输入数据。可以用函数 g ( x ) g(x) g(x) 来表示
  • 编码函数 f ( x ) f(x) f(x) 和解码函数 g ( x ) g(x) g(x) 都是神经网络模型。
    在这里插入图片描述

三、AutoEncoder模型的损失函数

  • AE是一个自动编码器是一个非监督的学习模式,只需要输入数据,不需要label或者输入输出对的数据。
  • 虽然AE是一个非监督学习算法,如果它的解码器是线性重建数据,可以用MSE来表示它的损失函数:
    在这里插入图片描述
  • 如果解码器用Sigmoid的激活函数,那主要用交叉上损失函数:
    在这里插入图片描述

四、VAE 变分自动编码器

在这里插入图片描述

  • VAE结构是一个经典的autocoder模型,网络的组成也是编码器、解码器、loss。
  • VAE的机构和普通的AE结构有所不同。
  • 普通的AE结构如下,解码器直接使用编码器的输出向量。
    在这里插入图片描述
  • 上面的模型已经可以训练任意图片了。但是,我们想建一个产生式模型,而不是一个只是储存图片的网络。
  • 现在我们还不能产生任何未知的东西,因为我们不能随意产生合理的潜在变量。因为合理的潜在变量都是编码器从原始图片中产生的。这里有个简单的解决办法。我们可以对编码器添加约束,就是强迫它产生服从单位高斯分布的潜在变量。正是这种约束,把VAE和标准自编码器给区分开来了
  • VAE 的loss通常由两部分组成:首先是 reconstruction loss, 然后是KL散度( z z z 的分布和正态分布的差距)。
    在这里插入图片描述
  • 标准AutoEncoder的Encoder产生的是明确的、固定的 vector h h h
  • VAE 的 Encoder 会产生一个分布,这个分布用 均值 vector标准差 vector来表示。
  • VAE将经过神经网络编码后的隐藏层假设为一个标准的高斯分布,然后再从这个分布中采样一个特征,再用这个特征进行解码,期望得到与原始输入相同的结果,损失和AE几乎一样,只是增加编码推断分布与标准高斯分布的KL散度的正则项,显然增加这个正则项的目的就是防止模型退化成普通的AE,因为网络训练时为了尽量减小重构误差,必然使得方差逐渐被降到0,这样便不再会有随机采样噪声,也就变成了普通的AE。
    在这里插入图片描述
    其中:第一项即为交叉熵;第二项为KL-Divergence
    K L ( p , q ) = − ∫ p ( x ) log ⁡ q ( x ) d x + ∫ p ( x ) log ⁡ p ( x ) d x = 1 2 log ⁡ ( 2 π σ 2 2 ) + σ 1 2 + ( μ 1 − μ 2 ) 2 2 σ 2 2 − 1 2 ( 1 + log ⁡ 2 π σ 1 2 ) = log ⁡ σ 2 σ 1 + σ 1 2 + ( μ 1 − μ 2 ) 2 2 σ 2 2 − 1 2 = q 分布为 N ( 0 , 1 ) B 标准正态分布 log ⁡ 1 σ 1 + σ 1 2 + ( μ 1 − 0 ) 2 2 ⋅ ( 1 ) 2 − 1 2 = log ⁡ 1 σ 1 + σ 1 2 + μ 1 2 2 − 1 2 = − 1 2 [ 2 log ⁡ σ 1 − ( σ 1 2 + μ 1 2 ) + 1 ] ​ \begin{aligned} KL(p, q) &= - \int p(x) \log q(x) dx + \int p(x) \log p(x) dx\\\\ &=\frac{1}{2} \log (2 \pi \sigma_2^2) + \frac{\sigma_1^2 + (\mu_1 - \mu_2)^2}{2 \sigma_2^2} - \frac{1}{2} (1 + \log 2 \pi \sigma_1^2)\\\\ &= \log \frac{\sigma_2}{\sigma_1} + \frac{\sigma_1^2 + (\mu_1 - \mu_2)^2}{2 \sigma_2^2} - \frac{1}{2}\\ &\xlongequal{q分布为\mathcal{N}(0,1)B标准正态分布} \log \frac{1}{\sigma_1} + \frac{\sigma_1^2 + (\mu_1 - 0)^2}{2·(1)^2} - \frac{1}{2}\\ &=\log \frac{1}{\sigma_1} + \frac{\sigma_1^2 + \mu_1^2}{2} - \frac{1}{2}\\ &=-\cfrac12[2\log \sigma_1 -(\sigma_1^2 + \mu_1^2) + 1] \\ \end{aligned} ​ KL(p,q)=p(x)logq(x)dx+p(x)logp(x)dx=21log(2πσ22)+2σ22σ12+(μ1μ2)221(1+log2πσ12)=logσ1σ2+2σ22σ12+(μ1μ2)221q分布为N(0,1)B标准正态分布 logσ11+2(1)2σ12+(μ10)221=logσ11+2σ12+μ1221=21[2logσ1(σ12+μ12)+1]
  • 它妙就妙在它为每个输入 x x x, 生成了一个潜在概率分布 p ( z ∣ x ) p(z|x) p(zx),然后再从分布中进行随机采样,从而得到了连续完整的潜在空间,解决了AE中无法用于生成的问题。
    在这里插入图片描述
  • VAE除了能让我们能够自己产生随机的潜在变量,这种约束也能提高网络的产生图片的能力
  • 但是,VAE的一个劣势就是没有使用对抗网络,所以VAE会更趋向于产生模糊的图片

4.1 变分推断

  • 变分自编码器(VAE)的想法和名字的由来便是变分推断了,那么什么是变分推断呢?
  • 变分推断是MCMC搞不定场景的一种替代算法,它考虑一个贝叶斯推断问题,给定观测变量 x ∈ R k x \in \mathbb{R}^k xRk 和潜变量 z ∈ R d z \in \mathbb{R}^d zRd,其联合概率分布为 p ( z , x ) = p ( z ) p ( x ∣ z ) p(z, x) = p(z)p(x|z) p(z,x)=p(z)p(xz) , 目标是计算后验分布 p ( z ∣ x ) p(z|x) p(zx)。然后我们可以假设一个变分分布 q ( z ) q(z) q(z) 来自分布族 Q Q Q,通过最小化KL散度来近似后验分布 p ( z ∣ x ) p(z|x) p(zx) :
    q ∗ = arg min ⁡ q ( z ) ∈ Q K L ( q ( z ) ∣ ∣ p ( z ∣ x ) ) \begin{aligned}q^* = \argmin_{q(z) \in Q} KL(q(z)||p(z|x))\end{aligned} q=q(z)QargminKL(q(z)∣∣p(zx))
  • 这么一来,就成功的将一个贝叶斯推断问题转化为了一个优化问题~

4.2 变分推导过程

  • 有了变分推断的认知,我们再回过头去看一下VAE模型的整体框架,VAE就是将AE的编码和解码过程转化为了一个贝叶斯概率模型:我们的训练数据即为观测变量 x x x, 假设它由不能直接观测到的潜变量 z z z 生成, 于是,生成观测变量过程便是似然分布: p ( x ∣ z ) p(x|z) p(xz) ,也就是解码器,因而编码器自然就是后验分布: p ( z ∣ x ) p(z|x) p(zx) .
  • 根据贝叶斯公式,建立先验、后验和似然的关系:
    p ( z ∣ x ) = p ( x ∣ z ) p ( z ) p ( x ) = ∫ z p ( x ∣ z ) p ( z ) p ( x ) d z p(z|x) = \frac{p(x|z)p(z)}{p(x)} = \int_z \frac{p(x|z)p(z)}{p(x)}dz p(zx)=p(x)p(xz)p(z)=zp(x)p(xz)p(z)dz
  • 接下来,基于上面变分推断的思想,我们假设变分分布 q x ( z ) q_x(z) qx(z) , 通过最小化KL散度来近似后验分布 p ( z ∣ x ) p(z|x) p(zx) ,于是,最佳的 q x ∗ q_x^* qx 便是:
    q x ∗ = a r g m i n ( K L ( q x ( z ) ∣ ∣ p ( z ∣ x ) ) = a r g m i n ( E q x ( z ) [ l o g   q x ( z ) − l o g   p ( x ∣ z ) − l o g   p ( z ) ] + l o g   p ( x ) ) ​ \begin{aligned} q_x^* &= argmin (KL(q_x(z)||p(z|x)) \\ &= argmin (E_{q_x(z)}[log~q_x(z)- log~p(x|z) -log~p(z)]+log~p(x)) \\ \end{aligned}​ qx=argmin(KL(qx(z)∣∣p(zx))=argmin(Eqx(z)[log qx(z)log p(xz)log p(z)]+log p(x))
  • 因为训练数据 x x x 是确定的,因此 l o g   p ( x ) log~p(x) log p(x) 是一个常数,于是上面的优化问题等价于:
    q x ∗ = a r g m i n ( E q x ( z ) [ l o g   q x ( z ) − l o g   p ( x ∣ z ) − l o g   p ( z ) ] = a r g m i n ( E q x ( z ) [ − l o g   p ( x ∣ z ) + ( l o g   p ( z ) − l o g   q x ( z ) ) ] ) = a r g m i n ( E q x ( z ) [ − l o g   p ( x ∣ z ) + K L ( q x ( z ) ∣ ∣ p ( z ) ) ] ) \begin{aligned} q_x^* &= argmin (E_{q_x(z)}[log~q_x(z)- log~p(x|z) -log~p(z)] \\ &= argmin( E_{q_x(z)}[-log~p(x|z) + (log~p(z) -log~q_x(z))]) \\ &= argmin (E_{q_x(z)}[-log~p(x|z) + KL(q_x(z)||p(z))]) \\ \end{aligned} qx=argmin(Eqx(z)[log qx(z)log p(xz)log p(z)]=argmin(Eqx(z)[log p(xz)+(log p(z)log qx(z))])=argmin(Eqx(z)[log p(xz)+KL(qx(z)∣∣p(z))])
  • 此时,观察一下优化方程的形式…已经是我们前面所说的VAE的损失函数了~~
  • 显然,跟我们希望解码准确的目标是一致的。要解码的准,则 p ( x ∣ z ) p(x|z) p(xz) 应该尽可能的小,编码特征 z z z 的分布 q x ( z ) q_x(z) qx(z) p ( z ) p(z) p(z) 尽可能的接近,此时恰好 − l o g   p ( x ∣ z ) -log~p(x|z) log p(xz) K L ( q x ( z ) ∣ ∣ p ( z ) ) KL(q_x(z)||p(z)) KL(qx(z)∣∣p(z)) 都尽可能的小,与损失的优化的目标也一致。

4.3 如何计算极值

  • 正如前面所提到的AE潜变量的局限性,我们希望VAE的潜变量分布 p ( z ) p(z) p(z) 应该能满足海量的输入数据 x x x 并且相互独立,基于中心极限定理,以及为了方便采样,我们有理由直接假设 p ( z ) p(z) p(z) 是一个标准的高斯分布 N ( 0 , 1 ) \mathcal{N}(0,1) N(0,1) .

4.4 编码部分

  • 我们先来看一下编码部分,我们希望拟合一个分布 q x ( z ) = N ( μ , σ ) q_x(z)=\mathcal{N}(\mu,\sigma) qx(z)=N(μ,σ) 尽可能接近 p ( z ) = N ( 0 , 1 ) p(z) =\mathcal{N}(0,1) p(z)=N(0,1), 关键就在于基于输入 x x x 计算 μ \mu μ σ \sigma σ, 直接算有点困难,于是就使用两个神经网络 f ( x ) f(x) f(x) g ( x ) g(x) g(x) 来无脑拟合 μ \mu μ σ \sigma σ
  • 值得一提的是,很多地方实际使用的 f ( x ) f(x) f(x) g ( x ) g(x) g(x) 两部分神经网络并不是独立的,而是有一部分交集,即他们都先通过一个 h ( x ) h(x) h(x) 映射到一个中间层 h h h, 然后分别对 h h h 计算 f ( h ) f(h) f(h) g ( h ) g(h) g(h). 这样错的好处的话一方面是可以减少参数数量,另外这样算应该会导致拟合的效果差一些,算是防止过拟合吧。

4.5 解码部分

  • 解码,即从潜变量 z z z 生成数据 x x x 的过程,在于最大化似然 p ( x ∣ z ) p(x|z) p(xz) ,那这应该是个什么分布呢?通常我们假设它是一个伯努利分布或是高斯分布。
  • 知道了分布类型,那计算 − l o g   p ( x ∣ z ) -log~p(x|z) log p(xz) 最小值其实只要把分布公式带进去算就可以了.

4.5.1 高斯分布

a r g m i n ( − log ⁡   q ( x ∣ z ) ) = a r g m i n 1 2 ∥ x − μ ~ ( z ) σ ~ ( z ) ∥ 2 + c 2 log ⁡   2 π + 1 2 = a r g m i n 1 2 ∥ x − μ ~ ( z ) σ ~ ( z ) ∥ 2 \begin{aligned} arg min( -\log~q(x|z)) &=argmin \frac{1}{2}\left\Vert\frac{x-\tilde{\mu}(z)}{\tilde{\sigma}(z)}\right\Vert^2 + \frac{c}{2}\log~2\pi + \frac{1}{2} \\ &= argmin \frac{1}{2}\left\Vert\frac{x-\tilde{\mu}(z)}{\tilde{\sigma}(z)}\right\Vert^2 \end{aligned} argmin(log q(xz))=argmin21 σ~(z)xμ~(z) 2+2clog 2π+21=argmin21 σ~(z)xμ~(z) 2

  • 和预期一样,演变为了均方误差。

4.5.2 伯努利分布

  • 假设伯努利的二元分布是 P P P 1 − P 1-P 1P (注意这里是输出没一维组成的向量)
    a r g m i n ( − log ⁡ q ( x ∣ z ) ) = a r g m i n ( − x log ⁡ P − ( 1 − x ) log ⁡ ( 1 − P ) ) argmin ( -\log q(x|z)) = argmin( - x \log P - (1-x) \log (1 -P)) argmin(logq(xz))=argmin(xlogP(1x)log(1P))
  • 正好就是交叉熵的损失。然后,将编码和解码部分组合到一起,就形成了完整的VAE网络。

4.6 Reparameterization trick

在这里插入图片描述

  • 训练的时候似乎出了点问题。从编码得到的分布 N ( μ , σ ) \mathcal{N}(\mu,\sigma) N(μ,σ) 随机采样 z z z 的这个过程没法求导,没法进行误差反向传播。
  • Reparameterization trick :解决VAE 的 Encoder 产生的分布函数无梯度可优化问题
    z = μ + ε ⋅ σ = f ( x ) + ε ⋅ g ( x ) , ε ∼ N ( 0 , 1 ) z = μ+ε·σ=f(x) +ε·g(x) , ε\sim N(0,1) z=μ+εσ=f(x)+εg(x),εN(0,1)
    在这里插入图片描述
  • 这样一来将采样变成了一个数值变换,整个过程便可导了。
  • 这样,训练好模型之后,我们可以直接将解码部分拿出来,通过标准高斯分布随机采样源源不断的生成数据了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AutoEncoder及Variational AutoEncoder模型 的相关文章

随机推荐

  • 【hive】基于Qt5和libuv udp 的lan chat

    作者已经不更新了 但是很棒 在线用户列表 聊天窗口 主程序 单独的网络线程 network thread data管理关联网络管理的 程序update升级更新 和消息收到 即可
  • 两则预防crontab重复执行任务策略

    案例分析 前台异步上传文件到云端后台cron 10 usr local bin php path to upload php gt gt tmp apkqueue log 有时候上传一个文件到云端会很耗时 xff0c 一个cron还没有跑完
  • Windows10 Server 2012 2016 2019系统自动登录设置

    本教程适用于Windows Server 2008 2012 2016 2019服务器操作系统 Windows10的 xff1a 1909 1903 1809 1803及以下的版本 Windows电脑设置空密码风险很大 xff0c 设置了密
  • HAL库+环形队列(CFIFO)+Usart1+DMA数据缓存收发

    目录 一 参考文档 二 源代码 三 结构说明 四 原理讲解 五 代码讲解 4 1循环队列 CFIFO 代码 4 1 1 xff1a cifio h 4 1 1 xff1a cifio c 4 2循环队列 CFIFO 43 DMA实现USAR
  • linux登陆远程服务器的方式

    1 使用ssh设置好之后远程登录 xff1b 2 使用linux命令远程登录 xff1a 在macOS中 Linux系统同样适用 xff0c 打开终端 xff0c 输入ssh username 64 host就可以登录远程主机了 这里use
  • (计算机组成原理)Cache和主存之间的映射方式

    地址映射变换机构是将CPU送来的主存地址转换为Cache地址 由于贮存和Cache的块大小相同 xff0c 块内地址都是相对于快的起始地址的偏移量 xff08 即低位地址相同 xff09 xff0c 因此地址变换主要是主存块号与Cache块
  • 对于典型数据集,不同神经网络分类器的精确度排序

    不同神经网络分类器的精确度排序 包括如下典型数据集 xff1a MNIST CIFAR 10 CIFAR 100 STL 10 SVHN the website of the current state of the art in obje
  • CCF 202012-2 期末预测之最佳阈值 python

    CCF 202012 2 期末预测之最佳阈值 python 100 这道题对时间进行了限制 xff0c 所以要想一次遍历得出结果 xff0c 就应该思考 xff01 样例输入 安全指数011357挂科情况001111 思路详解 lt 前提
  • failed to open X11 display

    kali xff1a failed to open X11 display 在使用kali的rdeshtop进行远程桌面时 xff0c 出现了如下错误 xff1a root 64 kali span class token comment
  • python plt 画图实战

    matplotlib pyplot 画图实战 如果你想将神经网络的训练结果 xff0c 清晰地呈现出来 xff0c 不妨看看这篇文章 xff01 技术要点 xff1a 1 一张figure呈现一个横坐标对应多个纵坐标的曲线图 2 设置标题
  • 模拟退火解决TSP问题

    模拟退火解决TSP问题 模拟退火 https mp weixin qq com s src 61 11 amp timestamp 61 1633564978 amp ver 61 3359 amp signature 61 oeLMbNZ
  • Neo4j 下载安装

    Neo4j 下载安装 Windows Neo4j community 新旧版本下载 旧版本在官网上已经找不到了 xff0c 新旧版本的区别在于登录是否需要密码 Windows Neo4j community 2 0 1及2 1 0 不需要密
  • 【libuv】1.44 windows构建

    uv a 作为一个独立的工程构建的 c 工程里c符号找不到 链接不过 Build started span class token punctuation span span class token operator span class
  • SEU健康申报+离校请假

    SEU健康申报 43 离校请假 Github源码 通过对源码的学习修改 xff0c 本程序稍作调整 xff0c 将健康申报 销假和请假模块分开 xff0c 目前可用 配置 chromedriver下载方法 xff0c 将下载的chromed
  • ValueError: Please provide model inputs as a list or tuple of 2 or 3 elements: (input, target)

    ValueError Please provide model inputs as a list or tuple of 2 or 3 elements input target 报错信息 Traceback span class toke
  • tensorflow checkout 的作用

    tensorflow checkout 的作用 参考链接如下 xff1a Tensorflow保存恢复模型及微调 网络模型的保存和读取 tensorflow训练保存的模型 模型文件夹中的文件主要为以下三类 xff1a checkpoint
  • afl-fuzz多线程

    afl fuzz多线程 afl fuzz多线程 https blog csdn net lesliegail1 article details 70209351 首先 xff0c 我们阅读这篇博客对afl fuzz单机多线程进行了解 我们了
  • 将同一文件夹下的大量文件根据设定分至多组

    将同一文件夹下的大量文件根据设定分至多组 需求分析 在recon文件夹下存在大量文件 xff0c 观察文件名 xff0c 我们设计将文件按照recon 后的第一个数字进行分组 xff0c 那么最终产生的文件夹应为0 1 11 编写程序 基于
  • CCF 202206-4 光线追踪 python

    CCF 202206 4 光线追踪 python CCF官网题目 此题因为运行超时得到了30分 xff0c 仅为没思路的同学提供一些想法 xff0c 如果有改进建议欢迎评论 xff01 题目分析 首先将反射镜转换为单独的反射点 xff0c
  • AutoEncoder及Variational AutoEncoder模型

    AutoEncoder及Variational AutoEncoder模型 一 AutoEncoder概述 作为一种无监督或者自监督算法 xff0c 自编码器本质上是一种数据压缩算法 从现有情况来看 xff0c 无监督学习很有可能是一把决定