【大模型基础_毛玉仁】1.3 基于Transformer 的语言模型


【大模型基础_毛玉仁】1.3 基于Transformer 的语言模型

    • 1.3 基于Transformer 的语言模型
      • 1.3.1 Transformer
        • 1)注意力层(AttentionLayer)
        • 2)全连接前馈层(Fully-connected Feedforwad Layer)
        • 3)层正则化(LayerNormalization)
        • 4)残差连接(Residual Connections)
        • 5)Transformer Encoder-Decoder 架构
      • 1.3.2 基于 Transformer 的语言模型
        • 1)训练语言模型
        • 2)训练 Transformer 语言模型:以“下一词预测”为例
        • 3)优缺点


1.3 基于Transformer 的语言模型

Transformer 是一类基于注意力机制(Attention)的模块化构建的神经网络结构。

  • 注意力机制:通过动态分配权重的方式,让模型能够聚焦于输入数据中最重要的部分。

给定一个序列,Transformer 将一定数量的历史状态和当前状态同时输入,然后进行加权相加。对历史状态和当前状态进行“通盘考虑”,然后对未来状态进行预测。

基于 Transformer 的语言模型,以词序列作为输入,基于一定长度的上文和当前词来预测下一个词出现的概率。


1.3.1 Transformer

Transformer 是由两种模块组合构建的模块化网络结构。分别为:

  • 注意力(Attention)模块:由自注意力层(Self-Attention Layer)、残差连接(Residual Connections) 和层正则化(Layer Normalization)组成。

  • 全连接前馈(Fully-connected Feedforwad)模块:由全连接前馈层,残差连接和层正则化组成。

图1.5: 注意力模块与全连接前馈模块
在这里插入图片描述

1)注意力层(AttentionLayer)

说明:

  • 注意力机制:通过动态分配权重的方式,让模型能够聚焦于输入数据中最重要的部分。

  • 归一化(Normalization):指将数据的范围或分布调整到一个特定的标准区间或分布,例如,将数据线性地映射到[0, 1]区间内。

注意力层采用加权平均的思想将前文信息叠加到当前状态上。

Transformer的注意力层将输入编码为query,key,value三部分,即将输入 { x 1 , x 2 , . . . , x t } \{x_1,x_2,...,x_t\} {x1,x2,...,xt}编码为 { ( q 1 , k 1 , v 1 ) , ( q 2 , k 2 , v 2 ) , . . . , ( q t , k t , v t ) } \{(q_1, k_1,v_1), (q_2,k_2,v_2),..., (q_t, k_t, v_t)\} {(q1,k1,v1),(q2,k2,v2),...,(qt,kt,vt)}

其中,query 和 key 用于计算自注意力的权重 α, value 是对输入的编码。具体的,

A t t e n t i o n ( x t ) = ∑ i = 1 t α t , i v i Attention(x_t) = \sum_{i=1}^{t} \alpha_{t,i} v_i Attention(xt)=i=1tαt,ivi

其中,

α t , i = s o f t m a x ( s i m ( x t , x i ) ) = s i m ( q t , k i ) ∑ i = 1 t s i m ( q t , k i ) \alpha_{t,i} = softmax(sim(x_t, x_i)) = \frac{sim(q_t, k_i)}{\sum_{i=1}^{t} sim(q_t, k_i)} αt,i=softmax(sim(xt,xi))=i=1tsim(qt,ki)sim(qt,ki)

其中,sim(·, ·) 用于度量两个输入之间的相关程度,softmax 函数用于对此相关程度进行归一化。此外,

q i = W q x i , k i = W k x i , v i = W v x i q_i = W_q x_i, \quad k_i = W_k x_i, \quad v_i = W_v x_i qi=Wqxi,ki=Wkxi,vi=Wvxi

其中, W q , W k , W v W_q, W_k, W_v Wq,Wk,Wv 分别为 query,key,value 编码器的参数。以包含三个元素的输 入 { x 1 , x 2 , x 3 } \{x_1, x_2, x_3\} {x1,x2,x3} 为例,Transformer 自注意力的实现图1.6所示。

