VQ-VAE
随笔:VQ-VAE如何进行梯度传播
VQ-VAE前向过程
VQ-VAE包含
- 编码器 $Enc_\theta$
- 解码器 $Dec_\phi$
- 中间离散码表 $\{e_1,e_2,\cdots,e_K\}$
输入x,编码器得到其中间表示
随后在码表中进行最近邻搜索
送给Decoder进行重构
反向过程(如何更新Codebook和Encoder)
为了更新Encoder,设计如下的重构损失
sg在正向传播设置为1,反向传播视为0
Dec输入还是$z_q$,但是这里的sg操作表明梯度直接传递给z而不是$z_q$,回忆一下传统的Encoder-Decoder架构
梯度写成
这里相当于
更新codebook,目标是尽量让$z_q(x)$和z靠近,设计损失函数
对应$z_q$的梯度写成
对$z_q$求导因为第二项被stop gradient因此第二项对$z_q$实际不可导
借助Gumbel Softmax直接对$\arg\min$优化
从正态分布中采样
对于一个带参数正态分布 $\mathcal N(\mu_\theta,\sigma_\theta)$,如何保证采样结果对$\theta$可导
重参数重参数重参数重参数重参数重参数重参数重参数重参数重参数重参数参数**
积分采样的角度看重参数,计算下列期望
希望得到的期望对$\theta$可导,避免直接采样选择从一个无参分布$q$中采样若干$\epsilon|q$,计算、
离散情况下当然可以计算每个样本点上的期望,但是对于样本空间特别大的情况(100维0-1向量)很难,我们需要另一套科维采样的方法
可微采样
给定离散概率分布$p_1,p_2,\cdots,p_K$,定义Gumbel Softmax采样为
- 从$U(0,1)$中采样K个随机数$\epsilon_1,\epsilon_2,\cdots,\epsilon_K$
- 计算$\arg\max \log p_i - \log(-\log \epsilon_i)$,进行采样
引入softmax使得$\arg\max$可导
证明,假定$\log p_1 - \log (-\log \epsilon_1)$最大,则有
因此$p(\epsilon_i\leq \epsilon_1^{p_i/p_1}) = \epsilon_1^{p_i/p_1}$,对于$\forall i\neq 1$的概率为
在(0,1)上积分,得到$\log p_1 - \log (-\log \epsilon_1)$最大的概率为$p_1$
这种方式从离散分布时采样