news 2026/6/25 16:40:02

AI全景之第六章第二节:Transformer架构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI全景之第六章第二节:Transformer架构

第六章:自然语言处理技术全景

6.2 Transformer架构在NLP中的关键改进

学习目标

深入理解Transformer架构在自然语言处理中的核心改进点,掌握位置编码、注意力机制、训练优化等关键技术的发展脉络,了解如何针对不同NLP任务优化Transformer架构,并能够根据实际需求选择合适的变体。


一、位置编码系统的演进

1.1 绝对位置编码的局限性与改进

正弦位置编码的问题分析

原始Transformer的正弦位置编码存在三大局限:

  1. 长度外推性差:训练时固定最大长度,测试时难以处理更长序列

    # 训练时位置索引最大512pos=torch.arange(512)# [0, 1, ..., 511]# 测试时遇到513长度序列,sin(512/10000^0)未在训练中出现
  2. 高频振荡问题:高维度位置编码振荡过快,影响模型学习

    维度i=0: sin(pos/10000^0) = sin(pos) # 周期2π ≈ 6.28 维度i=256: sin(pos/10000^(512/512)) = sin(pos/10000) # 周期62800
  3. 绝对位置偏差:相对位置关系需要模型自行从绝对位置推断

学习式位置编码

将位置编码作为可学习参数:

classLearnedPositionalEncoding(nn.Module):def__init__(self,max_len,d_model):super().__init__()self.pe=nn.Parameter(torch.zeros(1,max_len,d_model))nn.init.trunc_normal_(self.pe,std=0.02)defforward(self,x):returnx+self.pe[:,:x.size(1),:]

优势:更灵活,适应任务特性
劣势:无法外推到训练未见长度,需预设最大长度

相对位置编码的革命
T5的相对位置偏置

T5模型将相对距离分桶,每个桶学习一个偏置标量:

classT5RelativePositionBias(nn.Module):def__init__(self,num_buckets=32,max_distance=128,num_heads=12):super().__init__()self.num_buckets=num_buckets self.max_distance=max_distance self.relative_attention_bias=nn.Embedding(num_buckets,num_heads)def_relative_position_bucket(self,relative_position):# 将相对距离映射到桶索引ret=0n=-relative_positionifrelative_position>0:ret=self.num_buckets//2else:n=-relative_position max_exact=self.num_buckets//4is_small=n<max_exactifis_small:ret+=nelse:# 对数分桶ret+=max_exact+(torch.log(n.float()/max_exact)/math.log(self.max_distance/max_exact)*(self.num_buckets-max_exact)).long()returnretdefforward(self,query_length,key_length):# 计算相对位置矩阵context_position=torch.arange(query_length)[:,None]memory_position=torch.arange(key_length)[None,:]relative_position=memory_position-context_position# 映射到桶索引rp_bucket=self._relative_position_bucket(relative_position)values=self.relative_attention_bias(rp_bucket)values=values.permute([2,0,1]).unsqueeze(0)returnvalues

设计特点

  1. 对数分桶:近处精确,远处粗略
  2. 双向对称:区分前后方向
  3. 参数量少:仅需num_buckets × num_heads个参数
DeBERTa的分离式注意力

DeBERTa将内容和位置信息分离计算:
[
\begin{aligned}
&Q_c = HW_q, \quad K_c = HW_k, \quad V_c = HW_v \
&Q_r = P_rW_{q,r}, \quad K_r = P_rW_{k,r} \
&A_{i,j} &= Q_c_i K_c_j^\top + Q_c_i K_r_{\delta(i,j)}^\top + Q_r_{\delta(i,j)} K_c_j^\top
\end{aligned}
]
其中δ(i,j)\delta(i,j)δ(i,j)表示相对位置编码。

1.2 旋转位置编码(RoPE):理论优美的解决方案

复数空间旋转的直观理解

将词嵌入向量视为复数空间中的向量,通过旋转操作注入位置信息:

二维情况
给定位置mmm的词嵌入向量[x1,x2][x_1, x_2][x1,x2],旋转编码为:
[
\begin{bmatrix}
x_1’ \ x_2’
\end{bmatrix}

\begin{bmatrix}
\cos m\theta & -\sin m\theta \
\sin m\theta & \cos m\theta
\end{bmatrix}
\begin{bmatrix}
x_1 \ x_2
\end{bmatrix}
]

RoPE的完整数学形式

