news 2026/4/16 5:37:46

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/4/10 15:58:49

【紧急通知】Open-AutoGLM核心功能即将停用!只因缺少这个插件

第一章&#xff1a;【紧急通知】Open-AutoGLM核心功能即将停用&#xff01;只因缺少这个插件近日&#xff0c;Open-AutoGLM 项目团队发布紧急通告&#xff1a;自下个版本起&#xff0c;其核心自动化推理功能将被强制停用&#xff0c;原因竟是系统检测到关键依赖插件 GLM-Integr…

作者头像 李华
网站建设 2026/4/13 0:41:32

Open-AutoGLM应用避坑指南:90%新手都会犯的3个错误

第一章&#xff1a;Open-AutoGLM开源怎么运用Open-AutoGLM 是一个面向自动化生成语言模型任务的开源框架&#xff0c;支持任务编排、模型调度与结果评估一体化。通过该框架&#xff0c;开发者可以快速构建端到端的自然语言处理流水线。环境准备与项目克隆 使用 Open-AutoGLM 前…

作者头像 李华
网站建设 2026/4/10 11:45:57

java计算机毕业设计武器装备管理系统的设计与实现 智慧军营装备全生命周期管理平台 军用物资数字化调拨与维保系统

计算机毕业设计武器装备管理系统的设计与实现k47699 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。枪械、弹药、配件、防具……成千上万件装备堆在仓库&#xff0c;手工台账一翻…

作者头像 李华
网站建设 2026/4/14 23:56:26

为什么Open-AutoGLM正在悄悄暴露你的企业数据?(深度技术剖析)

第一章&#xff1a;Open-AutoGLM正在成为企业数据泄露的新入口 近年来&#xff0c;随着大语言模型在企业自动化场景中的深度集成&#xff0c;Open-AutoGLM这一开源自动代码生成框架因其高效的自然语言到代码转换能力而被广泛采用。然而&#xff0c;其开放性和灵活性也带来了严重…

作者头像 李华
网站建设 2026/4/13 22:24:07

汪喵灵灵荣获“兴智杯”全国AI创新应用大赛一等奖,彰显AI宠物医疗硬实力

2025年12月15日&#xff0c;由中国信息通信研究院、深圳市人工智能产业办公室等单位联合主办的第二届“兴智杯”全国人工智能创新应用大赛总决赛在深圳圆满落幕。在覆盖6000余支团队、1.8万余人参赛的顶级赛事中&#xff0c;专注于宠物医疗AI领域的汪喵灵灵凭借自研“百目魔君”…

作者头像 李华