Re-parameterization,Gumbel-Softmax

Re-parameterization Trick

Re-parameterization Trick
重参数化技巧,就是从一个分布中采样的时候因为采样这个动作是离散的,那么计算图就不能传递梯度,因此参数无法进行更新。比如我们想从概率分布[0.2,0.6,0.2]中采样出比如[0,1,0]这个动作,但是由于采样的过程是离散的,无法进行参数传递,因此我们可以先假设概率分布服从一个高斯分布(或者多项式分布)那么这个概率分布可以表示成两个确定的参数,x和ϕ分别表示均值和标准差,因此输出的动作可以表示为z=x+ϵ⋅ϕ,ϵ是真正表示随机的变量,比如说是从标准正太分布中采样出来的一个值,这样,ϵ的值就在计算图之外,我们也不用更新,因此解决了采样导致梯度不可传递的问题,但是有一个限制条件就是我们必须制定,原来的概率分布是我们所规定的一个分布,比如说说正太分布或者是多项式分布。

image.png

Gumbel-Softmax Trick

VAE的例子是一个连续分布(正态分布)的重参数(意思是可以采样出0.23,0.818889这样的值),离散分布的情况也一样(只能采样出整数值),首先需要可以采样,使得离散的概率分布有意义而不是只取概率最大的值,其次需要可以计算梯度。


Gumbel-softmax

具体操作

原理

image.png

这样就把在原来的离散分布[0.2,0.1,0.6,0.1]中采样得到[0,0,1,0],变成了一个确定的softmax后的概率分布[0.0012,0.0012,0.9993,0.0004] (确定的是指对原来的离散分布求梯度是确定的,梯度可以进行传递),而随机的动作仅仅有Gumble分布中采样得到的随机变量进行,是不需要计算梯度的。


image.png

Q:对于一个取值任意的向量,用 softmax 函数将它变换成概率向量和用 gumbel-softmax 将它变换成概率向量的区别在哪里呢?后者相对于前者的优势在哪里?

A: 最大的区别在于,gumbel-softmax 得到的是采样过后的样本(尽管是近似的),而 softmax 得到的则是样本的确定的均值(对于离散分布来说,其实就是各类概率)。 因为有这个区别,所以他们用的场合是不一样的(如果这也可以看做优势的话)。正像我下面要说的,gumbel-softmax 用在需要对离散分布取样本,而又希望它可导,可以训练的场合,比如最常见的, GAN 里的 generator 。如果你的 model 里不需要对离散分布取样,只需要它的各类概率。比如分类问题,你只需要把最后预测的离散分布的各类概率用 softmax 求出来,就可以带入 CE loss 进行训练了。

image.png

上面式子里的参数τ(温度参数,正数)越接近0的时候,z越接近one_hot向量,越大的时候越接近均匀分布。然后我们得到了一些可以对p求导的x的取样值(比如设置大于0.5的做一个操作,其他的不做操作,本质上来说和采样到的onehot编码是一样的用途)。
因此一般在训练的时候最开始的值较大,慢慢接近于0。

你可能感兴趣的:(Re-parameterization,Gumbel-Softmax)