对于ddd维向量,将其分成d/2d/2d/2组,每组应用不同频率的旋转:
[
f_{\text{RoPE}}(x, m) =
\begin{pmatrix}
x_1 \ x_2 \ x_3 \ x_4 \ \vdots \ x_{d-1} \ x_d
\end{pmatrix}
\otimes
\begin{pmatrix}
\cos m\theta_1 \ \cos m\theta_1 \ \cos m\theta_2 \ \cos m\theta_2 \ \vdots \ \cos m\theta_{d/2} \ \cos m\theta_{d/2}
\end{pmatrix}
+
\begin{pmatrix}
-x_2 \ x_1 \ -x_4 \ x_3 \ \vdots \ -x_d \ x_{d-1}
\end{pmatrix}
\otimes
\begin{pmatrix}
\sin m\theta_1 \ \sin m\theta_1 \ \sin m\theta_2 \ \sin m\theta_2 \ \vdots \ \sin m\theta_{d/2} \ \sin m\theta_{d/2}
\end{pmatrix}
]

RoPE的关键特性
  1. 相对位置保持:两个向量的点积只与相对位置有关
    [
    f_{\text{RoPE}}(q, m)^\top f_{\text{RoPE}}(k, n) = g(q, k, m-n)
    ]
  2. 长度外推性:可处理任意长度序列
  3. 线性注意力兼容:可与线性注意力结合
RoPE的实践实现
importtorchdefapply_rotary_pos_emb(q,k,cos,sin,position_ids):"""应用旋转位置编码"""# q, k: [batch_size, seq_len, num_heads, head_dim]# cos, sin: [seq_len, head_dim]# 将q和k的前半部分和后半部分分离q_embed=(q*cos)+(rotate_half(q)*sin)k_embed=(k*cos)+(rotate_half(k)*sin)returnq_embed,k_embeddefrotate_half(x):"""旋转一半维度:将[x1, x2, ..., xd]变为[-x2, x1, ..., -xd, x_{d-1}]"""x1=x[...,:x.shape[-1]//2]x2=x[...,x.shape[-1]//2:]returntorch.cat([-x2,x1],dim=-1)defprecompute_freqs_cis(dim:int,end:int,theta:float=10000.0):"""预计算旋转频率"""freqs=1.0/(theta**(torch.arange(0,dim,2)[:(dim//2)].float()/dim))t=torch.arange(end)freqs=torch.outer(t,freqs)# [seq_len, dim//2]# 转换为复数形式freqs_cis=torch.polar(torch.ones_like(freqs),freqs)# e^(i*theta)returntorch.view_as_real(freqs_cis)# [seq_len, dim//2, 2]

1.3 ALiBi:线性偏置的简洁之美

ALiBi的核心思想

在注意力分数上添加与距离成线性关系的负偏置:
[
\text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}} + m \cdot \text{bias}\right)V
]
其中bias\text{bias}bias是一个下三角矩阵,mmm是头特定的斜率。

偏置矩阵设计
defget_alibi_mask(n_heads,max_len):"""生成ALiBi偏置矩阵"""slopes=torch.tensor(get_slopes(n_heads))# 不同头的斜率bias=torch.arange(max_len).view(1,1,max_len)-torch.arange(max_len).view(1,max_len,1)bias=-torch.abs(bias)# 距离越远,偏置越负# 每个头乘以不同的斜率bias=bias.unsqueeze(0)*slopes.view(
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/17 4:22:11

必看!2026转行网络安全:薪资水平、工作内容与行业前景全解析

如果你计划在2026年转行到网络安全领域&#xff0c;以下是一些建议&#xff0c;可以帮助你顺利过渡并打下坚实的基础 1、薪资情况 初级职位&#xff08;0-3年经验&#xff09; 薪资范围&#xff1a;大约 8k-15k/月&#xff08;根据地区、公司规模和工作内容有所不同&#xff…

作者头像 李华
网站建设 2026/6/22 1:26:41

基于springboot的疫情期间高校人员管理系统论文

系统简介 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&#xff0c;让整个世界都可以即时…

作者头像 李华
网站建设 2026/6/18 0:46:22

支持无数次撤消/重做功能的测试策略与实践

在现代软件应用中&#xff0c;“撤消&#xff08;Undo&#xff09;”和“重做&#xff08;Redo&#xff09;”功能已成为提升用户体验的重要交互机制。尤其在图形编辑器、文档处理工具、绘图软件等场景中&#xff0c;用户期望可以无限制地进行撤消与重做操作。然而&#xff0c;…

作者头像 李华
网站建设 2026/6/23 14:54:06

基于springboot的旅游管理系统

系统简介 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本旅游管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助使用者在短时间内处理完毕庞大的数据信息&…

作者头像 李华
网站建设 2026/6/16 19:13:06

Java毕设选题推荐:基于SpringBoot的网球馆管理系统的设计与实现;教练课程安排场地预约调度【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华