RNN 的不合理有效性:大语言模型的一粒种子
一句话
只教一个循环神经网络做一件事——看着前面的字符,预测下一个字符——它就能自己学会拼写、语法、莎士比亚的戏剧格式、LaTeX 的数学证明结构,甚至写出能看的 C 代码。这篇 2015 年的博文用一连串让人下巴掉地的实验证明了这一点,成为卡帕西流传最广的文章。
文章讲了什么
文章的理论起点只有一个:RNN 和普通神经网络的区别在于它有内部状态,能处理任意长度的序列。卡帕西给出一个漂亮的类比来说明这件事为什么重要:
"training recurrent nets is optimization over programs" ——Andrej Karpathy,2015 · 原文 →
训练普通网络是在函数空间里搜索,训练循环网络则是在「程序」空间里搜索——这句话在今天读来几乎就是 LLM 的宣言。文章主体是五组实验,全部用同一套字符级语言模型(char-rnn,代码开源):
- Paul Graham 文集(约 1MB):小模型就能生成有模有样的创业鸡汤,还顺带演示了采样温度——温度低则保守重复,温度高则大胆出错。
- 莎士比亚全集(4.4MB):模型学会了剧本格式——角色名、冒号、独白,换行都对。
- 维基百科与 LaTeX:能生成结构正确的 Markdown、编造格式完全合法的链接和引用,甚至「写」出一篇能几乎通过编译的代数几何证明——错误常常只是 \begin{proof} 配了个 \end{lemma}。
- Linux 内核源码(474MB C 代码):约一千万参数的 LSTM 生成的函数有像样的变量声明、注释、缩进,会背 GPL 协议头,只是偶尔用到没定义的变量。
- 训练过程回放:用《战争与和平》展示模型从乱码到学会空格、再到拼出单词、最后掌握语法的渐进过程——今天我们熟悉的「能力随训练涌现」,2015 年就演示过了。
最有远见的一节是神经元可视化:他发现约 5% 的隐藏单元自发学会了可解释的功能——有的专门在 URL 里激活,有的在引号内保持点亮,有的像计数器一样追踪括号深度。没人教它们,这些「概念」是从预测下一个字符的压力下自己长出来的。文末他还点名:注意力(attention)是当时最令人兴奋的架构方向——两年后 Transformer 出世。
写作背景
2015 年,深度学习刚在图像识别上证明了自己,但序列建模还是小众领域:主流 NLP 依然是 n-gram 和特征工程,「语言模型」远不是一个性感的词。当时的普遍质疑是——一个字符一个字符地预测,怎么可能学到「语言」?卡帕西的回答方式不是论证而是展示:把代码开源,把生成样本贴出来,让读者自己震惊。这篇文章让无数人第一次对「语言模型」产生了直觉,也让 char-rnn 成为一代人的深度学习入门玩具。
十年后再看
这篇文章可能是整个博客史上「后见之明含金量」最高的一篇。它押中的东西太多了:下一个词预测这个简单目标能逼出复杂能力——这正是 GPT 系列的全部前提;规模带来质变——文中「更大的网络效果更好」的朴素观察,后来成了 Scaling Law;可解释神经元——OpenAI 后来的「情感神经元」和今天 Anthropic 的机制可解释性研究,都是这一节的直系后代。它押错的只有载体:RNN/LSTM 本身被 Transformer 取代了,卡帕西自己后来也感慨整个领域向 Transformer 收敛。架构换了,思想全活着——他 2015 年问的「这怎么可能」,今天变成了全人类在问 ChatGPT 的同一个问题。
对你意味着什么
- 2026 年仍然值得读,但读法变了:不必学 RNN 公式(可跳过开头的数学),重点读实验和神经元可视化两节——它们是理解「LLM 为什么可能」的最短路径。
- 想动手复刻,别用 char-rnn 了,直接上他的现代版:nanoGPT 或 nanochat,同样的字符级思想,Transformer 载体。
- 做内容或做产品的人,学他的展示方法论:不争论,放 demo。一篇「样本会说话」的文章,比十篇综述更能改变认知。
延伸阅读
- 英文原文 · char-rnn 代码
- Zero to Hero 课程汉化 —— 从零手写语言模型的现代完整版
- 解读:一切向 Transformer 收敛 —— RNN 的谢幕
- 导读:《神经网络训练配方》 —— 同一博客的方法论名篇