为什么 CuDNN LSTM 需要两个偏差 b_ih 和 b_hh

问题描述 投票:0回答:0

对于更高级别的框架,这个问题经常被问到:

答案总是:因为 CuDNN 就是这样做的。

但这是为什么呢?是否有技术原因,有一些优势吗?

目前我只看到多个缺点:

  • 它更复杂(多一个参数,需要更多代码)。
  • 速度较慢(需要额外计算)。
  • 需要更多内存。

这只是 CuDNN 开发人员的疏忽吗?

我也想知道(我没有验证):这两个偏差项得到相同的梯度,还是不同的梯度?在数学方面,他们必须得到相同的梯度。如果他们不这样做,那将是不正确的。但我可以想象这可能是他们实现它的方式,b_hh 只从经常性部分获得 grad,而 b_ih 只从前馈部分获得 grad。

如果它们确实获得相同的梯度,如果您将它们初始化为相同的,它们应该始终保持完全相同(我也没有验证这一点)。

如果是这种情况,则相当于使用

2 * b
,它只是一个单一的偏差
b
。请注意,在缩放方面,仅使用
b
而不是
2 * b
仍然存在细微差别。

还有

cudnnRNNBiasMode_t
。但是我真的不明白
CUDNN_RNN_SINGLE_INP_BIAS
CUDNN_RNN_SINGLE_REC_BIAS
的区别。应该没有任何区别,否则这将是数学上的错误。

lstm cudnn
© www.soinside.com 2019 - 2024. All rights reserved.