为何CuDNN LSTM需要b_ih与b_hh两个偏置项?
关于RNN/LSTM双偏置的深层疑问
在PyTorch、TensorFlow/Keras等深度学习框架的高阶讨论中,有一个问题被反复提及:为什么RNN(包括LSTM)要设置两个偏置向量?常见的回答都是“因为CuDNN就是这么实现的”,但这个回答并没有触及本质,背后是否存在未被说明的技术原因或优势?
目前能看到的全是双偏置带来的弊端:
- 实现更复杂:多维护一个参数,需要额外的代码逻辑
- 运算效率更低:增加了额外的计算步骤
- 内存占用更高:多存储一组偏置参数
这难道是CuDNN开发者的疏漏吗?
同时还有几个待验证的疑问:
- 两个偏置项
b_ih(输入侧偏置)和b_hh(循环侧偏置)的梯度是否相同?从数学逻辑上看,二者的梯度必须一致,否则模型的推导就存在错误。但有推测认为,b_hh只接收来自循环连接部分的梯度,b_ih只接收来自前馈输入部分的梯度。如果二者初始值一致且梯度始终相同,那它们应该会保持完全相等,这种情况下双偏置就等效于使用2 * b(单个偏置b的两倍),仅在参数缩放程度上和单偏置有细微差异。 - 对于CuDNN提供的
cudnnRNNBiasMode_t配置项,无法理解CUDNN_RNN_SINGLE_INP_BIAS和CUDNN_RNN_SINGLE_REC_BIAS的区别——从数学逻辑出发,这两种模式不应该存在差异,否则就违背了模型的数学推导。
内容的提问来源于stack exchange,提问作者Albert
相关产品推荐
相关产品推荐