图 1.6: 注意力机制示意图
在这里插入图片描述

2)全连接前馈层(Fully-connected Feedforwad Layer)

说明:

  • ReLU的定义:一种常用的激活函数。ReLU(x)=max(0,x)

全连接前馈层,可以看作是一种Key-Value模式的记忆存储管理模块。

全连接前馈层包含两层,两层之间由ReLU作为激活函数。

设全连接前馈层的输入为v,全连接前馈层可由下式表示:

F F N ( v ) = m a x ( 0 , W 1 v + b 1 ) W 2 + b 2 FFN(v) = max(0,W_1v +b_1)W_2 +b_2 FFN(v)=max(0,W1v+b1)W2+b2

其中, W 1 和 W 2 W_1和W_2 W1W2分别为第一层和第二层的权重参数, b 1 和 b 2 b_1和b_2 b1b2分别为第一层和第二层的偏置参数。

其中,第一层的可看作神经记忆中的key,而第二层可看作value。

3)层正则化(LayerNormalization)

说明:

层正则化:核心思想是对每一层的输入进行归一化,使其均值为0,方差为1。具体来说,对于输入 x=(x1​,x2​,…,xd​),层正则化的计算步骤如下:

  • (1)计算均值 μ 和方差 δ \delta δ
    μ = 1 d ∑ i = 1 d x i ; δ 2 = 1 d ∑ i = 1 d ( x i − μ ) 2 \mu = \frac{1}{d} \sum_{i=1}^{d} x_i;\delta^2 = \frac{1}{d} \sum_{i=1}^{d} (x_i - \mu)^2 μ=d1i=1dxi;δ2=d1i=1d(xiμ)2

  • (2)归一化:使用均值和方差对输入进行归一化:
    x ^ i = x i − μ δ 2 + ϵ \hat{x}_i = \frac{x_i - \mu}{\sqrt{\delta^2 + \epsilon}} x^i=δ2+ϵ xiμ
    ϵ 是个很小常数(如 1 0 − 5 10^{−5} 105),防止分母为零。

  • (3)缩放和平移:为保留模型表达能力,引入可学习参数 γ 和 β ,对归一化后的结果进行缩放和平移: y i = γ x ^ i + β y_i = \gamma \hat{x}_i + \beta yi=γx^i+β , 其中,γ 和 β 是模型参数,分别表示缩放因子和偏移量。

层正则化用以加速神经网络训练过程并取得更好的泛化性能。

设输入到层正则化层的向量为 v = { v i } i = 1 n v = \{v_i\}_{i=1}^n v={vi}i=1n。层正则化层将在 v 的每一维度 v_i 上都进行层正则化操作。具体地,层正则化操作可以表示为下列公式:

L N ( v i ) = α ( v i − μ ) δ + β LN(v_i) = \frac{\alpha(v_i - \mu)}{\delta} + \beta LN(vi)=δα(viμ)+β

其中,α 和 β 为可学习参数。µ 和 δ 分别是隐藏状态的均值和方差,可由下列公式分别计算。

μ = 1 n ∑ i = 1 n v i , δ = 1 n ∑ i = 1 n ( v i − μ ) 2 \mu = \frac{1}{n} \sum_{i=1}^{n} v_i, \quad \delta = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (v_i - \mu)^2} μ=n1i=1nvi,δ=n1i=1n(viμ)2

4)残差连接(Residual Connections)

说明:

残差连接:通过引入“跳跃连接”(skip connection),将输入直接传递到后面的层,使得网络可以学习输入与输出之间的残差(即差异),而不是直接学习输出。

具体来说,给定一个层的输入 x,传统的网络会学习一个映射 F(x),而残差连接则学习 F(x)+x。

在基本的 Transformer 编码模块中,包含两个残差连接。

  • 第一个残差连接:将自注意力层的输入由一条旁路叠加到自注意力层的输出上,然后输入给层正则化。

  • 第二个残差连接:将全连接前馈层的输入由一条旁路引到全连接前馈层的输出上,然后输入给层正则化。

