文章:(van den Oord et al., 2017);苏神博客:(苏剑林, 2019)。
先把
我们希望的 loss 是
- 取最近邻这个步骤不可导;
- 如何更新
。
对于第一个问题,文章提出了一种叫 Straight-Through Estimator 的方法,参考的是 (Bengio et al., 2013)。本质上其实是在求导的时候,将离散操作看成某个平滑的连续函数。具体操作上,我们令
而写代码的时候,我们只需要在 forward 的时候写
python
z_q = z + (z_q - z).detach()
就可以了。其中 z_q 指的是
对于第二个问题,首先我们希望
一般情况下
所以最终 loss 是
References
Bengio, Y., Léonard, N., & Courville, A. (2013). Estimating or Propagating Gradients Through Stochastic Neurons for Conditional Computation. arxiv.org
van den Oord, A., Vinyals, O., & Kavukcuoglu, K. (2017). Neural Discrete Representation Learning. Advances in Neural Information Processing Systems, 30, 6306–6315. proceedings.neurips.cc
苏剑林. (2019, June). VQ-VAE的简明介绍:量子化自编码器. spaces.ac.cn