本文旨在浅出深入讲解transformer自注意力机制,揭开AI大模型神秘面纱,以下全是干货!
transformer来源
Transformer 源自发表于 2017 年 6 月(arXiv 预印本,作者上传时间为2017-06-12),谷歌论文《Attention Is All You Need》。研究者发现:处理语言时,不必像人一样逐字“背顺序”,而是学会“注意力分配”——一句话里哪些词最重要。Transformer 正是用自注意力机制,让模型一次性看懂整句话,抓住关键关系,从而更快、更准地理解和生成语言。这一结构随后成为几乎所有大模型的基础。
浅出
观察下图,你的注意力在哪。你同时有多少个注意力。经过一秒钟(这一秒钟内经过了无数个注意力)你的大脑通过你的所有注意力构建出了:这是一位魔鬼身材、天使面孔的美女。
你的注意力拆解:
第一个注意力:观察到美女胸部特征。
第二个注意力:观察到美女面部。
第三个注意力:观察到美女腰部曲线。
第四个注意力:观察到美女配饰、衣物。
第五个注意力:观察到背景海边。
......
每一个注意力之间互相存在关系(比如:你观察到胸部特征,你就想要去观察面部、腰部曲线等,从而多角度验证这是一个“生理女性”的美女,而非“变形美女”),直到你的大脑利用关系构建出一副完整的、可被理解的画面:夕阳海边,一位魔鬼身材、天使面孔的美女佩戴精致的头冠、耳坠,伸展胳膊至脑后,表现出自信且慵懒的姿态。
这就是你的大脑在这一秒钟之内使用了自注意力机制,充分计算,从而理解了这张图片的内容。
需要强调的是,这只是类比。Transformer 的注意力并不是时间序列,而是一次性并行完成。
深入
如果你理解了上一章节“浅出”,本章节深入transformer是如何在计算机中模拟上一章节过程。下文采用“我爱你”这句话详解transformer的自注意力机制每个步骤干了什么。
自注意力计算公式如下:
第一步:拆解token,生成Q、K、V
在计算机首先要拆解为多个token( 每个AI大模型拆解一句话产生的token不一样),存入计算机内存中,方便接下来的计算,例如:
我 | 爱 | 你 |
整个过程类似于你的大脑将上面的美女图片拆解成各个部位(胸部部位、腰部部位、面部部位等)
为了保证每个token的精准度以及接下来的计算,每个 token 先被表示为一个 512 维(维度越大,能够表示token的精准度越高、内容信息越充足,计算量越大)的向量。
为方便下文举例及计算,这里用浮点数、4维的向量表示“我爱你”的每个token。假设使用整数进行计算,会在softmax函数计算过程中指数过大,无法表示,所以用浮点数进行计算。
第1个token「我」:[0.1, -0.2, 0.3, 0.1]
第2个token「爱」:[-0.1, 0.2, 0.2, -0.3]
第3个token「你」:[0.2, 0.1, -0.1, 0.2]
注意:这里每个token的4维向量值是初始化随机生成的,因为我们是在模拟第一次训练大模型时候的状态。在完成一次完整的前向传播并计算损失函数后,通过反向传播与参数更新,这些 4 维向量会被逐步调整。
再通过三组线性变换(即使用随机生成的Wq、Wk、Wv分别与上面每个token的向量相乘),分别得到该 token 的 Q、K、V 向量。
随机生成的Wq、Wk、Wv如下所示:
注意:这里Wq、Wk、Wv是初始化随机生成的,因为我们是在模拟第一次训练大模型时候的状态。在完成一次完整的前向传播并计算损失函数后,通过反向传播与参数更新,这些Wq、Wk、Wv会被逐步调整。
使用Wq、Wk、Wv分别与每个token的向量进行相乘,得到Q、K、V向量。
提示:矩阵、向量计算规则可自行搜索,高中生绝对能看懂,这里不再赘述。
以 “我” 为例,Q 向量与Wq相乘,即 [0.1,−0.2,0.3,0.1]×Wq≈[−0.04,0.09,0.13,−0.03]
同理,得到以下数据:
token | Q向量(4维) | K向量(4维) | V向量(4维) |
我 | [-0.04, 0.09, 0.13, -0.03] | [0.05, -0.08, 0.12, 0.04] | [-0.05, 0.08, 0.11, -0.06] |
爱 | [-0.11, 0.05, 0.07, -0.09] | [-0.08, 0.10, 0.05, -0.12] | [0.07, -0.11, 0.04, 0.08] |
你 | [0.06, -0.07, 0.15, 0.02] | [0.09, -0.05, 0.11, 0.07] | [0.03, -0.08, 0.12, -0.05] |
Q = Query K = Key V = Value
通俗的讲:Q是你在搜索引擎中输入的“字”,K是搜索出来的多个结果,V是每个结果点进去的内容。
如图所示:
第二步:将每个token的向量Q、向量K、向量V分别堆叠成矩阵Q、矩阵K、矩阵V。
堆叠成矩阵后,进行第三步的时,GPU显卡能充分发挥性能优势(不堆叠成矩阵也可以,直接用向量点积也可以,但那是CPU的做法)
将K矩阵转置,即行转列,列转行。K矩阵转置后如下所示:
第三步:使用Q矩阵 与矩阵相乘
第四步:将第三步中的计算结果除以
有时第三步的计算结果,某两个数差过大(0.999和0.0001),要整体进行缩放。将相乘结果除以,是为了防止向量维度过高导致点积值过大,从而使后续的softmax函数计算结果过度饱和,注意力权重失去区分能力。
的值是token的维度 除以 头的个数。假设本例中头个数为1,则
=4,
= 2。
逐个元素除以,计算结果如下:
提示:头指的是从不同的角度进行自注意力机制计算,比如物理学家、数学家共同解决天体运行规律,物理学家、数学家分别是一个头。
第五步:使用softmax函数来计算权重
softmax函数是用来将上面的计算结果按照行来做权重分配计算的,即每一行的数字相加结果等于1。
Softmax函数计算逻辑过程如下:
由于公式表示过于抽象,为方便各位读者理解,本作者直接手搓一遍计算过程,其中e就是高中学的常数e。
第六步:第五步结果乘以矩阵V,进行输出
至此,单个自注意力机制结束。
那么最终计算输出的矩阵代表什么意思?
这个注意力输出矩阵中每个元素的本质是 “特定 token 在某个隐式语义维度上的特征强度”。
由于我们最初赋予每个token的初始向量是随机的,所以这个计算结果(即矩阵中的元素数值)仅是未收敛的中间表示(数学上合法、语义上随机、任务上无意义)的。在训练过程中,模型通过多层自注意力机制与前馈神经网络不断重写表示空间,并借助损失函数(Loss)定义优化目标,在反向传播与参数更新的迭代中逐步收敛,最终得到在语义上稳定、并与具体任务目标对齐的表示矩阵,用于下游预测或生成。
整个过程类似于人类大脑在视觉学习中的机制:大脑并不是直接“看到”美女图片的语义,而是将视觉信号转化为神经活动模式,通过大量训练逐步学习不同特征之间的统计关系,最终形成对物体的识别能力。这就是为什么小孩子更好奇,更喜欢和世间万物互动。
Transformer 也是通过将输入转换为高维向量表示,并在多层计算中学习这些表示之间的关系,来完成理解与生成任务。
整个transformer还没结束,还有多头、残差、归一化、前馈神经网络、编码、解码、损失函数等内容,当所有步骤走完,我们的“大脑”才能真正的学会识别这是一张美女图片,并且还能依照学会的知识进行推理(这就是大语言模型的训练和推理过程)。
建议各位读者全程手搓一遍计算过程,不要怕麻烦,直接拿出纸笔进行计算。
后续内容敬请关注本作者《高中生都能学明白transformer》系列,本作者带您逐步拆解、全面解析大语言模型真正的奥妙。
充分理解大语言模型,你在使用各大厂商AI大模型过程中一些疑惑便迎刃而解。这便是知其然,知其所以然!
如果您觉得此文对您有帮助,请点赞收藏转发,以便让更多人看到。
此账号持续更新各种comfyui实战工作流,欢迎关注!