上一篇文章(你上过高中,你说你搞不明白transformer的前馈神经网络?-CSDN博客),我们进行了前馈神经网络的计算,得到了一个新的矩阵LN2_out。LN2_out可以被用来表示“我爱你”吗?答案是可以,“LN2_out 已经是对『我爱你』的一种表示,但这种表示仍然偏浅、偏局部,尚不足以稳定承载完整语义与生成决策。”

        LN2_out只经过了一层transformer block计算、并且这一层的transformer只有一个头的自注意力计算,这个结果是不够全面的,不够完整的。本文重点分析如何让计算更全面、更完整。

浅出   

什么是多头?

        多头指的是多个角度自注意力去观察:同一份输入,会被投影到多个不同的特征子空间中,分别进行自注意力计算。

        以之前的美女图片来举例,我们以普通欣赏的角度去观察美女图片,会重点观察她的美。而当我们以整形医生的角度去观察,会重点观察她是否做过整形。而当我们以穿搭博主的角度去观察,会重点观察她的穿衣风格。多头注意力并不是“换一个人去看”,而是在不同特征维度上并行建模不同类型的关系。

        所有角度的自注意力计算结果汇总到一起,最终得出一个综合结论。

为什么要多头?

        单头注意力不是看不见,而是“只能从一个角度看”, 同一时间只能看一个侧面,因此多头自注意力机制会让观察更全面,会让后续的计算更全面。

什么是多层transformer block?

        多层transformer block指的是使用多个transformer结构,按照线性的排列方式,拿到上层的transformer输出,投入到下一个transformer中进行计算。以之前的美女图片来举例,我们第一层transformer经过计算,输出一个临时结论:她是一个整形过、穿搭风格很好的美女,这个临时结论作为第二层transformer的输入,第二层transformer经过计算,输出第二个临时结论:她某某地方做过整形,使用了某某穿搭风格。

        经历过多层transformer block,最终会获得一个更深层次的结论。

为什么要多层transformer block?

      一层 transformer block已经“全局可见”,它只是在当前表示空间里重排信息,多层 Transformer 不是重复计算,而是在“前一层构造的新表示之上,再做一次合法重写”。


深入

多头注意力计算详解

        多头注意力不是“多算几次”,而是把同一个表示,分别投影到多个子空间中再分别建模。

        同一个输入token,使用不同的Wq矩阵、Wk矩阵、Wv矩阵、经过自注意力公式计算(计算方法详见第一篇文章)得到不同的attention输出矩阵。

        以“我爱你”这话的token产生的4维向量举例:

        第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]

        在这里我们设置为两个头,每个头的维度dk = 4 / 2 =2。

        则头1的Wq1,Wk1,Wv1为4行2列,计算出3行2列的Q1,K1,V1。再利用自注意力计算公式计算出3行2列的矩阵1。

        头2的Wq2、Wk2、Wv2也是4行2列,计算出3行2列的Q2,K2,V2。再利用自注意力计算公式计算出3行2列的矩阵2。

        当两个头都计算完成后,直接将矩阵1、矩阵2横向拼接成一个3行4列的矩阵。

        为了让这些头的信息真正“融合”,我们还需要最关键的一步:使用拼接后的矩阵 乘以 一个额外的4行4列的权重矩阵Wo(这个步骤我们称为投影),计算出交给下一步骤(残差相加&层归一化)的“综合报告”。

        注意:这里每个Wo是初始化随机生成的,因为我们是在模拟第一次训练大模型时候的状态。

        投影不仅仅是物理上的“合并”,它在数学和语义上有三个核心作用:

        1.多维语义大融合

        如果不投影,这些信息只是简单地“并排坐”。投影矩阵Wo就像一位主编,它学习如何对这2个专家的意见进行加权平均,把离散的观察转化为一个统一的语义表示。

        2.线性特征转换:

        单纯的拼接只是改变了张量的排列。通过乘以一个可学习的权重矩阵 Wo,模型可以进一步提取拼接后特征中的高阶关联。

        3.确保与残差路径一致:

        虽然拼接后的形状通常刚好等3行4列,但Wo确保了输出信号的“分布”和“量级”能够与原始输入token完美匹配,以便进行接下来的残差相加。

        这是多头自注意力机制计算全景公式。

        多头注意力本质上是在多个低维子空间中并行执行注意力计算,再将结果融合。在高性能显卡(GPU)上,每个头是同时计算的。虽然头多了,但每个头的维度变小了(从 4 维变 2 维),总的计算量(浮点运算数)其实和单头几乎是一样的,但模型的能力却有了质的飞跃。


多层transformer block过程详解

        在 Transformer 架构中,数据并非只经过一次处理,而是通过多个完全相同的 Transformer Block(层) 堆叠而成。每一层都会对输入的特征进行抽象和提炼。

        这是transformer总体架构图,在整个过程中经历过多次transformer block,比如GPT3模型用了96层,每一层中都是做相同的事情(多头自注意力计算、残差相加&层归一化、前馈神经网络)。在这么多层的transformer block中,信息的流动与抽象如下所示:

层次

捕获的信息类型

解释

底层

局部特征与语法

关注相邻词的关系、词性、基础语法结构。

中层

语义特征

开始理解短语含义、指代关系(比如 "他" 指代谁)。

高层

全局特征与上下文

关注整个句子的意图、情感、复杂的逻辑关联。

        多层 Transformer 的本质,是在稳定约束下反复重塑表示空间,使语义逐步抽象。经过最后一层transformer block后,我们马上迎来大模型从“抽象思考”到“开口说话”的转折点。


        多头解决“看什么”,多头扩展的是“表示的宽度维度”。

        多层解决“看得多深”,多层扩展的是“表示的深度维度”。

        本系列讲解多头与多层时,仍然沿用前作单头、单层的计算结果,一是为了方便读者从数学计算角度化抽象为具体,深度参与计算,更好的理解过程。二是讲清楚“为什么要这样组织计算结构”。

        整个transformer还没结束,还有编码、解码、损失函数、反向传播等内容,当所有步骤走完,我们的“大脑”才能真正的学会识别这是一张美女图片,并且还能依照学会的知识进行推理(这就是大语言模型的训练和推理过程)。


        建议各位读者全程手搓一遍计算过程,不要怕麻烦,直接拿出纸笔进行计算。

        后续内容敬请关注本作者《高中生都能学明白transformer》系列,本作者带您逐步拆解、全面解析大语言模型真正的奥妙。

        充分理解大语言模型,你在使用各大厂商AI大模型过程中一些疑惑便迎刃而解。这便是知其然,知其所以然!

        如果您觉得此文对您有帮助,请点赞收藏转发,以便让更多人看到。

        

更多推荐