深度学习中的不可导操作(次梯度和重参数化).

蹲街弑〆低调 提交于 2020-01-31 06:37:33

深度学习中的不可导操作(次梯度和重参数化).

主要包括两大类


知乎专栏对公式支持较好, 见 https://zhuanlan.zhihu.com/p/97465608

个人公众号 图与推荐

图与推荐

次梯度

深度学习算法通常需要反向传播来进行优化,这就涉及到求导的问题. 激活函数需要满足单调,处处可导,有界等条件. 如传统的sigmoid函数,但是现在很多激活函数并不是处处可导的.

如ReLU函数
ReLU(x)=max(0,x) ReLU(x) = max(0,x)
其图像如下

img

很明显在x=0x=0处不可导,那么如何实现反向传播和模型优化呢? 答案就是:次梯度

次梯度
c<=f(x)f(x0)xx0 c <=\frac{f(x)-f(x_0)}{x-x_0}
对于ReLU函数, 当x>0的时候,其导数为1; 当x<0时,其导数为0. 则ReLU函数在x=0的次梯度是c[0,1]c\in[0,1] ,这里是次梯度有多个,可以取0,1之间的任意值. 工程上为了方便取c=0即可.

重参数技巧

VAE中对高斯分布的重参数

这里是对连续分布的重参数.

VAE中隐变量z一般取高斯分布,即z=N(μ,σ2)z=\mathcal{N}(\mu, \sigma^2),然后从这个分布中采样.但是这个采样操作是不可导的,进而导致整个模型无法BP. 解决方法就是Reparametrization tricks重参数技巧.

我们首先从从均值为0,标准差为1的高斯分布中采样,再放缩平移得到Z.

zi=μiσiϵ,ϵN(0,I) \mathbf { z } _ { i } = \mu _ { i } \sigma _ { i } * \epsilon , \epsilon \sim \mathcal { N } ( 0 , \mathbf { I } )

这样从ϵ\epsilonz\mathbf{z}只涉及了线性操作(平移缩放),采样操作在NN计算图之外,而ϵ\epsilon对于NN来说只是一个常数.

离散分布的采样Gumbel-softmax

Gumbel-Softmax Trick

VAE的例子是一个连续分布(正态分布)的重参数,离散分布的情况也一样,首先需要可以采样,使得离散的概率分布有意义而不是只取概率最大的值,其次需要可以计算梯度。那么怎么做到的,具体操作如下:

对于n维概率向量π\pi,对π\pi对应的离散随机变量xπx_{\pi}添加Gumbel噪声,再取样
xπ=argmax(log(πi)Gi) x_{\pi}=\arg\max(\log(\pi_i) G_i)
其中GiG_i是是独立同分布的标准Gumbel分布的随机变量,标准Gumbel分布的CDF为F(x)=eex,F1(x)=log(log(x))F(x)=e^{-e^{-x}},F^{-1}(x)=-\log(-\log(x)).这就是Gumbel-Max trick。可以看到由于这中间有一个argmax操作.

上述的 argmax操作是不可导的. 所以尝试用softmax来代替, 即Gumbel-Softmax Trick. 这里我们假设argmax返回的是一个one-hot向量,那么我们需要找到argmax的一个显式且光滑的逼近. 这里的GiG_i可以利用F1(x)F_{-1}(x)从均匀分布中采样得到,即Gi=log(log(Ui)),UiU(0,1)G_i=-\log(-\log(U_i)),U_i\sim U(0,1).

综上总体思路:

  1. 基于Gumbel Distribution采样来避免不可导问题
  2. 在1中引入了argmax又导致了不可导(Gumbel max)
  3. 又引入softmax函数来对argmax进行光滑近似,使得可导(Gumbel softmax)

