Estimating or Propagating Gradients Through Stochastic Neurons for Conditional Computation
概
ReLU 成功的一个很重要的原因就是它模仿了神经元在信息传播过程中存在的 activate 和 inactivate 的两种状态. 本文是对这种思想的一个延续和扩展.
Non-Smooth Stochastic Neurons
-
带随机的神经元有丰富的应用场景, 其中比较有挑战的地方是它的梯度的估计.
-
设想有一个输入的信号 \(a_i\), 通过加入噪声, 并通过映射 \(f(\cdot, \cdot)\) 得到输出
\[h_i = f(a_i, z_i). \] -
只要 \(f(a_i, z_i)\) 关于 \(a_i\) 的导数存在, 那么就可以用梯度回传来进行训练. 通常, 如果 \(z_i\) 是加性噪声就可以满足这一条件, 但是如果我们希望输出 \(h_i\) 是一个二元变量呢 ? 此时会导致梯度几乎处处为 0.
Noisy Rectifier
-
作者首先介绍了如下的一种处理方式:
\[h_i = \max(0, z_i + a_i), \: z \sim p(z) = \sigma(z)(1 - \sigma(z)), \]这里 \(\sigma(z) = \frac{1}{1 + e^{-z}}\) 为 sigmoid 函数.
-
容易证明
\[P(h_i > 0) = \sigma(a_i), \: \mathbb{E}[h_i] = \text{softplus}(a_i) = \log (1 + \exp(a)). \] -
这意味着, 原本信号越强, 其所对应的 \(h_i\) 越有可能是 activate 的状态, 否则容易落入 inactivate 的状态.
-
只要神经元的个数足够, 总会存在 \(h_i\) 处于 activate 的状态使得梯度的回传是可行的, 此时训练也是可行的.
Stochastic Times Smooth
-
第二种, 形式如下
\[p_i = \sigma(a_i) \\ b_i \sim \text{Binomial}(\sqrt{p_i}) \\ h_i = b_i \sqrt{p_i}. \] -
容易证明此时有
\[P(h_i > 0) = \sqrt{\sigma(a_i)}, \: \mathbb{E}[h_i] = p_i. \] -
相较于之前的方法, 该方法保证了期望符合概率, 且梯度一直是可回传的.
Unbiased Estimator of Gradient for Stochastic Binary Neurons
-
之前的方法所得到的输出 \(h_i\) 虽然是随机的, 但并不是 binary 的, 那么如果是这种极为严苛的条件下, 是否还能正确估计梯度呢 ?
-
首先令
\[h_i = f(a_i, z_i) = \mathbf{1}_{z_i > \sigma(a_i)}, \: z_i \sim \mathcal{U}(0, 1). \] -
显然通过梯度回传的方式是无法估计梯度的.
-
假设损失函数 \(L(h_i, c_i, c_{-i})\), 其中 \(c_i\) 表示和 \(a_i\) 有关的随机项 (\(a_i\) 可能也是通过随机神经元得到的), 以及 \(c_{-i}\) 为和 \(a_i\) 无关的随机项.
-
作者给出一个估计量 \(\hat{g}_i = (h_i - \sigma(a_i)) L\), 它为
\[g_i = \frac{\partial \mathbb{E}_{z_i, c_{-i}}[L|c_i]}{\partial a_i} \]的一个无偏估计.
-
这意味着, 我们只需要回传损失 \(L\), 便可估计出梯度, 这实际上是一种比传统梯度回传更加高效的手段.
-
当然, 这么做训练可能是不稳定的, 特别是估计量 \(\hat{g}_i\) 本来就是 high-variance 的.
-
为了进一步缩小方差, 我们可以用如下估计量替代
\[\hat{g}_i = (h_i - \sigma(a_i))(L - \bar{L}_i), \]其中
\[\bar{L}_i = \frac{\mathbb{E}_{c_i, c_{-i}, z_i}[(h_i - \sigma(a_i))^2L]}{\mathbb{E}_{c_i, c_{-i}, z_i}[(h_i - \sigma(a_i))^2]}. \]而且, 该估计依旧是 \(g_i\) 的无偏估计量.
Straight-Through Estimator
-
普通的 ReLU:
\[h_i = \text{ReLU}(a_i), \]引入 activate, inactivate 状态.
-
它对 activate 的信号输入回传梯度
\[g_i = \left \{ \begin{array}{ll} \frac{\partial L}{\partial h_i} & a_i > 0 \\ 0 & \text{else}. \\ \end{array} \right . \] -
STE 更直接, 相当于直接跳过随机这一部分, 复制 \(h_i\) 上的梯度到 \(a_i\):
\[g_i = \frac{\partial L}{\partial h_i}. \]