VAE中重参数化技巧

谈起重参数化技巧,不得不提变分自编码器(VAE);在VAE中,我们知道需要对编码器的输出\mu (x)\Sigma (x)进行采样,从而可以将采样输入到编码器网络,能够得到输入样本x的重构f(x),以这种方式对模型进行训练。而VAE并没有这么做,而是采取了另一种做法:从(0,I)高斯分布中采样,然后和训练样本训练得到的\mu (x)\Sigma (x),做\mu (x) + \Sigma (x) \cdot N(0,I)运算的结果输入到解码器网络(点乘符号表示每个元素位置上的相乘),便能得到我们样本x的重构f(x),这让我很困惑很久。下面开始介绍重参数化技巧,以两种情况:

  • 概率分布:

直接从边缘概率分布中采样,即给定一个随机变量y,并且y \sim N(\mu ,\sigma ^{2}),这里我们用\theta表示这组参数,即:\theta = \left \{ \mu ,\sigma ^{2} \right.\left. \right \}。此时我们需要根据y所服从的高斯分布进行采样y,我们可以有根据y概率分布采样、Rejection Sampling 拒绝采样、MCMC采样、高维情况的Gibbs 采样等方法采样这几种方法都是对y进行采样而这里我们直接使用重参数化技巧不直接对y进行采样,后面将介绍为什么要这样做,具体做法:

先从z \sim N(0,I)中采样得到z^{(i)}.

根据表达式y = \mu +\sigma *z,以这种方式等价从y \sim N(\mu ,\sigma ^{2})采样,用y表该采样样本.

没错,过程就是这么简单,这里我们把采样得到的y看成关于\mu ,\sigma ,z的函数关系,即:y = f(\mu ,\sigma ,z),下面我们用神经网络来表示该函数映射,因为我们知道神经网络能够逼近任何复杂的函数,\mu ,\sigma看成神经网络的参数。

VAE中重参数化技巧_第1张图片

L(y)作为关于y的损失函数,也即目标函数,那么训练过程中关于参数\theta = \left \{ \mu ,\sigma ^{2} \right.\left. \right \}梯度的计算如下式:

\frac{\bigtriangledown L(y)}{\bigtriangledown \theta } = \frac{\bigtriangledown L(y)}{\bigtriangledown y }\cdot \frac{\bigtriangledown y}{\bigtriangledown \theta }

L是我们自定义的损失函数,关于y的偏导便是已知项,而y = \mu +\sigma *z是前面给定的,也相当于已知。接下来介绍为什么这样做:

我们需要对y的采样转换成从z \sim N(0,I)采样,可以解决模型训练过程梯度无法无法回传的问题,假设我们直接从y \sim N(\mu ,\sigma ^{2})采样,采样的结果和参数\theta = \left \{ \mu ,\sigma ^{2} \right.\left. \right \}的映射关系如何显示表达出来,如果无法表示出来,又谈何求梯度。在VAE中,该采样结果还要进解码器网络得到我们样本x的重构f(x),关于f(x)建立的损失函数在BP算法训练过程中,梯度从后往前回传,采样的结果y关于\left \{ \mu (x),\sigma(x) \right.\left. \right \}的显示映射不知道,梯度便无法拿到,也即无法继续向前回传。

  • 条件概率分布:

直接从后验概率分布中采样与前面不同的是,这里y是x给定下的条件下概率p(y|x)\sim N(\mu ,\sigma ^{2}),这里我们同样用\theta表示这组参数,即:\theta = \left \{ \mu ,\sigma ^{2} \right.\left. \right \}。此时我们需要根据y的后验概率采样y:

具体做法:

先从z \sim N(0,I)中采样得到z^{(i)}.

根据表达式y = \mu +\sigma *z,我们知道\mu ,\sigma都是和x相关,即:,于是前面表达式写成y = \mu(x) +\sigma(x) *z,以这种方式等价从y的后验中采样,用y表该采样样本.。

上述过程,在VAE中的表现形式:

VAE中重参数化技巧_第2张图片

接下来,我们来看看训练过程,采样的结果y关于参数\theta = \left \{ \mu ,\sigma ^{2} \right.\left. \right \}的偏微分;这里我们假设损失函数定义为均方误差的形式,L_{\theta }(y) = \sum_{i = 1}^{N}\parallel y-y^{(i)}\parallel ^{2}

故:\frac{\bigtriangledown L_{\theta }(y) }{\bigtriangledown \theta }=\frac{\bigtriangledown L_{\theta }(y) }{\bigtriangledown y}\cdot \frac{\bigtriangledown y}{\bigtriangledown \mu }\cdot \frac{\bigtriangledown \mu }{\bigtriangledown \theta } +\frac{\bigtriangledown L_{\theta }(y) }{\bigtriangledown y}\cdot \frac{\bigtriangledown y}{\bigtriangledown \sigma }\cdot \frac{\bigtriangledown \sigma }{\bigtriangledown \sigma }

个人感觉,对p(y|x)\sim N(\mu (x),\sigma ^{2}(x))的采样转换成从z \sim N(0,I)采样,将采样的随机性转移到从标准正态分布中采样,\theta = \left \{ \mu ,\sigma ^{2} \right.\left. \right \}是关于样本x训练得到对应隐空间的分布特征,以y = \mu(x) +\sigma(x) *z这种表达式采样的y,可以满足都在均值\mu附近,因此该采样通过解码器生成的新样本和原样本比较像。

在学习过程中,将自己的收获记录下来,以便日后翻阅、查缺补漏。

你可能感兴趣的:(机器学习,深度学习,算法的数学基础,机器学习,深度学习,神经网络,人工智能)