news 2026/5/1 7:16:37

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/5/1 10:13:19

建议收藏!七款顶尖渗透测试工具全攻略,零基础从入门到精通,一篇吃透不踩坑

渗透测试工具是模拟对计算机系统、网络或 Web 应用程序的网络攻击的软件应用程序&#xff0c;它们的作用是在实际攻击者之前发现安全漏洞。它们可以作为系统的压力测试&#xff0c;揭示哪些区域可能会受到真正的威胁。 本文我将介绍七款最佳的渗透测试工具。 01 Kali Linux …

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

java计算机毕业设计物联网设备运维平台 智慧设备全生命周期运维系统 云端IoT设施智能维保平台

计算机毕业设计物联网设备运维平台lz8u79 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。传感器、网关、边缘盒子……成百上千台物联网设备散落在城市角落&#xff0c;传统“救火…

作者头像 李华
网站建设 2026/4/29 0:53:45

手搓 L2 级自动驾驶辅助 OpenPilot 移植指南,包括硬件适配与接口对接(CAN 总线接口适配)及相关代码实现

手搓 L2 级自动驾驶辅助 OpenPilot 移植指南,包括硬件适配与接口对接(CAN 总线接口适配)及相关代码实现(can_comm.py) 手搓L2级自动驾驶辅助:OpenPilot移植指南(含完整代码实现与函数解析) 一、核心前提:OpenPilot与L2级自动驾驶基础 1. 什么是OpenPilot? OpenPi…

作者头像 李华
网站建设 2026/4/30 21:46:08

基于springboot的火锅店管理系统

系统简介 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装火锅店管理系统软件来发挥其高效地信息处理的作用&#x…

作者头像 李华
网站建设 2026/4/27 19:54:42

DApp商城开发全指南:2025年技术架构、成本解析与跨链支付实战

引言&#xff1a;当电商遇见区块链&#xff0c;一场颠覆性的信任革命正在发生2025年&#xff0c;全球电商市场突破8万亿美元&#xff0c;但传统中心化平台的信任危机却愈演愈烈——平台抽成高达30%、假货溯源难、用户数据泄露事件频发……区块链技术的崛起&#xff0c;为电商行…

作者头像 李华
网站建设 2026/5/1 5:48:24

基于CANN的X光缺陷检测系统落地实践

在智能制造升级浪潮中&#xff0c;工业质检作为产品质量把控的关键环节&#xff0c;正面临人工检测效率低、漏检率高、成本攀升的痛点。某精密零部件制造企业的核心产线需对金属铸件进行X光缺陷检测&#xff0c;传统人工检测单件耗时超30秒&#xff0c;漏检率达8%以上&#xff…

作者头像 李华