大佬Andrej Karpathy分享了关于论文《Attention is All You Need》的一些故事。
------------------------------------------------------------------------
关于“Attention”算子的开发与灵感的真实故事,这个算子是论文《Attention is All You Need》中引入的 Transformer 的核心部分。以下内容来自约两年前与作者 Dzmitry Bahdanau 的私人邮件通信,现已获授权公开。这几天网络上关于其开发过程出现了一些假消息,因此特此澄清。
Attention 是一个非常出色的、依赖数据的加权平均操作。它是一种全局池化的形式,一种信息压缩和通信方式。Attention 的作用是从多个节点(如 token、图像 patch 等)中汇聚相关信息。它表现力强大、并行性高、易于优化。事实上,甚至可以将多层感知机 (MLP) 重新表述为对数据无关权重的 Attention(第一层权重是查询,第二层权重是值,键是输入,softmax 变为逐元素操作并删除归一化)。简单来说,Attention 是神经网络架构设计中一项重大突破。
让我感到惊讶的是,论文《Attention is All You Need》获得的关注大约是 3 年前由 Dzmitry Bahdanau、Kyunghyun Cho 和 Yoshua Bengio 撰写的论文《Neural Machine Translation by Jointly Learning to Align and Translate》的 100 倍。后者实际上是第一个引入 Attention 的工作。顾名思义,《Attention is All You Need》的核心贡献在于删掉了除 Attention 以外的所有内容,并基本上通过将 Attention 堆叠到一个包含 MLP 的 ResNet 中(根据上述观点,MLP 也可以视作一种 Attention)。尽管如此,我认为 Transformer 论文本身依然具有独立的价值,因为它一次性引入了许多令人惊叹的想法,比如位置编码 (positional encoding)、缩放 Attention (scaled attention)、多头 Attention (multi-headed attention)、等方性设计 (isotropic design) 等。而 Transformer 自 2017 年以来几乎保持原样,仅有一些较小的改动,比如更好的位置编码方案(如 RoPE 等)。
邮件内容提到,之所以将这种操作称为“Attention”,是因为它来源于在生成翻译时对源句子中的单词进行“关注”的操作。这一术语由 Yoshua Bengio 在过程后期提出,用以替代“RNNSearch”(感谢他!:D)。此外,这种设计的灵感来自于人类的一种认知策略,即在一些数据上来回注意并逐步处理。最后,从技术进步的角度来看,这个故事也很有趣——相似的想法和方法当时已经在研究领域中“酝酿已久”。比如当时 Alex Graves 的 NMT 工作和 Jason Weston 的 Memory Networks 等研究也对其产生了重要影响。
---------------------------------------------------------------------------------------------
邮件原文内容:
嗨,Andrej,
很高兴向你讲述这个故事,它发生在 8 年前!
我在完成了第一年硕士课程后作为实习生来到 Yoshua 的实验室,当时我在雅各布大学跟随 Herbert Jaeger 学习。
我告诉 Yoshua 我很乐意参与任何项目。于是他安排我加入机器翻译项目,与 Kyunghyun Cho 和团队合作。我对将一串单词压缩到一个向量中的想法非常怀疑。但我也非常渴望获得博士学位的机会。所以我挽起袖子开始做我擅长的事情——写代码、修复 bug 等等。在某个时刻,我展示了对项目的足够理解,于是 Yoshua 邀请我攻读博士学位(2014 年是个好时候,仅凭这些就够了——真是美好的过去!)。我非常开心,觉得是时候开始尽情发挥创意了。
因此,我开始思考如何避免编码器和解码器 RNN 之间的瓶颈。我的第一个想法是设计一个有两个“光标”的模型,一个在源序列上移动(由双向 RNN 编码),另一个在目标序列上移动。这些光标的轨迹可以通过动态规划进行边际化处理。KyungHyun Cho 指出,这等同于 Alex Graves 的 RNN Transducer 模型。在那之后,我可能还阅读了 Graves 的手写识别论文。然而,这种方法看起来并不适合机器翻译。
上述带光标的方法在我实习剩下的 5 周内太难实现。所以我尝试了一种更简单的方法——两个光标同步移动(本质上是硬编码的对角 Attention)。这种方法勉强奏效,但缺乏优雅。
有一天,我想到,也许可以让解码器 RNN 学会在源序列中寻找放置光标的位置。这种想法部分受到我中学时期学习英语时翻译练习的启发。翻译时,视线会在源序列和目标序列之间来回切换。我用 softmax 和双向 RNN 状态的加权平均表达了软搜索。这种方法第一次尝试就非常成功,这让我兴奋不已。我称这种架构为 RNNSearch,我们赶紧发布了一篇 ArXiv 论文,因为我们知道 Google 的 Ilya 和他的团队用他们的大型 8 GPU LSTM 模型可能已经走在我们前面了(而 RNN Search 仍然只跑在 1 个 GPU 上)。
后来发现,这个名字并不好。一个更好的名字(Attention)是在最后几轮修改中由 Yoshua 添加到结论部分的。
1.5 个月后,我们看到了 Alex Graves 的 NMT 论文。确实是完全相同的想法,不过他是从完全不同的动机出发得出的。在我们的情况下,发明是出于需求;而在他的情况下,我猜是出于将神经和符号 AI 融合的雄心?Jason Weston 和他团队的 Memory Networks 论文也有类似的机制。
我当时并没有预见到 Attention 可以在更低层次上用作表示学习中的核心操作。但当我看到 Transformer 论文时,我立刻对实验室的同事宣布,RNN 已经“死了”。
回到你的最初问题:在 Yoshua 的蒙特利尔实验室发明的“可微分的、依赖数据的加权平均”是独立于 Neural Turing Machines、Memory Networks 以及一些 90 年代(甚至 70 年代)的认知科学论文的(虽然我可以给你任何相关的链接)。这是 Yoshua 鼓励实验室追求雄心壮志的领导力,KyungHyun Cho 优秀的项目管理能力,以及我多年来通过竞赛编程磨练出来的创意和编码能力共同促成的成果。但我不认为这个想法会再等待很久才被发现。即使是我、Alex Graves 和故事中的其他人当时没有从事深度学习研究,Attention 也是一种自然的方法,用于实现深度学习中的灵活空间连接。这是一个显而易见的想法,只是在等待 GPU 足够快,以激励人们认真研究深度学习。当我意识到这一点后,我的 AI 野心变成了启动像机器翻译项目那样令人惊叹的应用项目。我相信,好的研发工作可以为基础技术的进步做出更多贡献,远超那些我们常认为是“真正” AI 研究的花哨理论。
就这样!非常期待听到更多关于你的教育 AI 项目的消息(我从 Harm de Vries 那里听到了一些传闻 ;))。
祝好,
Dima