《大语言模型》学习笔记(四)--Transformer 模型

server/2025/3/30 18:13:27/

1.Transformer架构

当前主流的大语言模型都基于Transformer模型进行设计的。Transformer是由多层的多头自注意力(Multi-headSelf-attention)模块堆叠而成的神经网络模型。2017 年,Google 在论文 Attentions is All you need(论文地址:https://arxiv.org/abs/1706.03762) 中提出了 Transformer 模型,其使用 Self-Attention 结构取代了在 NLP 任务中常用的 RNN 网络结构。
在这里插入图片描述
在这里插入图片描述

原始的Transformer 模型由编码器和解码器两个部分构成,而这两个部分实际上可以独立使用。与BERT等早期的预训练语言模型相比,大语言模型的特点是使用了更长的向量维度、更深的层数,进而包含了更大规模的模型参数,并主要使用解码器架构,对于Transformer 本身的结构与配置改变并不大。

2.输入编码

在Transformer 模型中,输入的词元序列(𝒖 = [𝑢1,𝑢2,…,𝑢𝑇]) 首先经过一个输入嵌入模块(InputEmbeddingModule)转化成词向量序列。具体来说,为了捕获词汇本身的语义信息,每个词元在输入嵌入模块中被映射成为一个可学习的、具有固定维度的词向量𝒗𝑡 ∈R𝐻。由于Transformer的编码器结构本身无法识别序列中元素的顺序,位置编码(PositionEmbedding,PE)被引入来表示序列中的位置信息。给定一个词元𝑢𝑡,位置编码根据其在输入中的绝对位置分配一个固定长度的嵌入向量𝒑𝑡 ∈R𝐻。然后,每个词元对应的词向量和位置向量将直接相加,生成了最终的输入嵌入序列𝑿=[𝒙1,…,𝒙𝑇],并且被传入到后续层中:
在这里插入图片描述
通过这种建模方法的表示,Transformer 模型可以利用位置编码 𝒑𝑡 建模不同词元的位置信息。由于不同词元的位置编码仅由其位置唯一决定,因此这种位置建模方式被称为绝对位置编码。

3.多头自注意力机制

多头自注意力是Transformer模型的核心创新技术。相比于循环神经网络(Recurrent Neural Network, RNN)和卷积神经网络(ConvolutionalNeuralNetwork,CNN)等传统神经网络,多头自注意力机制能够直接建模任意距离的词元之间的交互关系。
多头自注意力机制通常由多个自注意力模块组成。在每个自注意力模块中,对于输入的词元序列,将其映射为相应的查询(Query,𝑸)、键(Key,𝑲)和值(Value, 𝑽)三个矩阵。然后,对于每个查询,将和所有没有被掩盖的键之间计算点积。这些点积值进一步除以√𝐷进行缩放(𝐷是键对应的向量维度),被传入到softmax函数中用于权重的计算。进一步,这些权重将作用于与键相关联的值,通过加权和的形式计算得到最终的输出。在数学上,上述过程可以表示为:
在这里插入图片描述
与单头注意力相比,多头注意力机制的主要区别在于它使用了𝐻组结构相同,但映射参数不同的自注意力模块。输入序列首先通过不同的权重矩阵被映射为一组查询、键和值。每组查询、键和值的映射构成一个“头”,并独立地计算自注意力的输出。最后,不同头的输出被拼接在一起,并通过一个权重矩阵𝑾𝑂∈R𝐻×𝐻进行映射,产生最终的输出。如下面的公式所示:
在这里插入图片描述
由上述内容可见,自注意力机制能够直接建模序列中任意两个位置之间的关系,进而有效捕获长程依赖关系,具有更强的序列建模能力。另一个主要的优势是,自注意力的计算过程对于基于硬件的并行优化(如GPU、TPU等)非常友好,因此能够支持大规模参数的高效优化。

4.前馈网络层

为了学习复杂的函数关系和特征,Transformer 模型引入了一个前馈网络层(Feed Forward Netwok, FFN),对于每个位置的隐藏状态进行非线性变换和特征提取。具体来说,给定输入𝒙,Transformer中的前馈神经网络由两个线性变换和一个非线性激活函数组成:
在这里插入图片描述
其中𝑾𝑈 ∈ R𝐻×𝐻′ 和𝑾𝐷 ∈ R𝐻′× 𝐻 分别是第一层和第二层的线性变换权重矩阵,b1 ∈ R𝐻′ 和 𝒃2 ∈ R𝐻 是偏置项,𝜎是激活函数(在原始的Transformer中,采用ReLU 作为激活函数)。前馈网络层通过激活函数引入了非线性映射变换,提升了模型的表达能力,从而更好地捕获复杂的交互关系。

5.编码器

在Transformer 模型中,编码器(Encoder)的作用是将每个输入词元都编码成一个上下文语义相关的表示向量。编码器结构由多个相同的层堆叠而成,其中每一层都包含多头自注意力模块和前馈网络模块。在注意力和前馈网络后,模型使用层归一化和残差连接来加强模型的训练稳定度。其中,残差连接(Residual Connection)将输入与该层的输出相加,实现了信息在不同层的跳跃传递,从而缓解梯度爆炸和消失的问题。而LayerNorm则对数据进行重新放缩,提升模型的训练稳定性(详细介绍可见第5.2.1节)。编码器接受经过位置编码层的词嵌入序列𝑿作为输入,通过多个堆叠的编码器层来建模上下文信息,进而对于整个输入序列进行编码表示。由于输入数据是完全可见的,编码器中的自注意力模块通常采用双向注意力,每个位置的词元表示能够有效融合上下文的语义关系。在编码器-解码器架构中,编码器的输出将作为解码器(Decoder)的输入,进行后续计算。形式化来说,第𝑙层(𝑙∈{1,…,𝐿})的编码器的数据处理过程如下所示:
在这里插入图片描述
其中,𝑿𝑙−1 和 𝑿𝑙 分别是该Transformer层的输入和输出,𝑿′ 𝑙是该层中输入经过多头注意力模块后的中间表示,LayerNorm表示层归一化。

6. 解码器

Transformer 架构中的解码器(图5.1(b))基于来自编码器编码后的最后一层的输出表示以及已经由模型生成的词元序列,执行后续的序列生成任务。与编码器不同,解码器需要引入掩码自注意力(MaskedSelf-attention)模块,用来在计算注意力分数的时候掩盖当前位置之后的词,以保证生成目标序列时不依赖于未来的信息。除了建模目标序列的内部关系,解码器还引入了与编码器相关联的多头注意力层,从而关注编码器输出的上下文信息𝑿𝐿。同编码器类似,在每个模块之后,Transformer 解码器也采用了层归一化和残差连接。在经过解码器之后,模型会通过一个全连接层将输出映射到大小为𝑉的目标词汇表的概率分布,并基于某种解码策略生成对应的词元。在训练过程中,解码器可以通过一次前向传播,让每个词元的输出用于预测下一个词元。而在解码过程,解码器需要经过一个逐步的生成过程,将自回归地生成完整的目标序列(具体可以参考第9章)。


http://www.ppmy.cn/server/179540.html

相关文章

5.go切片和map

切片的概念 数组和切片相比较切片的长度是不固定的,可以追加元素,在追加时可能会使切片的容量增大,所以可以将切片理解成 "动态数组",但是,它不是数组,而是构建在数组基础上的更高级的数据结构。…

C++20 中的std::c8rtomb和 std::mbrtoc8

文章目录 1. 引言2. std::c8rtomb 函数详解3. std::mbrtoc8 函数详解4. 使用示例5. 注意事项6. 总结 1. 引言 C20 标准引入了对 UTF-8 编码的更好支持,其中包括两个重要的函数:std::c8rtomb 和 std::mbrtoc8。这两个函数分别用于将 UTF-8 编码的字符转换…

深入理解垃圾收集算法:从分代理论到经典回收策略

垃圾收集(Garbage Collection, GC)是现代虚拟机自动内存管理的核心机制。它不仅能自动回收不再使用的对象,还能极大减轻开发者在内存管理上的负担。本文将详细讲解垃圾收集算法的基本思想、分代收集理论以及几种经典的垃圾收集算法。 注&…

Ceph集群2025(Squid版)导出高可用NFS集群(上集)

#创建一个CephFS 文件系统 ceph fs volume create cephfs02#创建子卷 ceph fs subvolumegroup create cephfs02 myfsg2#查看子卷 ceph fs subvolumegroup ls cephfs02[{"name": "myfsg2"} ]创建 NFS Ganesha 集群 #例子 $ ceph nfs cluster create <c…

【BFS染色问题】P1162填涂颜色例题+核心逻辑

文章目录 【算法思路】【代码示例】 BFS处理染色问题的核心逻辑 【算法思路】 要判断一个数字 0 是否在闭合圈内&#xff0c;可以换个角度思考。不在闭合圈内的 0 是可以从方阵的边界出发&#xff0c;通过上下左右移动&#xff0c;只经过其他 0 到达的。 思路①.我们可以从方…

用Deepseek写扫雷uniapp小游戏

扫雷作为Windows系统自带的经典小游戏&#xff0c;承载了许多人的童年回忆。本文将详细介绍如何使用Uniapp框架从零开始实现一个完整的扫雷游戏&#xff0c;包含核心算法、交互设计和状态管理。无论你是Uniapp初学者还是有一定经验的开发者&#xff0c;都能从本文中获得启发。 …

[思路提供]Mysql主从复制时的网络延迟很高,如何调整MySQL复制参数

在 MySQL 主从复制过程中&#xff0c;如果网络延迟很高&#xff0c;可以通过调整以下复制参数来优化数据同步&#xff1a; 增加复制并行度&#xff1a; slave_parallel_workers&#xff1a;从 MySQL 5.6 开始支持多线程复制&#xff0c;可将该值设置为大于 0 的值&#xff0c;根…

练习题:105

目录 Python题目 题目 题目分析 需求理解 关键知识点 实现思路分析 代码实现 代码解释 导入 random 模块&#xff1a; 定义列表&#xff1a; 随机选择元素&#xff1a; 打印结果&#xff1a; 运行思路 结束语 Python题目 题目 从一个列表中随机选择一个元素。 …