具体步骤如下:

  • 对于网络输出的一个n维向量v, 生成n个服从均匀分布U(0,1)的独立样本ϵ1,...,ϵn\epsilon_1,...,\epsilon_n

  • 通过Gi=log(log(ϵi))G_i=-\log(-\log(\epsilon_i))计算得到GiG_i

  • 对应相加得到新的值向量v=[v1G1,v2G2,...,vnGn]v'=[v_1 G_1,v_2 G_2,...,v_n G_n]

  • 通过softmax函数
    στ(vi)=evi/τj=1nevj/τ \sigma_{\tau}(v'_i)=\frac{e^{v'_i/\tau}}{\sum\limits_{j=1}^ne^{v'_j/\tau}}

这里στ(vi)\sigma_{\tau}(v'_i) 就可以实现对argmax的显式且光滑的逼近
limτ0στ(vi)=argmax {\lim_{\tau \to 0}}\sigma_{\tau}(v'_i)=argmax
温度参数τ\tau的影响: τ\tau越小(趋近于0), 越接近categorical分布;τ\tau越大(趋近于无穷), 越接近均匀分布

img

证明

常规的softmax形式为
πk=exkk=1Kexk \pi_k=\frac{e^{x_k}}{\sum^K_{k'=1}e^{x'_k}}
其中,πk\pi_k是softmax之后得到一个概率密度函数. 那么有没有某个分布能够等价于上述的分布呢?

如果对每个xkx_k添加独立标准的gumbel噪声(位置为0,尺度为1),并选择值最大的维度输出,每次的输出结果有一个概率密度函数.这样一个概率密度同样为πk\pi_k .

化简

P(zkzk;kk{xk}k=1K)=kkee(zkxk)e(zkxk)e(zkxk)dzk=ekke(zkxk)(zkxk)e(zkxk)dzk=ek=1Ke(zkxk)(zkxk)dzk=e(k=1Kexk)ezkzkxkdzk=eezkln(k=1Kexk)zkxkdzk=ee(zkln(k=1Kexk))(zkln(k=1Kexk))ln(k=1Kexk)xkdzk=eln(k=1Kexk)xkee(zkln(k=1Kexk))(zkln(k=1Kexk))dzk=exkk=1Kexkee(zkln(k=1Kexk))(zkln(k=1Kexk))dzk=exkk=1Kexke(zkln(k=1Kexk))e(zkln(k=1Kexk))dzk \begin{array}{l} P(z_k\ge z_{k'};\forall k'\not = k|\{x_{k'}\}_{k'=1}^K)\\ \qquad \qquad =\int \prod_{k'\not= k}e^{-e^{-(z_k-x_{k'})}}\cdot e^{-(z_k-x_k)-e^{-(z_k-x_k)}}\,dz_k \\ \qquad \qquad = \int e^{-\sum_{k'\not=k}e^{-(z_k-x_{k'})}-(z_k-x_k)-e^{-(z_k-x_k)}}\,dz_k\\ \qquad \qquad = \int e^{-\sum_{k'=1}^Ke^{-(z_k-x_{k'})}-(z_k-x_k)}\,dz_k\\ \qquad \qquad = \int e^{-(\sum_{k'=1}^Ke^{x_{k'}})e^{-z_k}-z_k x_k}\,dz_k\\ \qquad \qquad = \int e^{-e^{-z_k \ln(\sum_{k'=1}^Ke^{x_{k'}})}-z_k x_k}\,dz_k \\ \qquad \qquad = \int e^{-e^{-(z_k-\ln(\sum_{k'=1}^Ke^{x_{k'}}))}-(z_k-\ln(\sum_{k'=1}^Ke^{x_{k'}}))-\ln(\sum_{k'=1}^Ke^{x_{k'}}) x_k}\,dz_k \\ \qquad \qquad = e^{-\ln(\sum_{k'=1}^Ke^{x_{k'}}) x_k}\int e^{-e^{-(z_k-\ln(\sum_{k'=1}^Ke^{x_{k'}}))}-(z_k-\ln(\sum_{k'=1}^Ke^{x_{k'}}))}\,dz_k\\ \qquad \qquad = \frac{e^{x_k}}{\sum_{k'=1}^Ke^{x_{k'}}}\int e^{-e^{-(z_k-\ln(\sum_{k'=1}^Ke^{x_{k'}}))}-(z_k-\ln(\sum_{k'=1}^Ke^{x_{k'}}))}\,dz_k \\ \qquad \qquad = \frac{e^{x_k}}{\sum_{k'=1}^Ke^{x_{k'}}}\int e^{-(z_k-\ln(\sum_{k'=1}^Ke^{x_{k'}}))-e^{-(z_k-\ln(\sum_{k'=1}^Ke^{x_{k'}}))}}\,dz_k \end{array}

积分里面是μ=ln(k=1Kexk)\mu=\ln(\sum_{k'=1}^Ke^{x_{k'}}) 的gumbel分布,整个积分为1,则
P(zkzk;kk{xk}k=1K)=exkk=1Kexk P(z_k\ge z_{k'};\forall k'\not = k|\{x_{k'}\}_{k'=1}^K)=\frac{e^{x_k}}{\sum_{k'=1}^Ke^{x_{k'}}}
结果与softmax的分布一致.

为什么需要gumbel-softmax

乍看起来,gumbel-softmax 的用处令人费解。比如上面的代码示例,直接使用 softmax,也可以达到类似的参数训练效果。但两者有着根本的区别。
原理上,常规的 softmax 直接建模了一个概率分布(多项分布),基于交叉熵的训练准则使分布尽可能靠近目标分布;而 gumbel-softmax 则是对多项分布采样的一个近似。使用上,常规的有监督学习任务(分类器训练)中,直接学习输出的概率分布是自然的选择;而对于涉及采样的学习任务(VAE 隐变量采样、强化学习中对actions 集合进行采样以确定下一步的操作),gumbel-softmax 提供了一种再参数化的方法,使得模型可以以端到端的方式进行训练。

Ref

  1. CATEGORICAL REPARAMETERIZATION
    WITH GUMBEL-SOFTMAX
  2. https://zhuanlan.zhihu.com/p/35218887
  3. https://casmls.github.io/general/2017/02/01/GumbelSoftmax.html
  4. http://lips.cs.princeton.edu/the-gumbel-max-trick-for-discrete-distributions/
  5. https://blog.csdn.net/jackytintin/article/details/53641885
  6. 大量tf代码实例
  7. https://www.quora.com/How-do-we-compute-the-gradient-of-a-ReLU-for-backpropagation
  8. https://blog.csdn.net/jackytintin/article/details/79364490
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!