2017 年 Transformer 横空出世,由谷歌在论文《Attention is all you need》中引入。这篇论文抛弃了以往深度学习任务里面使用到的 CNN 和 RNN。这一开创性的研究颠覆了以往序列建模和 RNN 划等号的思路,如今被广泛用于 NLP。大热的 GPT、BERT 等都是基于 Transformer 构建的。
Transformer 自推出以来,研究者已经提出了许多变体。但大家对 Transformer 的描述似乎都是以口头形式、图形解释等方式介绍该架构。关于 Transformer 的伪代码描述可参考的资料很少。
正如下面这段话所表达的:一位 AI 领域非常出名的研究者,曾向一位著名的复杂性理论家发送了一篇自认为写得非常好的论文。而理论家的回答是:我在论文中找不到任何定理,我不知道这篇论文是关于什么的。
对于从业者来说,论文可能足够详细,但理论家需要的精度通常更高。由于某些原因,DL 社区似乎不愿为他们的神经网络模型提供伪代码。
目前看来,DL 社区存在以下问题:
DL 出版物缺乏科学的准确性和细节。深度学习在过去 5 到 10 年间取得了巨大的成功,每年发表的论文数以千计。许多研究者只是非正式地描述了他们如何改变以前的模型,大约 100 多页的论文只包含几行非正式地模型描述。充其量是一些高级图表,没有伪代码,没有方程式,没有提到对模型的精确解释。甚至没有人为著名的 Transformer 及其编码器 / 解码器变体提供伪代码。
源代码与伪代码。开源源代码非常有用,但与数千行的真实源代码相比,精心设计的伪代码通常不到一页,并且基本上仍然是完整的。这似乎是一项没有人愿意做的苦工作。
解释训练过程同样重要,但有时论文中甚至没有提到模型的输入和输出以及潜在的副作用是什么。论文中的实验部分通常不会解释输入算法的内容以及如何输入。如果方法部分有一些解释,通常与实验部分中描述的内容脱节,可能是由于不同的作者编写了不同的部分造成的。
有人会问:真的需要伪代码吗? 伪代码有什么用?
来自 DeepMind 的研究者认为提供伪代码有很多用途,与阅读文章或滚动 1000 行实际代码相比,伪代码将所有重要的内容浓缩在一页纸上,更容易开发新的变体。为此,他们最近发表的一篇论文《 Formal Algorithms for Transformers 》,文章以完备的、数学上精确的方式来描述 Transformer 架构。
论文简介
本文涵盖了什么是 Transformer、Transformer 如何训练、Transformer 被用来做什么、Transformer 关键架构组件以及比较出名的模型预览。
论文地址:https://arxiv.org/pdf/2207.09238.pdf
不过,阅读本文,读者需熟悉基础 ML 术语和简单的神经网络体系架构 (如 MLPs)。对于读者而言,在理解了文中的内容后,将会扎实的掌握 Transformer,并可能会使用伪代码实现自己的 Transformer 变体。
这篇论文的主体部分是第 3-8 章,分别介绍了 Transformer 及其典型任务、tokenization、Transformer 的架构组成、Transformer 的训练和推理、实际应用。
论文中基本完整的伪代码大约有 50 行,而实际的真实源代码则有数千行。论文中表述算法的伪代码适用于需要紧凑、完整和精确公式的理论研究者、从头实现 Transformer 的实验研究人员,同时对使用形式 Transformer 算法扩充论文或教科书也大有裨益。
论文中伪代码示例
对于熟悉基本的 ML 术语和简单的神经网络架构(例如 MLP)的初学者来说,这篇论文将帮你掌握扎实的 Transformer 基础,并用伪代码模板实现自己的 Transformer 模型。
作者介绍
这篇论文的第一作者是今年 3 月正式入职 DeepMind 的研究员 Mary Phuong。她博士毕业于奥地利科学技术研究所,主要从事机器学习的理论研究。
论文的另一位作者是 DeepMind 的资深研究员 Marcus Hutter,也是澳大利亚国立大学 (ANU) 计算机科学研究院 (RSCS) 的名誉教授。
Marcus Hutter 多年来一直从事人工智能数学理论的研究。这一研究领域基于若干数学和计算科学概念,涉及强化学习、概率论、算法信息理论、优化、搜索和计算理论等。他的书《通用人工智能:基于算法概率的顺序决策》于 2005 年出版,这是一本技术性和数学性都很强的书。
2002 年,Marcus Hutter 与 Jürgen Schmidhuber 和 Shane Legg 一起提出了基于理想化智能体和奖励强化学习的人工智能数学理论 AIXI。2009 年,Marcus Hutter 又提出了特征强化学习理论。