为什么 RNN 需要两个偏置向量?
Why RNN need two bias vectors?
在pytorch RNN implementation中,有两个偏差,b_ih
和b_hh
。
为什么是这样?它与使用一种偏见有什么不同吗?如果是,如何?会不会影响性能或效率?
RNN Pytorch Document中的公式是不言自明的。即等式中的b_ih
和b_hh
。
您可能认为 b_ih
是输入的偏差(与 w_ih
、输入的权重配对)并且 b_hh
是隐藏的偏差(与 w_hh
配对) , 隐藏权重)
实际上,之前(接受的)答案是错误的。仅由于与 CuDNN 的兼容性才需要第二个偏置参数。见同 code documentation:
class RNNBase(Module):
...
def __init__(self, ...):
...
w_ih = Parameter(torch.empty((gate_size, layer_input_size), **factory_kwargs))
w_hh = Parameter(torch.empty((gate_size, real_hidden_size), **factory_kwargs))
b_ih = Parameter(torch.empty(gate_size, **factory_kwargs))
# Second bias vector included for CuDNN compatibility. Only one <--- this
# bias vector is needed in standard definition. <--- comment
b_hh = Parameter(torch.empty(gate_size, **factory_kwargs))
...
在pytorch RNN implementation中,有两个偏差,b_ih
和b_hh
。
为什么是这样?它与使用一种偏见有什么不同吗?如果是,如何?会不会影响性能或效率?
RNN Pytorch Document中的公式是不言自明的。即等式中的b_ih
和b_hh
。
您可能认为 b_ih
是输入的偏差(与 w_ih
、输入的权重配对)并且 b_hh
是隐藏的偏差(与 w_hh
配对) , 隐藏权重)
实际上,之前(接受的)答案是错误的。仅由于与 CuDNN 的兼容性才需要第二个偏置参数。见同 code documentation:
class RNNBase(Module):
...
def __init__(self, ...):
...
w_ih = Parameter(torch.empty((gate_size, layer_input_size), **factory_kwargs))
w_hh = Parameter(torch.empty((gate_size, real_hidden_size), **factory_kwargs))
b_ih = Parameter(torch.empty(gate_size, **factory_kwargs))
# Second bias vector included for CuDNN compatibility. Only one <--- this
# bias vector is needed in standard definition. <--- comment
b_hh = Parameter(torch.empty(gate_size, **factory_kwargs))
...