生成模型之VAE

本文最后更新于:2023年3月21日 下午

生成模型之Variational Auto-Encoder

本篇内容主要参考台大李宏毅教授的视频,作为笔记使用

【機器學習2021】自編碼器 (Auto-encoder) (上) - 基本概念

ML Lecture 18: Unsupervised Learning - Deep Generative Model (Part II)

Auto-Encoder自动编码器

压缩自动编码器

graph LR
	高维图片 --> NN-Encoder --> 低维向量 --> NN-Decoder--> 生成图 --越接近越好-->高维图片

降噪自动编码器

graph LR
	原图.-原图+噪声
	原图+噪声 --> NN-Encoder --> 低维向量 --> NN-Decoder--> 生成图 --与原图越接近越好-->原图
	

解缠(Feature Disentangle)

输入信息常常由各种信息纠缠在一起,如

  • 图片中存在物体、纹理
  • 声音中存在文本内容、说话人信息
  • 一句话包含格式、语法
  • ……

这时候需要通过解缠得到不同维度包含的信息

应用:Voice Conversion语者转换

VAE变分自动编码器

AE和VAE区别

Auto-encoder

graph LR
  高维图片 --> NN-Encoder --> 低维向量 --> NN-Decoder--> 生成图

VAE

是在自动编码器的基础上做变分处理,使编码器的输出为目标分布的均值方差。

graph LR
  input --> NN-Encoder --> mu
	NN-Encoder --> sigma
	sigma --exp--> times((相乘))
	e --> times
	mu --> plus((相加))
	times -->plus
	plus --> z -->

 NN-Decoder--> output

其中mu、sigma、e、z均为向量,并且e内元素服从正态分布,\(z_i=\exp(\sigma_i)\times e_i + \mu_i\)

mu是均值,e是噪声,sigma代表噪声的大小即variance方差,z就是目标概率分布。为避免variance方差被生成为0,即没有噪声,需要加上限制条件。

所以需要最小化如下函数:

\[ \min \sum \limits _{i=1} ^n (\exp(\sigma_i)-(1+\sigma_i)+\mu_i^2) \]

VAE推导

高斯混合模型(GMM)

部分内容参考

【学习笔记】生成模型--变分自编码器

高斯混合模型是单一高斯概率密度函数的延伸,由于GMM能够平滑的近似任意形状的密度分布,因此常用在语音领域。

GMM的工作就是将复杂的P(x)分布变为多个高斯分布的混合,当拆分的越多时,越接近原始P(x)分布。

高斯混合模型离散变量

如果用每一组高斯分布的取值作为一个维度,就可以用m表示第几个维度,如果有512维,m的取值就是1,2,3……512

从多项式分布P(m)中采样一个整数m,表示一个高斯分布\(N(\mu^m,\sigma^m)\),P(x)可表示为所有这些高斯分布的和:

\[ P(x)=\sum \limits _mP(m)P(x|m) \]

其中,\(m\sim P(m)\)\(x|m \sim N(\mu^m,\sigma^m)\)

不过这种混合方式是离散的,还存在失真的地方,于是我们将其转化为连续的。

高斯混合模型连续变量

现在将离散变量m改为连续变量z,依旧是z的某一个取值对应一个高斯分布。

\(z\sim N(0,I)\)\(x|z\sim N(\mu(z),\sigma(z))\),其中\(\mu\)是得到z均值的函数,\(\sigma\)是得到z方差的函数。

于是P(x)的分布就可以表示为:

\[ P(x)=\int\limits _zP(z)P(x|z)dz \]

所以我们的目标就变成求解上面这个公式。

求解目标公式

\[ P(x)=\int\limits _zP(z)P(x|z)dz \]

其中\(P(z)\)已知,\(P(x|z)\)未知,\(P(x|z)\)\(x|z\sim N(\mu(z),\sigma(z))\),所以求\(P(x|z)\)转换为求解\(\mu,\sigma\)两个函数的表达式

如何求解\(\mu,\sigma\)函数?使用神经网络!

graph LR
	z --> NN-Decoder --> mu
	NN-Decoder --> sigma

同时我们再加上一个新的函数\(q(z|x)\)用来表示任意高斯分布,其中\(z|x \sim N(\mu'(x),\sigma'(x))\),表示对于一个输入的x,能够得到一对均值和方差,用于生成z的概率分布。

graph LR
  x --> NN-Encoder --> mu'
	NN-Encoder --> sigma'

