神经网络中不可微分的解决方案
date
Sep 11, 2022
Last edited time
Sep 20, 2022 09:46 AM
status
Published
slug
神经网络中不可微分的解决方案
tags
DL
summary
前置参考资料
type
Post
Field
Plat
不可微的操作有很多,但是基本都有解决方法,只是有解决得好坏的区别。
比如 和 ,解决方法就有好几种,以 为例。假设题主的所说的 的输入是向量 ,希望输出一个,只在第 位置是 ,其他位置是 的向量 ,代表 是 里的最大值。一种简单的解决方案就是将 松弛化,不要求 每一维一定是 或 ,那这样直接让 过一个 Softmax 函数就行了。也就是 ,其中 。
如果还要求不能松弛 ,那么可以使用 Straight-Through Estimator[1],也就是 ,这里括号里的部分当作常数,不加入计算图的求导过程中(在 pytorch 里就是
detach()
掉)。这样数值上 跟 相等,都是一个在第 位是 ,其他位是 的向量,但是此时导数是可以从 回传到 再传回 的。具体实现可以参考 Gumbel-Softmax[2] 的代码。参考
- Estimating or Propagating Gradients Through Stochastic Neurons for Conditional Computation https://arxiv.org/abs/1308.3432
- Categorical Reparameterization with Gumbel-Softmax https://arxiv.org/abs/1611.01144