引入残差连接可以有效解决梯度消失问题。

Pre-LN和Post-LN Transformer:

Post-LN Transformer:层正则化(Layer Normalization, LN)在残差连接之后。即 LayerNorm(F(x) + x)

  • 优点:抗表征坍塌更强;

  • 缺点:梯度消失问题更明显。

Pre-LN Transformer:层正则化(Layer Normalization, LN)在残差连接之前。即 F(LayerNorm(x)) + x

  • 优点:缓解梯度消失;

  • 缺点:抗表征坍塌较弱。

表征坍塌:是指网络深层输出的表征变得过于相似,导致模型性能下降。

梯度消失:指在反向传播过程中,梯度逐渐变小趋近于零,导致网络参数无法有效更新,训练过程停滞不前。

5)Transformer Encoder-Decoder 架构

原始的 Transformer 采用 Encoder-Decoder 架构,其包含 Encoder 和 Decoder 两 部分。这两部分都是由自注意力模块和全连接前馈模块重复连接构建而成。结构如图1.7所示。

图 1.7: Transfomer 结构示意图。
在这里插入图片描述

其中,

  • Encoder 部分:由六个级联的 encoder layer 组成,每个 encoder layer 包含一个注意力模块和一个全连接前馈模块。其中的注意力模块为自注意力模块(query,key,value 的输入是相同的)。

  • Decoder 部分:由六个级联的 decoder layer 组成,每个 decoder layer 包含两个注意力模块和一个全连接前馈模块。 其中,第一个注意力模块为自注意力模块,第二个注意力模块为交叉注意力模块 (query,key,value 的输入不同)。Decoder 中第一个 decoder layer 的自注意力模块的 输入为模型的输出。其后的 decoder layer 的自注意力模块的输入为上一个 decoder layer 的输出。Decoder 交叉注意力模块的输入分别是自注意力模块的输出(query) 和最后一个 encoder layer 的输出(key,value)。

Transformer 的 Encoder 和 Decoder 都可以单独用于构造语言模型,分别对应 Encoder-Only 模型和 Decoder-Only 模型。

上述训练过程结束之后,我们可以将Encoder的输出作为特征,然后应用这些 特征解决下游任务。


1.3.2 基于 Transformer 的语言模型

1)训练语言模型

在Transformer 的基础上,可以设计多种预训练任务来训练语言模型。例如,

  • 基于Encoder部分,结合“掩词补全”等任务来训练Encoder-Only语言模型,如BERT;

  • 应用Endcoder和Decoder部分,结合"截断补全"、"顺序恢复"等多个有监督和自监督任务来训练Encoder-Decoder 语言模型,如T5;

  • 应用Decoder部分, 利用“下一词预测”任务来训练Decoder-Only语言模型,如GPT-3。

2)训练 Transformer 语言模型:以“下一词预测”为例

以“下一词预测”为例,简单介绍训练 Transformer 语言模型的流程。

  • 对词序列 { w 1 , w 2 , w 3 , . . . , w N } \{w_1, w_2, w_3, ..., w_N\} {w1,w2,w3,...,wN},根据 { w 1 , w 2 , . . . , w i } \{w_1, w_2, ..., w_i\} {w1,w2,...,wi} 预测下一个词 w i + 1 w_{i+1} wi+1 出现的概率。

  • 设词典 D为 { w ^ 1 , w ^ 2 , . . . , w ^ ∣ D ∣ } \{\hat{w}_1, \hat{w}_2, ..., \hat{w}_{|D|}\} {w^1,w^2,...,w^D}。输出可表示为 o i = { o i [ w ^ d ] } d = 1 ∣ D ∣ o_i = \{o_i[\hat{w}_d]\}_{d=1}^{|D|} oi={oi[w^d]}d=1D o i [ w ^ d ] o_i[\hat{w}_d] oi[w^d] 表示词 w ^ d \hat{w}_d w^d 出现的概率。

  • 因此,词序列 { w 1 , w 2 , w 3 , . . . , w N } \{w_1, w_2, w_3, ..., w_N\} {w1,w2,w3,...,wN} 整体出现的概率的预测为:

