核心要点

  • 单元状态 C_t:长期记忆主干,沿时间近似线性、加性传递

  • 隐藏状态 h_t:当前时刻的输出与短期工作记忆

  • 区别:C 是内部长期记忆,h 是对外短期输出

  • 联系:h_t = o_t * tanh(C_t),h 由 C 经输出门过滤派生

标准回答

两者都是在时间步之间传递的向量,但定位完全不同。

单元状态(Cell State, C_t)——长期记忆

  • 它是贯穿整个序列的「主干通路」,只被门控做加性修改C_t = f_t * C_{t-1} + i_t * C̃_t
  • 由于更新是近似线性的加法(而非反复非线性变换),信息能在很多时间步上近乎无损地保留,因此承载长程依赖
  • 它是网络的内部状态,不直接作为输出,外部和输出层看不到它的原始值。

隐藏状态(Hidden State, h_t)——短期 / 工作记忆

  • 它是当前时间步的输出h_t = o_t * tanh(C_t),即把细胞状态压缩到 -1~1 后,再由输出门决定暴露多少。
  • 它是对外接口:既送给输出层产生预测,也作为下一时间步的输入(与 x_{t+1} 一起决定各门)。
  • 它反映「当前这一步该关注 / 输出什么」,是从长期记忆中过滤出的短期工作记忆。

区别与联系

维度 单元状态 C_t 隐藏状态 h_t
角色 长期记忆主干 短期输出 / 工作记忆
传递 加性、近似线性、长程 经门控与 tanh 过滤
可见性 内部,不直接对外 对外:输出层 + 下一步输入
关系 信息来源 由 C 经输出门派生

一句话总结:C_t 是「记住了什么」,h_t 是「这一步要拿出来用什么」,h 由 C 过滤而来。

常见误区

⚠️ 常见踩坑

认为隐藏状态等于细胞状态,或以为两者地位对称可互换。实际上隐藏状态是细胞状态经输出门和 tanh 过滤后的「子集 / 投影」,信息量通常少于细胞状态;细胞状态才是长期信息的真正载体。另外,初始化时两者通常都置零,但在序列推进中它们的数值与作用并不相同。

追问

追问 1为什么需要把两种状态分开,而不是只用一个状态?

因为长期保存信息和当前对外输出是两个有冲突的目标。如果只用一个状态,每一步都要被非线性激活和输出需求反复改写,长程信息很容易被冲刷掉。拆成细胞状态专门做近似线性的长期保存、隐藏状态专门做过滤后的短期输出,既能维持长期记忆,又能灵活控制每一步暴露什么。

追问 2输出层和下一时间步用的是 h_t 还是 C_t?

都用 h_t。输出层基于 h_t 做预测,下一时间步也是把 h_t 与新输入 x_{t+1} 拼接后送入各门。C_t 只在 LSTM 单元内部沿时间传递、不直接对外。这也是为什么 h_t 被称作「对外接口」、C_t 被称作「内部记忆」。

追问 3初始的 h_0 和 C_0 怎么设置?

最常见是都初始化为零向量。也可以将它们设为可学习参数,或在编码器-解码器结构里用编码器的最终状态来初始化解码器的 h_0、C_0,从而把上下文传入解码端。具体选择取决于任务和架构。

🔗 相似问题

同一考点的不同问法,面试官可能换着问,一起刷更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习