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

发布于:2025-03-06 ⋅ 阅读:(18) ⋅ 点赞:(0)


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处理长序列带来挑战。

.


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


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