Transformer1( 了解整体知识架构)
在人工智能和机器学习领域,Transformer模型的出现无疑是一场革命。自从2017年Google的研究团队首次提出以来,Transformer迅速成为了处理序列数据(如文本、语音等)的首选架构,彻底改变了自然语言处理(NLP)的面貌。基于 Transformer 架构的 LLM 在复杂对话、代码编写、艺术创作等领域取得了卓越的表现,比如:OpenAI 的 GPT、谷歌的 BERT、 Athropic 的 Claude 、 Meta 的 Llama、阿里的通义千问、腾讯的混元等。接下来让我们对 Transformer 模型一探究竟。
为了让同学们快速的透彻的理解Transformer 模型,与之前一样,我们不像其它文章开篇就是公(无)式(脑)推(懵)导(逼)的学习模式,先从整体上了解 Transformer 是个什么东西以及它为什么能取得这么好的结果。既然你都想学习 Transformer了,肯定多少有些深度学习的基础,如果没有就不求甚解的看一下,在场合上当个谈资也足够了。
背景
在 Transformer 出现之前, NLP的主流模型是RNN,RNN 最致命的缺点是结构限制了并行计算能力,而 Transformer 设计的初衷也是为了解决这一问题。你可以理解为Transformer 实现的功能和 RNN 是一样的,但是实现了并行计算。RNN 通过训练的先后顺序体现了位置信息,也正是这种架构,必须一个词向量一个词向量的训练下去,而 Transformer 将位置信息进行位置编码,位置信息在矩阵中体现,所有词向量能一起计算。
举个例子:“The animal didn't cross the street because it was too tired”,it 指的是 animal 还是 street?RNN 必须把 it 前面词语按照先后顺序在模型中走一遍,才能理解 it 指的是 animal,而 Transformer 可以根据位置编码一次性直接理解 it 指的是 animal 。
结构解读
下面这幅图出自于 Google 发表 Transformer 的论文《Attention Is All You Need》,当你第一眼看到的时候可能会觉得有点复杂,而且看不懂什么意思,不用担心,当你看完这篇文章后,能理解大概是怎么回事,甚至能理解一些其中的妙用。
为了方便理解,假设我们正在用这个模型训练英译汉的翻译模型,接下来,我们顺着模型方向去学习和理解每个模块。
Inputs:模型的输入。英译汉建模肯定用英文和翻译后的中文去训练,此处输入的只有英文训练数据。
Input Embedding:输入嵌入,可以理解为量化。在英译汉建模中的作用是把输入的英文转换成数字矩阵。假设我们使用Google News Word2Vec 模型 Embedding 语句“I am a student”,这句话可以拆解为4个词语“I”、“am”、“a”、“student”,那么最终的输入矩阵就会是一个4×300的矩阵。
拓展:Input Embedding 常用的方法是 Word2Vec。Word2Vec是一个算法框架,可以通过大量的文本数据来生成词语和向量的关系。我们可以选择自建Word2Vec模型,也可以用公开的模型,比如Google News Word2Vec 模型,由Google基于1000 亿个单词的Google News数据集上训练的,训练模型包含300 万个词向量,每个词向量有300个维度。这 300 个维度并没有明确的意义,你可以理解为深度学习的黑匣子,每个节点也没法解释。尽管每个维度没有固定的意义,但是可以用数学上的计算体现出不同词语之间的关系,比如相似度, "king" 和 "queen" 之间的关系类似于 "man" 和 "woman" 之间的关系,它们两两连线在 300 维空间内是平行的,这就是数学神奇的魅力。
Positional Encoding:位置编码,把位置通过正弦余弦函数量化,也变成一个向量。
符号:对位相加,你可以理解为把 Input Embedding 结果和 Positional Encoding 结果相加,这样相加后的矩阵既包含了词语信息,也包含了词语位置信息。
Multi-Head Attention:多头注意力,是 Transformer 模型的核心。我们把它拆开理解,多头和注意力,注意力是前馈神经网络的进化版本,可以体现出一句话中不同词语之间的权重关系。比如“The animal didn't cross the street, because it was too tired.”, 假设这句话中 it 与其它词语 [The, animal, didn't, cross, street, because, was, too, tired] 之间的权重为 [0.1, 0.8, 0.1, 0.1, 0.4, 0.1, 0.1, 0.1, 0.1] ,可以看出与 it 最相关的是 animal,这样就能从数学的角度理解这句话,it 就是指 animal。多头的意思表示多个,就是有多个这样的权重向量,也可能是 [0.1, 0.9, 0.1, 0.1, 0.5, 0.1, 0.1, 0.1, 0.1],多头可以从更多的空间或角度去理解这句话的含义,避免一个歧义引起了整句话的理解错误。
Add & Norm:残差网络相加和归一化。残差网络相加是为了解决梯度消失和梯度爆炸问题。归一化利用均值和方差,减少异常值对模型的影响,结果会更稳定,更适合后续层的处理,减少数据特征的偏差。
Feed Forward:前馈神经网络,通过激活函数,实现非线性变换,从而捕捉更复杂的特征。
Output Embedding:输出嵌入,和 Input Embedding 一样,把输出量化成矩阵。在英译汉模型中指的是汉语的数据。
Masked Multi-Head Attention:掩码多头注意力。与多头注意力一样,区别就在于掩码。这个地方需要借助英译汉建模来理解,多头注意力的作用是理解文本,而掩码多头注意力只用于 output 的理解,也就是对汉语的理解。但我们输入的 output 是英文翻译后的中文,这样就有作弊之嫌。就比如小明和小红同做一套试卷,小明之前做过,小红之前没做过,俩人都考了 99 分,请问谁的水平更高?万一俩人都考了 80 分,你觉得谁的水平更高?然后如果重新做一套俩人都没做过的试卷,谁的分数会更高?这样你就理解了,因为我们是英译汉模型,所以要对还没翻译出来的汉字进行掩盖,只让他去理解已经翻译出来的汉字,这样最终翻译结果准确,才能说明模型是真的好。
拓展:假设 1 表示允许关注,-∞ 表示屏蔽,那么由 4 个词语组成的句子的mask矩阵为:
Linear:全连接层,与前馈神经网络的区别就是没有引入激活函数,所以只能实现线性变换,这样做的目的是不改变数据分布的特性。
Softmax:将 Linear 的输出转化为概率分布,以便于计算损失函数,然后通过反向传播来更新模型参数。理解不够透彻的可以看看我的这篇博客。Softmax从小白到深度理解_softmax 为什么进行指数计算-CSDN博客文章浏览阅读1.4k次,点赞7次,收藏7次。大家在学习深度学习时,肯定会遇到softmax这个知识点,初学者大都一知半解,没有理解透彻,很多文章直接讲述softmax公式及求导,忽略了其中的原因。初学者通过此文可以梳理知识结构,高手可直接查看公式推导来巩固知识用来面试手推。softmax公式及理解在深度学习反向传播算法中,为什么softmax求导如此重要softmax求导公式推导..._softmax 为什么进行指数计算https://blog.csdn.net/u014182497/article/details/115058389
所有模块都已经讲完了,接下来我们顺着结构图走一遍,仍然用英译汉建模来套用。首先准备好英译汉的训练数据,英文数据和英文翻译后汉语数据。为了方便理解,我们只用 “I am a student” 和“我是一名学生” 这一对训练数据走一遍训练模型。
先看结构图的左边,首先会把 “I am a student” 量化为矩阵,然后和位置编码相加,这样矩阵就能同时体现出词语本身和词语位置的信息。然后用 Multi-Head Attention 去理解矩阵所代表 “I am a student” 的含义。再用残差网络相加和归一化处理 前面计算的矩阵,减少数据特征偏差。再通过前馈神经网络捕捉到更多更复杂的数据特征,然后再做一遍残差网络相加和归一化。
再看结构右边,首先把 “我是一名学生” 量化为矩阵,然后和位置编码相加。接下来进入Masked Multi-Head Attention,它会再给矩阵增加4 个维度(因为“我是一名学生”可以拆分为“我”、“是”、“一名”、“学生” 4 个词),然后再对 Masked Multi-Head Attention 计算后的矩阵进行残差网络相加和归一化处理。
到目前位置,模型已经对 “I am a student” 和 “我”、“我是”、“我是一名”,“我是一名学生” 进行了充分的理解,接下来把他们作为输入再做一遍 Multi-Head Attention 和残差网络相加、归一化。再通过前馈神经网络捕捉到更多更复杂的数据特征,然后再做一遍残差网络相加和归一。最后做一次全连接层,得到 “I am a student” 的翻译结果,也许训练时翻译结果为 “我是一名教师”,然后再将翻译结果用 softmax 转为概率,和 “我是一名学生” 计算损失函数,然后通过反向传播来更新模型参数。
有个重要的点我需要拿出来再单独讲一下,Transformer 用 “我” 预测 “是”,用 “我是” 预测 “一名”,用 “我是一名” 预测 “学生”,它们可以同时预测,这就是 Transformer 最精妙的地方,不像 RNN 那样前后递进关系, 必须等 “我” 预测 “是” 完成后才能用 “我是” 预测 “一名”...
Transformer 由左右两个大模块组成,左边叫编码器(Encoder),右边叫解码器(Decoder)。编码器的作用是将输入序列通过计算转换为高维度特征表示,使模型能够理解输入中每个词的含义和它在上下文中的作用。解码器的作用是逐步生成目标序列的每个词。
大模型发展史
Transformer 问世以后,研究方向分成了三种,Encoder-Only(只用编码器)、 Decoder-Only(只用解码器)、 Encoder-Decoder(编码器-解码器都用)。
Encoder-Only 模型
- 代表模型: BERT、RoBERTa、DeBERTa
- 工作方式: 只使用 Transformer 的编码器部分,用于从输入序列中提取深层的上下文信息。
- 适用场景: 主要用于自然语言理解任务(如分类、情感分析、问答)。
- 优势:
- 对整个输入序列进行双向编码,擅长理解上下文信息。
- 在文本分类和提取任务中效果突出。
- 不足:
- 无法生成新内容,只能处理给定输入的理解任务。
- 在生成任务(如翻译、摘要)中的表现较弱。
Decoder-Only 模型
- 代表模型: GPT 系列(GPT-2、GPT-3、GPT-4)、ChatGPT
- 工作方式: 只使用 Transformer 的解码器部分,通过自回归方式逐步生成文本。
- 适用场景: 自然语言生成任务(如对话系统、文本生成、补全)。
- 优势:
- 善于生成连贯的长文本,适合对话和生成式任务。
- 能在少样本(few-shot)或零样本(zero-shot)学习中表现出色。
- 不足:
- 对输入的理解能力较弱,没有双向上下文的深度解析。
- 生成效率较低,尤其在长序列生成时需逐步生成。
Encoder-Decoder 模型
- 代表模型: T5、BART、mT5
- 工作方式: 同时使用编码器和解码器,编码器对输入序列进行编码,解码器生成输出序列。
- 适用场景: 适用于需要输入和输出配对的任务(如机器翻译、摘要、文本生成)。
- 优势:
- 编码器能捕获输入的全局上下文,解码器逐步生成输出,结合了理解与生成能力。
- 特别适合对输入进行变换、重构(如翻译和摘要)。
- 不足:
- 相比 Decoder-Only 模型,架构更复杂,计算成本更高。
- 对简单的生成任务可能显得不够高效。
归纳
- Encoder-Only强于理解,适合分类、检索等任务。
- Decoder-Only强于生成,适合对话、长文本生成等任务。
- Encoder-Decoder结合理解与生成能力,适合输入输出需要配对的复杂任务如翻译和摘要。
总结
希望大家看完这篇文章后能够对 Transformer 有一个整体的认知,能看懂结构图,知道每个模块的作用和意义。本篇文章为了方便理解,没有涉及公式,下一篇会详细剖析 Multi-Head Attention 的公式。
