为什么 RNN 需要两个偏置向量?

Why RNN need two bias vectors?

pytorch RNN implementation中,有两个偏差,b_ihb_hh。 为什么是这样?它与使用一种偏见有什么不同吗?如果是,如何?会不会影响性能或效率?

RNN Pytorch Document中的公式是不言自明的。即等式中的b_ihb_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))
        ...