在“注意力就是一切”之前
昨天好像随口说了“要继续讲 Transformer”,结果今天自己就被这个 flag 绑住了,像得了“承诺强迫症”似的,不写完都睡不着。半夜爬起来把这篇写了,反正也没几个人会看,写与不写,好像也没什么区别,但对我来说,某种完成感总还是重要的。
之前的系列讲到了 word embeddings —— 词向量。如果你已经对词向量有了基本理解,那我们就可以往更深的地方走了。不过,要真正理解《Attention is All You Need》,还得跨过一段不小的认知门槛。我想试试看,能不能用接下来几篇帖子,把那道门一点点拆掉。
我自己的旧帖子,现在几乎都搜不到了。可能是因为吐槽太多,结构也太自由奔放了。我这人写东西容易跑题,吐槽停不下来,所以若你是有心人,建议收藏。否则它们大概率会像宇宙背景辐射一样散落无踪。
我也从不引用自己的旧文 —— 因为,我实在,搜不到它们了。
要走进 Transformer 的世界,LSTM(Long Short-Term Memory)就是你绕不开的一块台阶。它是一种专门为“序列”设计的神经网络结构,也是 GPT、BERT 这类大型语言模型的认知前传。如果说 Transformer 是高铁,那 LSTM 就是你理解这个系统的第一站台。
LSTM 是什么、怎么工作的?这个问题你可以直接问 AI,我这里不打算赘述公式,而是讲点能把它“讲成一个故事”的东西。真正要理解 LSTM,得抓住它的核心机制:门控记忆。说白了,它的任务就是:记什么?忘什么?
最好的学习方式不是死读原理,而是做一个 LSTM 的小实验。非常简单,用 vibe coding 都可以跑起来。我建议你拿一首短诗作为训练数据,用下面我写的 prompt 就能完成。等你跑一遍实验,哪怕只是看着它学会了生成几句新诗,你对“门控记忆”的理解就不再是理论上的,而是体验上的。一旦你完成这个 lab,后面的 attention、transformer 就容易多了。
LSTM 内部有几扇门:忘记门、输入门、候选记忆、输出门。你可以把它想象成一个“有选择性记忆的人”。说实话,我写这个系列的时候,notion笔记、论文、草稿堆成山,我也得像一个 LSTM 一样,挑选哪些信息保留,哪些可以丢,哪些要编织成故事线讲给你听。这种选取和组织,本身就是一种“门控记忆”。
顺便插个段子,我这套讲法其实特别像成都的“龙门阵”——小时候暑假经常去成都,最爱跑到茶馆发呆,听一群老头子在那里摆龙门阵。那时候听得晕,现在却越听越觉得有味道。你就把我写的这篇也当成一场技术龙门阵来听,轻松但不浅薄,笑着也能学点真东西。
回到正题:LSTM 的门控到底怎么工作?它不是拍脑袋决定“要不要记”,而是数学决定的。每一个门都会输出一个在 0 到 1 之间的权重向量,就像水龙头的开合度,决定当前的信息要流多少进去、流多少出来、保留多少、忘掉多少。输入是当前的词向量 xt 和上一个隐藏状态 ht−1,输出是一个实数向量,代表每一维的信息保留程度。
我知道有人对公式有执念(比如我),但推特这种地方懒得搞公式渲染,我就不摆公式了。如果你非要看那套 ft=σ(Wx+Uh+b) 的结构,自己查。这里我们只记一件事:LSTM 是有记忆的人,它的记忆,是动态调控出来的。
好,这里我得插播一个我认为非常重要的概念:词向量维度 vs. 隐藏状态维度。
我们之前讲词向量(word embedding)的时候说过,维度一般在 100 到 300 之间,有的更高。但在使用 LSTM、GRU、Transformer 这类模型时,会出现另一个维度:隐藏状态维度(hidden state dimension)。你一看,有时候居然设成 512维,比词向量还高。这就值得讲讲为什么了。
先不着急理解那些术语,你只要知道:隐藏状态是模型在每个时间点对上下文的“理解状态”。所谓 512 维,就是模型每处理一个词,就生成一个长度为 512 的向量,用来“记住”它此刻对这句话的综合认知。
我就问你一句实话:你觉得“上下文”好理解吗?你想想你写的作文、做的阅读理解、还有你自己写过的那些乱七八糟但又想表达得清楚的文章。
认字容易,写句子难。
认识“爱”、“自由”、“结构”这些词大家都会,但要你写出一段有逻辑、有情绪、有层次的文章,能做到的有多少?上下文不是简单几个词拼一起,而是一个更高维的结构系统。