栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

VAE与CVAE

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

VAE与CVAE

CVAE理论到代码
  • 1. VAE的本质
    • 1.1 深度理解VAE
    • 1.2 VAE 与GAN
  • 2. CVAE
    • 2.1 CVAE简介
    • 2.2 CVAE基本模型
    • 2.3 数学理解
  • 参考

1. VAE的本质 1.1 深度理解VAE
  1. VAE本质就是在我们常规的自编码器的基础上,对encoder的结果(在VAE中对应着计算均值的网络)加上了 “ 高 斯 噪 声 ” color{red}“高斯噪声” “高斯噪声”, 使 得 结 果 d e c o d e r 能 够 对 噪 声 有 鲁 棒 性 color{red}使得结果decoder能够对噪声有鲁棒性 使得结果decoder能够对噪声有鲁棒性;而那个额外的KL loss(目的是让均值为0,方差为1),事实上就是相当于对encoder的一个正则项,希望encoder出来的东西均有零均值。

  2. VAE 中的encoder(对应着计算方差的网络)的作用:是用来 动 态 调 节 噪 声 的 强 度 color{red}动态调节噪声的强度 动态调节噪声的强度的。

    • 当decoder还没有训练好时( 重 构 误 差 color{blue}重构误差 重构误差远大于KL loss),就会适当 降 低 噪 声 color{blue}降低噪声 降低噪声(KL loss增加),使得拟合起来容易一些(重构误差开始下降);
    • 如果decoder训练得还不错时( 重 构 误 差 color{blue}重构误差 重构误差小于KL loss),这时 噪 声 就 会 增 加 color{blue}噪声就会增加 噪声就会增加(KL loss减少),使得拟合更加困难了(重构误差又开始增加),这时候decoder就要想办法提高它的生成能力了。

    具体理解参照:下图,以及以下公式

    1. 观测数据集 X = { x ( i ) } i = 1 N i . i . d X=left{ mathtt{x}^{(i)} right}^N_{i=1} i.i.d X={x(i)}i=1N​i.i.d( X X X本身可能是连续分布或者离散分布),对某个 x x x的概率处理:
      log ⁡    p θ ( x ( i ) ) = log ⁡    p θ ( x ( i ) , z ) − log ⁡    p θ ( z ∣ x ( i ) ) = log ⁡    p θ ( x ( i ) , z ) q ϕ ( z ∣ x ( i ) ) − log ⁡    p θ ( z ∣ x ( i ) ) q ϕ ( z ∣ x ( i ) )      ( q ϕ ( z ∣ x ( i ) ) ≠ 0 ) . (1.1) begin{aligned}log; p_{theta}(mathtt{x}^{(i)} )&=log; p_{theta }(mathtt{x}^{(i)},mathtt{z})- log; p_{theta }(mathtt{z}|mathtt{x}^{(i)})\ &=log; frac{p_{theta }(mathtt{x}^{(i)},mathtt{z})}{q_{phi}(mathtt{z}|mathtt{x}^{(i)})}-log; frac{p_{theta }(mathtt{z}|mathtt{x}^{(i)})}{q_{phi}(mathtt{z}|mathtt{x}^{(i)})}; ; (q_{phi}(mathtt{z}|mathtt{x}^{(i)})neq 0).end{aligned}tag{1.1} logpθ​(x(i))​=logpθ​(x(i),z)−logpθ​(z∣x(i))=logqϕ​(z∣x(i))pθ​(x(i),z)​−logqϕ​(z∣x(i))pθ​(z∣x(i))​(qϕ​(z∣x(i))​=0).​(1.1)
      (2.2.2)式两边对 q ϕ ( z ∣ x ( i ) ) q_{phi}(mathtt{z}|mathtt{x}^{(i)}) qϕ​(z∣x(i))求期望得:
      log ⁡ p θ ( x ( i ) ) = D K L ( q ϕ ( z ∣ x ( i ) ) ∣ ∣ p θ ( z ∣ x ( i ) ) ) + L ( θ , ϕ ; x ( i ) ) (1.2) log p_theta(mathtt{x}^{(i)})=D_{KL}{(q_{phi}(mathtt{z}|mathtt{x}^{(i)})||p_{theta }(mathtt{z}|mathtt{x}^{(i)}))}+mathcal{L}(theta,phi;mathtt{x}^{(i)})tag{1.2} logpθ​(x(i))=DKL​(qϕ​(z∣x(i))∣∣pθ​(z∣x(i)))+L(θ,ϕ;x(i))(1.2)
      其中:
      { L ( θ , ϕ ; x ( i ) ) = ∫ z q ϕ ( z ∣ x ( i ) ) log ⁡   p θ ( z , x ( i ) ) q ϕ ( z ∣ x ( i ) ) d z D K L ( q ϕ ( z ∣ x ( i ) ) ∣ ∣ p θ ( z ∣ x ( i ) ) ) = − ∫ z q ϕ ( z ∣ x ( i ) ) log ⁡   p θ ( z ∣ x ( i ) ) q ϕ ( z ∣ x ( i ) ) d z color{blue}{ begin{aligned} mathcal{L}(theta,phi;mathtt{x}^{(i)})&=int_z q_{phi}(mathtt{z}|mathtt{x}^{(i)}) log frac{p_{theta }(mathtt{z},mathtt{x}^{(i)})}{q_{phi}(mathtt{z}|mathtt{x}^{(i)})}dz\ D_{KL}{(q_{phi}(mathtt{z}|mathtt{x}^{(i)})||p_{theta }(mathtt{z}|mathtt{x}^{(i)}))}&= - int_z q_{phi}(mathtt{z}|mathtt{x}^{(i)})log frac{p_{theta }(mathtt{z}|mathtt{x}^{(i)})}{q_{phi}(mathtt{z}|mathtt{x}^{(i)})}dz end{aligned} {L(θ,ϕ;x(i))DKL​(qϕ​(z∣x(i))∣∣pθ​(z∣x(i)))​=∫z​qϕ​(z∣x(i))log qϕ​(z∣x(i))pθ​(z,x(i))​dz=−∫z​qϕ​(z∣x(i))log qϕ​(z∣x(i))pθ​(z∣x(i))​dz​

    2. L ( θ , ϕ ; x ( i ) ) mathcal{L}(theta,phi;mathtt{x}^{(i)}) L(θ,ϕ;x(i))又可以写成:
      L ~ B ( θ , ϕ ; x ( i ) ) ≃ 1 2 ∑ j = 1 J ( 1 + log ⁡ ( ( σ j ( i ) ) 2 ) − ( μ j ( i ) ) 2 − ( σ j ( i ) ) 2 ) ⏟ R e g u l a r i z a t i o n    L o s s + 1 L ∑ l = 1 L ( log ⁡ p θ ( x ( i ) ∣ z ( i , l ) ) ) ⏟ R e c o n s t r u c t i o n    L o s s w h e r e z ( i , l ) = g ϕ ( x ( i ) , ϵ ( l ) ) = μ ( i ) + σ ( i ) ⊙ ϵ ( l ) a n d ϵ ( l ) ∼ N ( 0 , I ) (1.3) color{red}begin{aligned}&widetilde{mathcal{L}}^{B}left(boldsymbol{theta}, boldsymbol{phi} ; mathbf{x}^{(i)}right)simeq underbrace{frac{1}{2} sum_{j=1}^{J}left(1+log left(left(sigma_{j}^{(i)}right)^{2}right)-left(mu_{j}^{(i)}right)^{2}-left(sigma_{j}^{(i)}right)^{2}right)}_{Regularization;Loss}+underbrace{frac{1}{L} sum_{l=1}^{L}left(log p_{boldsymbol{theta}}left(mathbf{x}^{(i)} mid mathbf{z}^{(i, l)}right)right)}_{Reconstruction;Loss}\ &where quadmathbf{z}^{(i,l)}=g_phi(mathbf{x}^{(i)},epsilon^{(l)})=boldsymbol{mu}^{(i)} + boldsymbol{sigma^{(i)}}odot epsilon^{(l)} quad and quad boldsymbol{epsilon}^{(l)} sim mathcal{N}(mathbf{0},mathbf{I})end{aligned}tag{1.3} ​L B(θ,ϕ;x(i))≃RegularizationLoss 21​j=1∑J​(1+log((σj(i)​)2)−(μj(i)​)2−(σj(i)​)2)​​+ReconstructionLoss L1​l=1∑L​(logpθ​(x(i)∣z(i,l)))​​wherez(i,l)=gϕ​(x(i),ϵ(l))=μ(i)+σ(i)⊙ϵ(l)andϵ(l)∼N(0,I)​(1.3)

      具体符号意义见:【论文阅读】生成模型——变分自编码器(Variational Auto-Encoder,VAE)公式(3.1.6)

1.2 VAE 与GAN
  1. VAE的对抗性
    VAE中 重 构 的 过 程 是 希 望 没 噪 声 的 color{red}重构的过程是希望没噪声的 重构的过程是希望没噪声的,而 K L l o s s 则 希 望 有 高 斯 噪 声 的 color{red}KL loss则希望有高斯噪声的 KLloss则希望有高斯噪声的, 两 者 是 对 立 的 color{red}两者是对立的 两者是对立的。所以,VAE跟GAN一样,内部其实是包含了一个对抗的过程,只不过它们两者是混合起来,共同进化的。
  2. VAE与GAN
    1. VAE是共同进化
    2. GAN的特点
      • G A N 中 , 造 假 者 在 进 化 时 , 鉴 别 者 是 安 然 不 动 的 , 反 之 亦 然 。 color{red}GAN中,造假者在进化时,鉴别者是安然不动的,反之亦然。 GAN中,造假者在进化时,鉴别者是安然不动的,反之亦然。
      • GAN真正高明的地方是: 连 度 量 都 直 接 训 练 出 来 了 , 而 且 这 个 度 量 往 往 比 人 工 想 的 要 好 。 color{red}连度量都直接训练出来了,而且这个度量往往比人工想的要好。 连度量都直接训练出来了,而且这个度量往往比人工想的要好。
  3. VAE的准确性
    每个 p ( Z ∣ X ) p(Z|X) p(Z∣X)是不可能完全精确等于标准正态分布,否则 p ( Z ∣ X ) p(Z|X) p(Z∣X)就相当于跟 X X X无关了,重构效果将会极差。最终的结果就会是, p ( Z ∣ X ) p(Z|X) p(Z∣X)保留了一定的 X X X信息,重构效果也还可以,并且下式近似成立,所以同时保留着生成能力。
    p ( Z ) = ∑ X p ( Z ∣ X ) p ( X ) = ∑ X N ( 0 , I ) p ( X ) = N ( 0 , I ) ∑ X p ( X ) = N ( 0 , I ) (1.4) p(Z)=sum_{X} p(Z mid X) p(X)=sum_{X} mathcal{N}(0, I) p(X)=mathcal{N}(0, I) sum_{X} p(X)=mathcal{N}(0, I)tag{1.4} p(Z)=X∑​p(Z∣X)p(X)=X∑​N(0,I)p(X)=N(0,I)X∑​p(X)=N(0,I)(1.4)

2. CVAE 2.1 CVAE简介
  1. VAE是无监督训练的,因此很自然想到:如果有标签数据,那么能不能把标签信息加进去辅助生成样本呢?这个问题的意图,往往是希望能够实现控制某个变量来实现生成某一类图像。当然,这是肯定可以的,我们把这种情况叫做Conditional VAE,或者叫CVAE。(相应地,在GAN中我们也有个CGAN。)

  2. 但是, C V A E 不 是 一 个 特 定 的 模 型 , 而 是 一 类 模 型 color{red}CVAE不是一个特定的模型,而是一类模型 CVAE不是一个特定的模型,而是一类模型,总之就是 把 标 签 信 息 融 入 到 V A E 中 的 方 式 有 很 多 , 目 的 也 不 一 样 color{red}把标签信息融入到VAE中的方式有很多,目的也不一样 把标签信息融入到VAE中的方式有很多,目的也不一样。这里基于前面的讨论,给出一种非常简单的VAE。

2.2 CVAE基本模型
  1. VAE与CVAE对比
    • VAE基本模型:
    • CVAE基本模型:
2.3 数学理解
  • VAE中希望 X X X经过编码后, Z Z Z的分布都具有零均值和单位方差,这个“希望”是通过加入了KL loss来实现的。如果现在多了类别信息 Y Y Y。
  • CVAE希望同一个类的样本都有一个专属的均值 μ Y μ^Y μY(方差不变,还是单位方差),这个 μ Y μ^Y μY让模型自己训练出来。这样的话,有多少个类就有多少个正态分布,而在生成的时候,我们就可以通过控制均值来控制生成图像的类别。
  • 事实上,这样可能也是在VAE的基础上加入最少的代码来实现CVAE的方案了,因为这个“新希望”也只需通过修改KL loss实现:
    L ~ B ( θ , ϕ ; x ( i ) ) ≃ 1 2 ∑ j = 1 J ( 1 + log ⁡ ( ( σ j ( i ) ) 2 ) − ( μ j ( i ) − μ j Y ( i ) ) 2 − ( σ j ( i ) ) 2 ) ⏟ R e g u l a r i z a t i o n    L o s s + 1 L ∑ l = 1 L ( log ⁡ p θ ( x ( i ) ∣ z ( i , l ) ) ) ⏟ R e c o n s t r u c t i o n    L o s s w h e r e z ( i , l ) = g ϕ ( x ( i ) , ϵ ( l ) ) = μ ( i ) + σ ( i ) ⊙ ϵ ( l ) a n d ϵ ( l ) ∼ N ( 0 , I ) (2.1) color{red}begin{aligned}&widetilde{mathcal{L}}^{B}left(boldsymbol{theta}, boldsymbol{phi} ; mathbf{x}^{(i)}right)simeq underbrace{frac{1}{2} sum_{j=1}^{J}left(1+log left(left(sigma_{j}^{(i)}right)^{2}right)-left(mu_{j}^{(i)}-mu_{j}^{Y^{(i)}}right)^{2}-left(sigma_{j}^{(i)}right)^{2}right)}_{Regularization;Loss}+underbrace{frac{1}{L} sum_{l=1}^{L}left(log p_{boldsymbol{theta}}left(mathbf{x}^{(i)} mid mathbf{z}^{(i, l)}right)right)}_{Reconstruction;Loss}\ &where quadmathbf{z}^{(i,l)}=g_phi(mathbf{x}^{(i)},epsilon^{(l)})=boldsymbol{mu}^{(i)} + boldsymbol{sigma^{(i)}}odot epsilon^{(l)} quad and quad boldsymbol{epsilon}^{(l)} sim mathcal{N}(mathbf{0},mathbf{I})end{aligned}tag{2.1} ​L B(θ,ϕ;x(i))≃RegularizationLoss 21​j=1∑J​(1+log((σj(i)​)2)−(μj(i)​−μjY(i)​)2−(σj(i)​)2)​​+ReconstructionLoss L1​l=1∑L​(logpθ​(x(i)∣z(i,l)))​​wherez(i,l)=gϕ​(x(i),ϵ(l))=μ(i)+σ(i)⊙ϵ(l)andϵ(l)∼N(0,I)​(2.1)

更多内容,参考:CVAE

参考
  1. 变分自编码器(一):原来是这么一回事
  2. 代码
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/580878.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号