例子

第 1 步,输入 [1, 1]

第 2 步,输入 [1, 1]

第 3 步,输入 [2, 2]

同样的 x₂=“上海”,但a1不同(“离开”vs“抵达”)→ a2不同 → y₂ 概率分布不同

Screenshot 2025-08-25 at 8.08.11 PM.png

Screenshot 2025-08-25 at 10.24.13 PM.png

长短期记忆网络(Long Short-Term Memory network,LSTM)

要被存到单元的输入叫做 z,操控输入门的信号为 zi,操控遗忘门的信号为 zf ,操控输出门 为 zo,综合这些东西会得到一个输出记为 a

输入门(Input Gate)

👉 输入门决定“这次外部输入要写多少进去”。

如果 f(zi)=0 新信息完全不写;如 f(zi)=1 新信息全部写入。

遗忘门(Forget Gate)

👉 新的记忆 = “部分新输入” + “部分旧记忆”。

👉 遗忘门决定“旧的记忆要保留多少”。

如果 f(zf) = 1,旧记忆完整保留;如果 f(zf)=0,旧记忆完全清除。

Screenshot 2025-08-26 at 12.17.31 AM.png

输出门(Output Gate)

👉 输出门决定“记忆里的内容有多少能流向外部作为输出”。

如果 f(zo)=0 输出被完全屏蔽;如果 f(zo)=1,输出完整放出。

举例 简单版本

Screenshot 2025-08-26 at 2.04.45 AM.png

LSTM 实际运算示例

Screenshot 2025-08-26 at 1.40.17 PM.png

输入第一个向量 [3, 1, 0]T ,输入这边 3∗ 1=3,这边输入的是的值为 3。

输入门这边 (1 ∗ 100 − 10 ≈ 1) 是被打开 (输入门约等于 1)。(g(z) ∗ f(zi) = 3)。

遗忘门 (1 ∗ 100 + 10 ≈ 1)是被打开的 (遗忘门约等于1)。一开始记忆就是 0,所以 0 ∗ 1 + 3 = 3 (c‘ = g(z) f(zi) + c f(zf)), 所以存到记忆元里面的为 3。

输出门 (-10) 是被关起来的,所以 3 无关通过,所以输出值为 0。

Screenshot 2025-08-26 at 1.40.40 PM.png

接下来输入 [4, 1, 0]T,如图 5.17 所示,传入输入的值为 4。

输入门会被打开,遗忘门也 会被打开,所以记忆元里面存的值等于 7 (上一个记忆 3 + 现在记忆 4 = 7)。

输出门仍然会被关闭的,所以 7 没有办法被输出,所以整个记忆元的输出为 0。

Screenshot 2025-08-26 at 1.41.04 PM.png

接下来输入 [2, 0, 0]T ,如图 5.18 所示,传入输入的值为 2。

输入门关闭(0 - 10 ≈ 0),输入被输入门给挡住了(0 × 2 = 0),遗忘门打开(10)。原来记忆元里面的值还是 7 (上一个记忆 7 + 现在没有输入所以是 0 = 7)。

输出门仍然为 0,所以没有办法输出,所以整个输出还是 0。

Screenshot 2025-08-26 at 1.56.30 PM.png

最后输入 [3, −1, 0]T ,如图 5.20 所示,传入输入的值为 3。

输入门关闭,遗忘门关闭,记忆元里面的值会被洗掉变为 0,输出门关闭,所以整个输出为 0。

LSTM 原理

RNN 的反向传播就是 BPTT(BackPropagation Through Time)

RNN 训练就像在山谷里找最低点,有时候走得平稳(梯度合适),有时候一下子摔下悬崖(梯度爆炸),所以要给步伐加“安全绳”(梯度裁剪)。

👉 全连接网络里也有权重 W,前向传播、反向传播也会乘 W,为什么梯度消失/爆炸问题在 RNN 里被说得特别严重?

RNN 的梯度问题比普通神经网络严重,是因为它在“时间维度”上相当于一个超深网络(几十步、几百步甚至几千步),每一步都要乘上权重和激活导数,导致梯度指数级衰减或放大。

前馈网络的梯度消失/爆炸问题来自“层数有限但独立的权重相乘”;而 RNN 的问题更严重,因为它在时间维度上相当于一个“无限深的网络”,所有层共享同一个权重 W,所以梯度要连续反复乘同一个矩阵,导致指数级消失或爆炸。这就是为什么 RNN 特别难训练。

复习: