LESSON 18 · 卷 自然语言处理

LSTM 长短期记忆网络

RNN 的记忆为什么传不远?——给记忆装上「阀门」

第 1 站

记忆需要阀门:主动管理,而不是被动稀释

上一课我们手算出了 RNN 的病:每读一个词,旧记忆就被「×0.6 再混入新词」稀释一次, 读了 20 个词,20 步前的信息 ,几乎归零。

想象你在读一本小说:第 1 章写「主角害怕黑暗」,第 30 章主角走进地下室,这时你需要想起第 1 章那句话。 你不会把这中间 30 章的每个细节都死记,但你会主动记住对后面重要的事—— 因为你早判断出「主角害怕黑暗」值得留着。

RNN 坏就坏在不会「主动」:它每步机械地混合所有内容,重要的和无关的一起稀释。 解药是给记忆装上阀门——几个开关,分别管「忘掉多少旧的」「写入多少新的」「读出多少给当前用」。

要你来设计「有选择的记忆」,关键会落在哪?什么时候该保留信息,什么时候该丢弃,由谁说了算?
第 2 站

两种记忆:高速公路 + 工作台

LSTM(长短期记忆网络,1997 年提出)的第一招,是把记忆拆成两条线

  • 长期记忆 C(Cell State):一条「高速公路」,信息可以几乎不受干扰地从句首一直开到句尾。 新内容想挤进来,必须先过阀门;不放行,原有信息就原样保留——这正是对治 RNN「每步稀释」的关键。
  • 短期记忆 h(Hidden State):当前这一步的「工作台」,每步都根据长期记忆和当前词重新算一份, 用来预测下一个词。它对应的就是 RNN 里那个 h。
长期记忆 C(高速公路)忘记阀写入阀读出阀短期记忆 h(每步重算)害怕黑暗吃早饭地下室当前词
图 18-1LSTM 的两条线:长期记忆 C 是高速公路,靠三个阀门控制信息进出;短期记忆 h 是每步重新计算、用于当下预测的工作台。

两条线之间的三个阀门,各管一件事:

  1. 忘记阀(Forget Gate):长期记忆里,旧内容保留多少。
  2. 写入阀(Input Gate):当前词的新信息,写进长期记忆多少。
  3. 读出阀(Output Gate):从长期记忆里读出多少,当作这一步的短期记忆 h。
第 3 站

阀门怎么工作:一个 0 到 1 之间的数

每个阀门,说穿了就是一个 0 到 1 之间的数:

  • 阀门 = 1:完全打开,信息全部通过;
  • 阀门 = 0:完全关死,信息全被拦下;
  • 阀门 = 0.6:放 60% 过去,拦下 40%。

这个数不是手动拧的,而是网络根据「当前词」和「当前短期记忆」算出来的—— 用什么算?还是老朋友 Sigmoid(把任意值压到 0~1,第 8 课)。然后靠训练数据反复优化,直到阀门学会在该开的时候开、该关的时候关:

忘记阀 
写入阀 
候选写入 
长期记忆更新 
读出阀 
短期记忆输出 

公式列着吓人,其实只盯中间那行就够了:。 翻成人话——新的长期记忆 = 忘记阀 × 旧记忆 + 写入阀 × 新内容。 σ 负责生出 0~1 的阀门值,⊙(逐元素相乘)负责用阀门掐住流量。下一站就拿这一行去手算。

这里还有个值得回味的反转:第 8 课里,Sigmoid 把值压到 0~1 是缺点——两端一压平梯度就消失。 可搬到这儿,「0 到 1」恰恰是优点:它天生就是个「阀门开度」,0 关死、1 全开。 同一个函数,换个位置,缺点摇身变成了优点。

害怕黑暗(重要)忘记阀 0.9 保留写入阀 0.9 大量写入吃了早饭(无关)忘记阀 0.99 几乎全保留写入阀 0.04 几乎不写入网络自动学会:重要信息大量写入、长期保留;无关信息几乎不碰长期记忆
图 18-2阀门值由网络自动算出。读到重要情节,写入阀大开;读到无关内容,写入阀几乎关死、忘记阀接近 1,长期记忆几乎原封不动。
第 4 站

手算一遍:长期记忆怎么被守住

还是用上一课那把尺子——让长期记忆 就是一个数,记「主角怕不怕黑」。 只用那行核心公式 。网络已经学会: 读到重要词,(候选 ); 读到无关词,(几乎不动旧记忆)。从 开始:

① 害怕黑暗(重要):C = 0.9×0 + 0.9×0.95 = 0.855 ← 写入阀大开,记忆点亮
② 主角(无关)  :C = 0.99×0.855 + 0.04×0.2 ≈ 0.854
③ 吃了(无关)  :C = 0.99×0.854 + 0.008 ≈ 0.854
 …中间一连串无关词,每步忘记阀都≈0.99,C 几乎一动不动…
⑨ 地下室     :C ≈ 0.851 ← 9 个词后,「害怕」还稳稳记着

关键就在第②步往后:忘记阀 ≈ 0.99 意味着旧记忆几乎原样带过去,写入阀 ≈ 0.04 意味着无关词几乎挤不进来。 于是 9 个词读下来,长期记忆只从 0.855 掉到 0.851——还剩 99%。 把这台 LSTM 和一台 RNN 喂同一句话,并排看它俩的记忆:

读到第 1 / 9 个词
害怕黑暗重要主角吃了早饭走出房间下楼走进地下室LSTM 长期记忆 C0.85对照:RNN 记忆 h0.90
读「害怕黑暗」(重要):忘记阀 f=0.90、写入阀 i=0.90 → C ← 0.90×旧 + 0.90×0.95 = 0.85 | 长期记忆残留 100% · RNN 残留 100%
第 1 个词「害怕黑暗」被判为重要,写入阀大开,长期记忆 C 冲到 0.85。之后每读一个无关词,忘记阀都接近 0.99——几乎原样保留旧记忆,写入阀几乎关死。读到最后的「地下室」时,C 还稳稳地记着「害怕」。看下面那条 RNN:同样的句子,它每步 ×0.6,没几步就塌到地板上。这就是阀门的威力。
互动 18-A上条绿色是 LSTM 的长期记忆 C,下条蓝色是同一句话喂给 RNN 的记忆 h。每点「读下一个词」走一步:LSTM 靠忘记阀≈0.99 把「害怕」几乎原样守到最后,RNN 每步 ×0.6,没几步就塌到地板。

对照得很扎心:读到「地下室」时,LSTM 的长期记忆还剩约 99%, 而 RNN 的记忆只剩不到 2%——「害怕」早被冲没了。同一句话,一个记得住、一个记不住,差别全在那几个阀门。

第 5 站

LSTM 能记住多远?又卡在哪?

有了高速公路和阀门,LSTM 能处理的长距离依赖远超 RNN。原理就藏在那行公式里: 长期记忆走的是「」这条道,忘记阀 f 接近 1 时,记忆几乎无损地往前传, 连带梯度也能几乎无损地传回很远的地方——梯度消失被大大缓解。

算给你看:哪怕隔 30 个词,RNN 是 (彻底没了), 而 LSTM 的忘记阀按 0.99 算是 ——还留着 74%。实验中 LSTM 能可靠记住 50~100 步前的信息。 也正因如此,2010~2017 年间,语音识别、机器翻译、文本生成的主力都是它,很多产品级系统至今仍在用。

一个词一个词地读:无法并行

但 LSTM(和 RNN 一样)有个绕不开的硬伤:必须按顺序处理词。 读完第 k 个词才能算第 k+1 个,因为 依赖 。 这意味着 100 个词的句子,必须老老实实做 100 步串行计算, 没法把这些词摊开,让 GPU 上成千上万个核心同时算。

模型越大,这条串行链就越拖慢训练。2017 年 Google 提出 Transformer——它不按顺序读词, 而是让每个词同时看到句子里所有词,天生可以并行。 这一招把大模型(如 GPT)的训练时间从「几个月」压到了「几天」,正是下一册的主角。

第 6 站

总结

本课核心 · TAKEAWAY

LSTM 用两种记忆(长期 C + 短期 h)三个阀门(忘记 / 写入 / 读出)解决了 RNN 的记忆淡出。 核心就一行:C ← 忘记阀×旧记忆 + 写入阀×新内容。 忘记阀≈1,重要信息就能几乎无损地传几十上百步。遗留问题:必须按顺序读词,无法并行——这催生了 Transformer。

这一课你亲手推导了

  • RNN 的病根:机械混合所有信息,重要内容和无关内容被同等稀释。
  • LSTM 的两条线:长期记忆 C(高速公路)+ 短期记忆 h(每步重算的工作台)。
  • 三个阀门:忘记阀(留多少旧的)、写入阀(写多少新的)、读出阀(读多少给当前用)。
  • 阀门怎么来:Sigmoid 算出 0~1 的开度,由当前词和当前记忆决定,靠训练优化。
  • 手算对照:9 词后 LSTM 记忆剩约 99%,RNN 不到 2%;隔 30 词,0.99³⁰≈74% vs 0.6³⁰≈0。
  • 新的局限:顺序计算,无法并行,限制了模型规模和训练速度。

卷三:自然语言处理 · 完

这一卷走过了语言建模的完整演化: N-gram(数数)→ 词向量(语义数字化)→ FFNN-LM(举一反三)→ RNN(有记忆的序列处理)→ LSTM(带阀门的长期记忆)。 每一步都在补上一步留下的窟窿。

下一册从注意力机制开始——你在第 15 课词向量那里已提前见过它的影子(「银行」取哪个意思,得看上下文)。 现在你也知道它为什么会出现:Transformer 要解决的,正是 LSTM 无法并行这道坎。

小测验

学习小测验

做完这一课,来检测一下核心知识点。选出你的答案后点击「提交」,即可看到正确选项与讲解。

Q1LSTM 为了让记忆「传得更远」,引入的核心机制是什么?
Q2LSTM 中的「细胞状态(cell state)」为什么有助于缓解梯度消失?
NEXT · 第 19 课

注意力机制

不按顺序读词——让每个词同时看所有词,自己找出最该看的那几个,彻底甩开顺序处理的枷锁。

0 人点赞,0 人看过