P ( w 1 : N ) = ∏ i = 1 N − 1 P ( w i + 1 ∣ w 1 : i ) = ∏ i = 1 N o i [ w i + 1 ] P(w_{1:N}) = \prod_{i=1}^{N-1} P(w_{i+1}|w_{1:i}) = \prod_{i=1}^{N} o_i[w_{i+1}] P(w1:N)=i=1N1P(wi+1w1:i)=i=1Noi[wi+1]

  • 与训练RNN语言模型相同,Transformer语言模型也常用如下交叉熵函数作为损失函数。

l C E ( o i ) = − ∑ d = 1 ∣ D ∣ I ( w ^ d = w i + 1 ) log ⁡ o i [ w i + 1 ] = − log ⁡ o i [ w i + 1 ] l_{CE}(o_i) = -\sum_{d=1}^{|D|} I(\hat{w}_d = w_{i+1}) \log o_i[w_{i+1}] = -\log o_i[w_{i+1}] lCE(oi)=d=1DI(w^d=wi+1)logoi[wi+1]=logoi[wi+1]

  • 其中, I ( ⋅ ) I(\cdot) I() 为指示函数,当 w ^ d = w i + 1 \hat{w}_d = w_{i+1} w^d=wi+1 时等于 1,当 w ^ d ≠ w i + 1 \hat{w}_d \neq w_{i+1} w^d=wi+1 时等于 0。

  • 设训练集为 S,Transformer 语言模型的损失可以构造为:

L ( S , W ) = 1 N ∣ S ∣ ∑ s = 1 ∣ S ∣ ∑ i = 1 N l C E ( o i , s ) L(S, W) = \frac{1}{N|S|} \sum_{s=1}^{|S|} \sum_{i=1}^{N} l_{CE}(o_{i,s}) L(S,W)=NS1s=1Si=1NlCE(oi,s)

  • 其中, o i , s o_{i,s} oi,s 为Transformer 语言模型输入样本s的前i个词时的输出。

在此损失的基础上,构建计算图,进行反向传播,便可对Transformer语言模型进行训练。

针对以上说明的示例:

(1)序列概率的链式分解

P ( w 1 : N ) = ∏ i = 1 N − 1 P ( w i + 1 ∣ w 1 : i ) = ∏ i = 1 N o i [ w i + 1 ] P(w_{1:N}) = \prod_{i=1}^{N-1} P(w_{i+1}|w_{1:i}) = \prod_{i=1}^{N} o_i[w_{i+1}] P(w1:N)=i=1N1P(wi+1w1:i)=i=1Noi[wi+1]

含义:整个句子出现的概率等于逐步预测每个词的概率的乘积。
示例:句子“今天天气好”

  • 输入“今天” → 预测“天气”的概率为 o1​[天气]=0.6

  • 输入“今天天气” → 预测“好”的概率为 o2​[好]=0.7

  • 输入“今天天气好” → 预测结束符的概率为 o3​[结束符]=0.8

  • 整体概率:0.6×0.7×0.8=0.336

为什么是乘积:语言模型假设每个词的出现依赖前面所有词,根据概率链式法则,联合概率分解为条件概率的乘积。

(2)交叉熵损失

l C E ( o i ) = − ∑ d = 1 ∣ D ∣ I ( w ^ d = w i + 1 ) log ⁡ o i [ w i + 1 ] = − log ⁡ o i [ w i + 1 ] l_{CE}(o_i) = -\sum_{d=1}^{|D|} I(\hat{w}_d = w_{i+1}) \log o_i[w_{i+1}] = -\log o_i[w_{i+1}] lCE(oi)=d=1DI(w^d=wi+1)logoi[wi+1]=logoi[wi+1]

含义:衡量模型预测的概率分布与真实标签的差距。
示例:真实下一个词是“天气”,模型预测的概率分布为:

  • o_1​={今天:0.1,天气:0.6,好:0.2,结束符:0.1}

  • 指示函数 I(v_d​=天气):仅在“天气”位置为1,其他为0。

  • 交叉熵损失简化为:−log0.6≈0.51