因为实际上我们有数据x,现在是在求解参数,所以需要求\(P(x)\)的最大似然函数\(L=\sum \limits _x \log P(x)\)

  • 最大似然估计(MLE):在”模型已定,参数\(\theta\)未知”的情况下,通过观测数据来估计未知参数\(\theta\)的一种方法,要求所有采样都是独立同分布.
    • Note:最大似然估计的使用
      1. 写出似然函数
      2. 对似然函数取对数
      3. 两边同时求导(多个变量就求偏导)
      4. 令导数为0,解出似然方程
      • 例子

        最大似然函数例题
        例题解答

由于\(q(z|x)\)是一个任意的高斯分布,于是有\(\int \limits _z q(z|x)dz=1\),表示整个高斯分布的面积为1。

\[ \begin{aligned} \log P(x) &=\int \limits _zq(z|x)\log P(x)dz \\ &=\int \limits _zq(z|x)\log \big(\frac{P(x|z)P(z)}{P(z|x)}\big)dz \\ &=\int \limits _zq(z|x)\log (\frac{P(x|z)P(z)}{q(z|x)}\cdot\frac{q(z|x)}{p(z|x)})dz \\ &= \int \limits _zq(z|x)\log(\frac{P(x|z)P(z)}{q(z|x)})dz + \int \limits _zq(z|x)\log(\frac{q(z|x)}{P(z|x)})dz \\ &= \int \limits _zq(z|x)\log(\frac{P(x|z)P(z)}{q(z|x)})dz +KL(q(z|x)||P(z|x)) \end{aligned} \]

最后得到两项,第二项KL散度非负,所以第一项就是结果的下界\(L_b\)

\[ \log P(x) \geqslant \int \limits _z q(z|x)\log(\frac{P(x|z)P(z)}{q(z|x)})dz \]

\[ \log P(x) = L_b+KL(q(z|x)||P(z|x)) \]

这里将原本的问题:求\(P(x|z)\)使得\(\log P(x)\)最大化

转换为了新的问题求P(x|z)和q(z|x)使得\(\log P(x)\)最大化

看起来像是多了一个\(q(z|x)\),其实不然,我们开始观察\(\log P(x)\)跟这两项的关系:

logP(x)和新问题的关系

根据\(P(x)=\int\limits _zP(z)P(x|z)dz\):

当我们保持\(P(x|z)\)不变时,\(P(z)\)不会变,\(P(x)\)也不会变,\(\log P(x)\)也不会变

再根据\(\log P(x) = L_b+KL(q(z|x)||P(z|x))\)

整个\(\log P(x)\)的大小不变,\(L_b\)越大,KL散度越小,当KL散度减小到零时,\(\log P(x)=L_b\)\(L_b\)此时只和\(q(z|x)\)有关。

此时我们发现:

\(\max \log P(x)\)等价于求\(\max L_b\)

VAE算法:Decoder每改进一次,Encoder就调节成与其一致,利用约束条件逼迫Decoder前进

开始求解\(\max L_b\)

\[ \begin{aligned} L_b &= \int \limits _zq(z|x)\log (\frac {P(x|z)P(z)}{q(z|x)})dz \\ &= \int \limits _zq(z|x)\log (\frac {P(z)}{q(z|x)})dz + \int \limits _zq(z|x)\log P(x|z)dz \\ &=-KL(q(z|x)||P(z))+\int \limits _zq(z|x)\log P(x|z)dz \end{aligned} \]

记第一项为A,第二项为B,现在求解\(L_b\)的最大值,需要求A的最大值(KL散度的最小值),B的最大值

展开A后可以得到约束项:\(\min \sum \limits _{i=1} ^n (\exp(\sigma_i)-(1+\sigma_i)+\mu_i^2)\),证明方法来自VAE原论文《Auto-Encoding Variational Bayes》

求B的最大值:

\[ \max B = \max E_{q(z|x)}[\log P(x|z)] \]

可理解为提供一个x的值,在\(q(z|x)\)这个分布下,让\(\log P(x|z)\)值越大越好,这件事情就是NN-Encoder在做的。

graph LR
  x --> NN-Encoder --> mu'
	NN-Encoder --> sigma'
	mu'-->z
	sigma'-->z
	z-->NN-Decoder-->mu
	NN-Decoder-->sigma
	mu .-越接近越好.-> x

VAE的损失函数的两部分,一是重建损失,二是约束项。


生成模型之VAE
https://ash-one.github.io/2022/08/02/sheng-cheng-mo-xing-zhi-vae/
作者
灰一
发布于
2022年8月2日
许可协议