循环神经网络的惊人有效性

The Unreasonable Effectiveness of Recurrent Neural Networks · Andrej Karpathy · 2015 · 博文

本页目录
  1. 论文名片
  2. Ilya 为什么选它
  3. 从生活说起
  4. 核心思想拆解
  5. 动手算一算
  6. 它改变了什么
  7. 术语小词典
  8. 原文与代码

论文名片

速览

题目:The Unreasonable Effectiveness of Recurrent Neural Networks(循环神经网络的惊人有效性)。

作者与形式:Andrej Karpathy,2015 年长篇博文,配套开源代码 char-rnn。

它做的事:训练字符级语言模型(character-level language model)——不给模型词典、语法书和任何规则,只让它反复做一件事:看完前文,预测下一个字符。模型本体是循环神经网络(Recurrent Neural Network,RNN)。

它展示的事:分别用莎士比亚剧本、维基百科、Linux 源码、LaTeX 论文做训练,生成的假文本连括号配对、章节结构都像模像样。

一句话定位:这是让一代人第一次看见神经网络会「写作文」的文章。

Ilya 为什么选它

这份书单里大多是论文,这篇却是博文。选它,是因为它承担着一个替代不了的角色:示范。在 2015 年,语言模型对多数人来说只是排行榜上的一个分数;这篇博文让人亲眼看到,一个只会「猜下一字符」的模型,居然能写出格式严谨的假代码、假论文。直观印象一旦建立,后面所有关于语言模型的技术讨论都有了抓手。

更深一层,这篇博文是后来 GPT 路线的种子。「预测下一个字符」这个目标看起来笨拙,却蕴含语法与结构知识;既然如此,把模型做大、把数据做多的路线就是成立的。本系列后面讲注意力机制(见 注意力机器翻译)与 Transformer 的文章,本质上都在回答同一个问题:这台「接龙机器」还能变得多强。

从生活说起

想想成语接龙的高手。他没有背过《接龙大全》,但玩得多了,你说一个「马」,他自然接出「马到成功」;你再给一个「功」,他又接得又快又顺,甚至带着你说话的腔调。没有人教过他规则,规则长在成千上万次「你一句、我一句」的练习里。

再想想常听歌的人。一首歌的前奏刚起,他嘴里已经哼出了下一句的调子。他并不是「推理」出了这个调子,只是前文给出的线索太充分,下一句几乎是自然涌出来的。

手机输入法也是同一回事:打出「你好」,它就联想「吗」「呀」;打出「明天」,它就联想「见」。联想背后正是一台微型的「预测下一个字符」机器。Karpathy 这篇博文做的事情,就是把这台小机器认真放大、认真训练,然后展示它能走多远。

核心思想拆解

任务只有一个。字符级语言模型只做一件事——看完前文,预测下一个字符。训练材料是一大段连续文本:可能是莎士比亚剧本,可能是维基百科,可能是 Linux 源码,也可能是 LaTeX 写成的论文。模型每次猜完就对照原文,猜错了调整自己,如此循环往复。

生成就是反过来接龙。训练好后,给模型一个开头,它就一个字符一个字符往下写。精妙之处在于:要猜得准,模型必须自己悟出各种「隐形规则」——引号开了要关、括号开了要配对、C 语言的函数有固定骨架、LaTeX 的文章有章节结构。没有人把这些规则写给它,是「猜下一字符」这个目标逼着它学出来的。

结果有多像样?用莎士比亚训练,产出带人名与台词格式的仿剧本;用维基百科训练,产出带词条结构的假百科;用 Linux 源码训练,产出的假 C 代码连括号配对都大体正确;用 LaTeX 论文训练,产出的假论文有章节、有公式环境、有图表引用。假文本连括号配对、章节结构都像模像样——这正是标题里「惊人有效性」的含义。

关键洞察:「预测下一字符」这个看似简单的小目标,蕴含语法与结构知识。目标可以极简,学到的东西却可以极深——这个信念支撑了此后十年的语言模型路线。

动手算一算

本节算术为教学演示,帮助建立直觉,不是论文里的实验数字。

演示一:旧记忆会打折扣

假设开头字符的影响,每往后续写一步就打九折(乘 0.9)。1 步之后剩 0.9;10 步之后是 0.9 的 10 次方,约 0.35;50 步之后是 0.9 的 50 次方,约 0.005——只剩千分之五。也就是说,写到第 50 个字符时,开头是什么几乎已经影响不到模型。这解释了普通循环网络「记性有限」的毛病,也给下一篇的改进埋下伏笔。

演示二:候选池有多大

英文字符表(字母、数字、标点、空格)大约百来个;中文常用字有几千个。同样是猜一个字符,前者是在百来个候选里挑,后者是在几千个候选里挑,规模差几十倍。候选池小、语料好找,字符级模型在英文上演示起来成本低、效果又直观,这类演示多用英文语料是顺理成章的事。

它改变了什么

它把语言模型从「评分指标」变成了「舞台主角」。在这篇博文之前,语言模型更多是学术评测里的一个数字;之后,「看看模型生成了什么」成了最直观的能力展示,深度学习社区第一次集体直观感受到:机器生成文字是做得到的事。

它暴露了短板,也指明了路线。演示一里「记忆打折」的问题,引出两条改进线:一条把记忆本身修好,见 理解 LSTM;另一条干脆不依赖内部记忆,让模型随时回看原文,见 注意力机器翻译,其思想最终长成 Attention Is All You Need。而「预测下一字符」这个目标本身一路未改,成了今天大语言模型的训练内核。

术语小词典

本页出现的术语
术语白话解释
循环神经网络(Recurrent Neural Network,RNN)带「记忆」的神经网络:读文本时一边读、一边更新脑中的内部状态。
语言模型(language model)判断一段文字像不像「人话」、并能预测下一字符或下一词的模型。
字符级(character-level)把文本拆到单个字符来处理,而不是按单词切分。
隐藏状态(hidden state)模型的「草稿记忆」,每读一个字符就更新一次;「记忆打折」就发生在它的传递过程中。
采样(sampling)生成时按各候选字符「可能性大小」来挑选;同一个开头可以接出不同续写。