为什么只取真实词的概率**:训练时,模型只需保证真实词的概率尽可能大**,其他词的错误预测会被自动惩罚。

(3)整体损失函数

L ( S , W ) = 1 N ∣ S ∣ ∑ s = 1 ∣ S ∣ ∑ i = 1 N l C E ( o i , s ) L(S, W) = \frac{1}{N|S|} \sum_{s=1}^{|S|} \sum_{i=1}^{N} l_{CE}(o_{i,s}) L(S,W)=NS1s=1Si=1NlCE(oi,s)

含义:所有训练样本的损失平均值。
示例:训练集包含2个句子(∣S∣=2),每个句子长度 N=3:

  • 句子1的损失:0.51+0.36+0.10=0.97

  • 句子2的损失:0.40+0.20+0.05=0.65

  • 总损失:(0.97+0.65)/(3×2)​≈0.27

为什么要除以 N∣S∣:平衡不同长度句子和数据集大小的影响,使损失值可比。

(4)直观理解训练过程

  • 目标:让模型输出的概率向量 oi​ 中,真实词的概率尽可能接近1

  • 反向传播:通过损失函数计算梯度,调整模型参数(如注意力权重、词嵌入)。

  • 推理:生成文本时,选择概率最高的词(或按概率采样),逐步扩展序列。

3)优缺点

此外,还可在“自回归”的范式下完成文本生成任务。与训练RNN语言模型一样,Transformer模型的预训练过程依然采用“TeacherForcing”的范式。

相较于RNN模型串行的循环迭代模式,Transformer并行输入的特性,使其容易进行并行计算。

但是,Transformer并行输入的范式也导致网络模型的规模随输入序列长度的增长而平方次增长。这为应用Transformer处理长序列带来挑战。

.


其他参考:【大模型基础_毛玉仁】系列文章


声明:资源可能存在第三方来源,若有侵权请联系删除!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/982017.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Beeline的使用和Hive JDBC

目录 1. 引言1.1 Hadoop1.2 HBase1.3 Hive 2. Beeline2.1 使用Beeline访问Hive2.1.1 通过beeline直接连接Hive2.1.2 先进入beeline客户端再连接Hive2.1.3 先进入beeline客户端再连接MySQL 2.2 Beeline命令 3. Hive JDBC3.1 pom.xml中依赖配置3.2 Util工具类3.3 代码3.4 结果 参…

分布式多卡训练(DDP)踩坑

多卡训练最近在跑yolov10版本的RT-DETR,用来进行目标检测。 单卡训练语句(正常运行): python main.py多卡训练语句: 需要通过torch.distributed.launch来启动,一般是单节点,其中CUDA_VISIBLE…

30秒从零搭建机器人管理系统(Trae)

1. 安装 [Trae官网】(https://www.trae.com.cn/) 2. 提示词 创建一个BS架构的机器人远程操控系统,具备机器人状态及位置实时更新,可以实现机器人远程遥控,可以对机器人工作日志进行统计分析,以及其它管理系统的常用功能3. 模型…

软考-数据库开发工程师-3.1-数据结构-线性结构

第3章内容比较多,内容考试分数占比较大,6分左右 线性表 1、线性表的定义 一个线性表是n个元素的有限序列(n≥0),通常表示为(a1,a2, a3,…an). 2、线性表的顺序存储(顺序表) 是指用一组地址连续的存储单元依次存储线性表中的数据元…

解锁数据潜能,永洪科技以数据之力简化中粮可口可乐决策之路

企业数字化转型是指企业利用数字技术和信息通信技术来改变自身的商业模式、流程和增值服务,以提高企业的竞争力和创新能力。数字化转型已经成为企业发展的重要战略,尤其在当前信息技术高速发展的时代。数字化转型还涉及到企业与消费者之间的互动和沟通。…

Vue 3 整合 WangEditor 富文本编辑器:从基础到高级实践

本文将详细介绍如何在 Vue 3 项目中集成 WangEditor 富文本编辑器,实现图文混排、自定义扩展等高阶功能。 一、为什么选择 WangEditor? 作为国内流行的开源富文本编辑器,WangEditor 具有以下优势: 轻量高效:压缩后仅…

游戏引擎学习第137天

演示资产系统中的一个 bug 我们留下了个问题,你现在可以看到,移动时它没有选择正确的资产。我们知道问题的原因,就在之前我就预见到这个问题会出现。问题是我们的标签系统没有处理周期性边界的匹配问题。当处理像角度这种周期性的标签时&…

监听 RabbitMQ 延时交换机的消息数、OpenFeign 路径参数传入斜杠无法正确转义

背景 【MQ】一套为海量消息和高并发热点消息,提供高可用精准延时服务的解决方案 我现在有一个需求,就是监听 RabbitMQ 一个延时交换机的消息数,而 RabbitTemplate 是不存在对应的方法来获取的。 而我们在 RabbitMQ 的控制台却可以发现延时交…

大数据学习(56)-Impala

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦&#x1f91…

开发环境搭建-01.前端环境搭建

一.整体结构 Nginx目录必须放在没有中文的目录中才能正常运行!!!

Redis 常见数据类型

官方文档 RedisCommands 1)Redis 的命令有上百个,如果纯靠死记硬背比较困难,但是如果理解 Redis 的一些机制,会发现这些命令有很强的通用性。 2)Redis 不是万金油,有些数据结构和命令必须在特定场景下使用…

Redis7——进阶篇(三)

前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 基础篇: Redis(一)Redis(二)Redis(三)Redis&#x…

云原生时代的技术桥梁

在数字化转型的大潮中,企业面临着数据孤岛、应用间集成复杂、高成本与低效率等问题。这些问题不仅阻碍了企业内部信息的流通和资源的共享,也影响了企业对外部市场变化的响应速度。当前,这一转型过程从IT角度来看,已然迈入云原生时…

ICLR 2025|香港浸会大学可信机器学习和推理课题组专场

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! AITIME 01 ICLR 2025预讲会团队专场 AITIME 02 专场信息 01 Noisy Test-Time Adaptation in Vision-Language Models 讲者:曹晨涛,HKBU TMLR Group一年级博士生,目前关注基础…

ProfibusDP主站转ModbusTCP网关如何进行数据互换

ProfibusDP主站转ModbusTCP网关如何进行数据互换 在现代工业自动化领域,通信协议的多样性和复杂性不断增加。Profibus DP作为一种经典的现场总线标准,广泛应用于工业控制网络中;而Modbus TCP作为基于以太网的通信协议,因其简单易…

016.3月夏令营:数理类

016.3月夏令营:数理类: 中国人民大学统计学院: http://www.eeban.com/forum.php?modviewthread&tid386109 北京大学化学学院第一轮: http://www.eeban.com/forum.php?m ... 6026&extrapage%3D1 香港大学化学系夏令营&a…

使用IDEA如何隐藏文件或文件夹

选择file -> settings 选择Editor -> File Types ->Ignored Files and Folders (忽略文件和目录) 点击号就可以指定想要隐藏的文件或文件夹

通过微步API接口对单个IP进行查询

import requests import json# 微步API的URL和你的API密钥 API_URL "https://api.threatbook.cn/v3/ip/query" API_KEY "***" # 替换为你的微步API密钥 def query_threatbook(ip):"""查询微步API接口,判断IP是否为可疑"…

第七节:基于Winform框架的串口助手小项目---协议解析《C#编程》

介绍 目标 代码实现 private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e){if (isRxShow false) return;// 1,需要读取有效的数据 BytesToReadbyte[] dataTemp new byte[serialPort1.BytesToRead];serialPort1.Read(dataTemp,0,dataTemp.Le…

关于tresos Studio(EB)的MCAL配置之GPT

概念 GPT,全称General Purpose Timer,就是个通用定时器,取的名字奇怪了点。定时器是一定要的,要么提供给BSW去使用,要么提供给OS去使用。 配置 General GptDeinitApi控制接口Gpt_DeInit是否启用 GptEnableDisable…