LSTM 长短期记忆网络
RNN 的记忆为什么传不远?——给记忆装上「阀门」
记忆需要阀门:主动管理,而不是被动稀释
上一课我们手算出了 RNN 的病:每读一个词,旧记忆就被「×0.6 再混入新词」稀释一次, 读了 20 个词,20 步前的信息 ,几乎归零。
想象你在读一本小说:第 1 章写「主角害怕黑暗」,第 30 章主角走进地下室,这时你需要想起第 1 章那句话。 你不会把这中间 30 章的每个细节都死记,但你会主动记住对后面重要的事—— 因为你早判断出「主角害怕黑暗」值得留着。
RNN 坏就坏在不会「主动」:它每步机械地混合所有内容,重要的和无关的一起稀释。 解药是给记忆装上阀门——几个开关,分别管「忘掉多少旧的」「写入多少新的」「读出多少给当前用」。
两种记忆:高速公路 + 工作台
LSTM(长短期记忆网络,1997 年提出)的第一招,是把记忆拆成两条线:
- 长期记忆 C(Cell State):一条「高速公路」,信息可以几乎不受干扰地从句首一直开到句尾。 新内容想挤进来,必须先过阀门;不放行,原有信息就原样保留——这正是对治 RNN「每步稀释」的关键。
- 短期记忆 h(Hidden State):当前这一步的「工作台」,每步都根据长期记忆和当前词重新算一份, 用来预测下一个词。它对应的就是 RNN 里那个 h。
两条线之间的三个阀门,各管一件事:
- 忘记阀(Forget Gate):长期记忆里,旧内容保留多少。
- 写入阀(Input Gate):当前词的新信息,写进长期记忆多少。
- 读出阀(Output Gate):从长期记忆里读出多少,当作这一步的短期记忆 h。
阀门怎么工作:一个 0 到 1 之间的数
每个阀门,说穿了就是一个 0 到 1 之间的数:
- 阀门 = 1:完全打开,信息全部通过;
- 阀门 = 0:完全关死,信息全被拦下;
- 阀门 = 0.6:放 60% 过去,拦下 40%。
这个数不是手动拧的,而是网络根据「当前词」和「当前短期记忆」算出来的—— 用什么算?还是老朋友 Sigmoid(把任意值压到 0~1,第 8 课)。然后靠训练数据反复优化,直到阀门学会在该开的时候开、该关的时候关:
公式列着吓人,其实只盯中间那行就够了:。 翻成人话——新的长期记忆 = 忘记阀 × 旧记忆 + 写入阀 × 新内容。 σ 负责生出 0~1 的阀门值,⊙(逐元素相乘)负责用阀门掐住流量。下一站就拿这一行去手算。
这里还有个值得回味的反转:第 8 课里,Sigmoid 把值压到 0~1 是缺点——两端一压平梯度就消失。 可搬到这儿,「0 到 1」恰恰是优点:它天生就是个「阀门开度」,0 关死、1 全开。 同一个函数,换个位置,缺点摇身变成了优点。
手算一遍:长期记忆怎么被守住
还是用上一课那把尺子——让长期记忆 就是一个数,记「主角怕不怕黑」。 只用那行核心公式 。网络已经学会: 读到重要词,(候选 ); 读到无关词,(几乎不动旧记忆)。从 开始:
② 主角(无关) :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 喂同一句话,并排看它俩的记忆:
对照得很扎心:读到「地下室」时,LSTM 的长期记忆还剩约 99%, 而 RNN 的记忆只剩不到 2%——「害怕」早被冲没了。同一句话,一个记得住、一个记不住,差别全在那几个阀门。
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)的训练时间从「几个月」压到了「几天」,正是下一册的主角。
总结
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 无法并行这道坎。
学习小测验
做完这一课,来检测一下核心知识点。选出你的答案后点击「提交」,即可看到正确选项与讲解。
注意力机制
不按顺序读词——让每个词同时看所有词,自己找出最该看的那几个,彻底甩开顺序处理的枷锁。