RNN隐藏状态全解析:它到底是什么?传给谁?何时输出?
在学习循环神经网络(RNN)时,很多初学者在推导数据流时会产生一系列连环疑问: “当前时间步输出的隐藏状态,和传给下一个时间步的信息,是同一份数据吗?” “既然传给下一步了,那当前步的隐藏状态还留着干啥?” “每一个时间步都需要把隐藏状态接上 Softmax 输出预测结果吗?” 这些问题直击 RNN 的核心架构。今天,我们就把传统 RNN(Vanilla RNN)掰开揉碎,从本质、去向、输出时机三个维度,彻底理清隐藏状态(Hidden State)的前世今生。 一、 破除迷思:传给下一步的信息 和 隐藏状态 是同一个东西吗? 直接给出结论:在传统 RNN 中,它们是完全相等的,就是同一份数据(同一个张量)。 传统 RNN 的核心递推公式为: $$h_t = \tanh(W_{xh} x_t + W_{hh} h_{t-1} + b_h)$$ 在这个公式中,计算出的 $h_t$ 只有一个。它既被定义为“当前时间步的隐藏状态”,又在下一个时间步 $t+1$ 的计算中,原封不动地作为 $h_{t}$(即下一步眼中的 $h_{t-1}$)传入。不存在任何额外的变换或门控机制来区分这两者。 ⚠️ 重要区分:LSTM 不是这样 这种“输出 = 下一步输入”的特性仅适用于传统 RNN。在 LSTM 中,有两条状态线:细胞状态(Cell State, $c_t$)和隐藏状态(Hidden State, $h_t$)。$c_t$ 是真正的“记忆传送带”传给下一步,而 $h_t$ 是经过输出门过滤后的版本用于对外输出。所以在 LSTM 中,两者是不相等的。 二、 隐藏状态的“双重使命”:它到底留着干啥? 既然“传给下一步的信息”和“隐藏状态”是同一个东西,那为什么还要专门叫它“隐藏状态”?它计算出来后到底被拿去干嘛了? 这里需要破除一个思维误区:它们不是两个东西,而是“同一个东西”的两个去向。 当 $h_t$ 被计算出来后,它面临着 “一分为二”的双重使命: