要想系统而又透彻地理解 Transformer,至少要遵循下面这样一个思路(步骤):
首先,了解一些 NLP 领域的基本知识,比如文本是如何被表征的,序列文本信息的处理,基于深度神经网络的语言模型是如何处理自然语言的;
Transformer 主要解决了什么问题。重点关注的方面有自注意力机制,多头注意力,Transformer 的内部结构;
动手实现一个 Transformer 应用。
第一点属于要求掌握一些背景知识,而第三点是有意向深入学习,甚至想在实践中用 Transformer 做点什么的人去关注。
什么是 Transformer?
一切源于 2017 年谷歌 Brain 团队那篇鼎鼎大名的文章'Attention Is All You Need'(注意力就是你所需要的一切),就是这篇文章提出了 Transformer 网络结构。

Transformer 的意义体现在它的长距离依赖关系处理和并行计算,而这两点都离不开其提出的自注意力机制。
首先,Transformer 引入的自注意力机制能够有效捕捉序列信息中长距离依赖关系,相比于以往的 RNNs,它在处理长序列时的表现更好。
而自注意力机制的另一个特点允许模型并行计算,无需 RNN 一样 t 步骤的计算必须依赖 t-1 步骤的结果,因此 Transformer 结构让模型的计算效率更高,加速训练和推理速度。
Transformer 最开始应用于 NLP 领域的机器翻译任务,但是它的通用性很好,除了 NLP 领域的其他任务,经过变体,还可以用于视觉领域,如 ViT(Vision Transformer)。
这些特点让 Transformer 自 2017 年发布以来,持续受到关注,基于 Transformer 的工作和应用层出不穷。包括当下最热门的 AI 大语言模型/聊天机器人,比如 ChatGPT、文心一言、Bard 等等。
这些 AI 大模型能生成'真假难辨'的新闻、专业论文等等,跟人类进行对话,生成代码等一系列复杂的任务。
既然提到 ChatGPT,就多说几句。大家要学会利用好 ChatGPT 这个'老师'。对于很多领域,ChatGPT 所掌握的知识深度都超过了一个本科生(甚至更高)的水平。
说回到问题,上面提到,Transformer 中最重要的一个方面是自注意力机制,那么到底应该如何理解这个概念呢。
什么是注意力机制?
首先来看注意力机制(Attention)用来干嘛?
我们人类在感知环境的时候(比如看一张图像或者一个句子),大脑能够让我们分清那部分是重要的,哪部分是次要的,从而聚焦更重要的方面以获得对应的信息。
而我们在设计神经网络模型的时候,希望模型也能具有这样的能力。例如,预测一个句子中的单词时,使用一个注意力向量来估计它在多大程度上与其他元素相关。
简单的说,注意力机制描述了(序列)元素的加权平均值,其权重是根据输入的 query 和元素的键值进行动态计算的。具体地,在注意力机制中,有 4 个概念需要明确。
Query:Query(查询)是一个特征向量,描述我们在序列中寻找什么,即我们可能想要注意什么。
Keys:每个输入元素有一个键,它也是一个特征向量。该特征向量粗略地描述了该元素'提供'什么,或者它何时可能很重要。键的设计应该使得我们可以根据 Query 来识别我们想要关注的元素。
Values:每个输入元素,我们还有一个值向量。这个向量就是我们想要平均的向量。
Score function:评分函数,为了对想要关注的元素进行评分,我们需要指定一个评分函数 f 该函数将查询和键作为输入,并输出查询 - 键对的得分/注意力权重。它通常通过简单的相似性度量来实现,例如点积或 MLP。
由此,权重通过 softmax 函数计算得出:

下图直观描述注意力如何作用在一系列单词上。对于每个单词,都有一个键和一个值向量。使用评分函数(在本例中为点积)将 query 与所有键进行比较以确定权重。最后,使用注意力权重对所有单词的值向量进行平均。(为了简单起见,softmax 没有可视化。)












