在确定了使用遗忘门从先前状态中舍弃哪些信息,以及使用输入门哪些新信息可能相关之后,LSTM单元需要将这些结果组合起来,形成新的细胞状态$C_t$。这个更新过程对LSTM维持长距离依赖的能力非常重要。回顾一下之前的步骤:遗忘门 ($f_t$) 为先前的细胞状态$C_{t-1}$中的每个数值计算出0到1之间的值。接近1的值表示“保留此信息”,而接近0的值表示“遗忘此信息”。输入门 决定了要更新哪些值($i_t$,0到1之间的值),并生成了一个新的候选值向量($\tilde{C}_t$,通常是-1到1之间的值),这些值可能被添加到状态中。细胞状态更新以直接但有效的方式组合这些部分。首先,旧的细胞状态$C_{t-1}$与遗忘门$f_t$的输出进行逐元素相乘。这会选择性地舍弃标记为遗忘的信息。$$ \text{被遗忘的状态} = f_t \odot C_{t-1} $$其次,候选值$\tilde{C}_t$与输入门$i_t$的输出进行逐元素相乘。这只会选择新候选信息中相关的部分。$$ \text{选定的新信息} = i_t \odot \tilde{C}_t $$最后,这两个结果进行逐元素相加,以形成更新后的细胞状态$C_t$:$$ C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t $$此处,$\odot$表示逐元素相乘(哈达玛积)。digraph CellStateUpdate {rankdir=LR;node [shape=box, style=filled, fillcolor="#e9ecef", fontname="sans-serif"];edge [fontname="sans-serif"];Ct_1 [label="C_{t-1}", shape=plaintext];ft [label="f_t", fillcolor="#ffc9c9"];Ct_tilde [label="~C_t", shape=plaintext];it [label="i_t", fillcolor="#a5d8ff"];Ct [label="C_t", shape=plaintext, fontsize=14];multiply1 [label="⊙", shape=circle, fillcolor="#ced4da", width=0.3, height=0.3, fixedsize=true];multiply2 [label="⊙", shape=circle, fillcolor="#ced4da", width=0.3, height=0.3, fixedsize=true];add [label="+", shape=circle, fillcolor="#ced4da", width=0.3, height=0.3, fixedsize=true];Ct_1 -> multiply1;ft -> multiply1;Ct_tilde -> multiply2;it -> multiply2;multiply1 -> add [label=" 被遗忘的状态"];multiply2 -> add [label=" 选定信息"];add -> Ct;} 图示了LSTM细胞状态($C_t$)的更新运作方式。先前的状态($C_{t-1}$)由遗忘门($f_t$)缩放,候选状态($\tilde{C}_t$)由输入门($i_t$)缩放,然后将结果相加。这种加性更新机制与简单RNN中的更新规则有很大区别,简单RNN主要包含矩阵乘法。细胞状态的作用类似传送带。如果遗忘门对这些部分设置为接近1,且输入门接近0,则信息可以基本不受干扰地沿着它传输。反之,旧信息可以完全舍弃($f_t \approx 0$),新信息可以完全融入($i_t \approx 1$)。这种结构使得梯度更容易在时间上反向传播,而不会像简单RNN中那样快速消失或爆炸。通过门控加法和逐元素乘法控制信息流动,LSTM能够保留误差信号更长时间,从而实现对跨越较长时段依赖的学习。细胞状态实质上承载着长期记忆,它在每个时间步都根据当前输入和先前的隐藏状态进行有选择的修改。