news 2026/8/16 14:38: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/8/4 14:17:01

ISTA 1B标准深度解读:大件商品运输包装的“安全通行证”

做大件商品电商、工业设备外贸或大型家电供应链的朋友&#xff0c;大概率都踩过运输破损的坑——一台冰箱运输中磕碰掉漆&#xff0c;一台工业机床减震失效&#xff0c;轻则客户拒收索赔&#xff0c;重则直接造成几千上万元的损失。其实解决这个问题的关键&#xff0c;就是读懂…

作者头像 李华
网站建设 2026/8/8 8:24:32

【Open-AutoGLM高效开发秘籍】:不装这4个插件等于浪费80%性能

第一章&#xff1a;Open-AutoGLM性能瓶颈的根源剖析 在大规模语言模型推理系统中&#xff0c;Open-AutoGLM作为自动化生成与优化推理流程的核心组件&#xff0c;其性能表现直接影响整体系统的响应效率和吞吐能力。尽管架构设计上具备高度模块化与可扩展性&#xff0c;但在实际部…

作者头像 李华
网站建设 2026/8/14 8:08:11

时序数据库选型指南:如何为大数据场景选择合适的时序数据库

引言 在工业物联网、智能制造、能源管理等大数据场景中,时序数据呈现爆炸式增长。如何高效存储、管理和分析这些海量时序数据,成为企业数字化转型的关键挑战。选择一款合适的时序数据库,不仅关系到系统性能,更直接影响企业的存储成本和运维效率。本文将从技术选型的核心维度出…

作者头像 李华
网站建设 2026/8/13 20:44:20

终于有人把知识图谱+LLM融合讲明白了!

介绍 2025最新出版的《Knowledge Graphs and LLMs in Action》是一本关于人工智能技术融合的权威指南。全书聚焦知识图谱与大语言模型的协同应用&#xff0c;探索如何将知识图谱的结构化推理能力与大语言模型的自然语言理解能力结合&#xff0c;构建更强大、可靠且可解释的AI系…

作者头像 李华
网站建设 2026/7/30 22:51:13

为什么你的Open-AutoGLM在手机上跑不动?深度剖析部署失败的5大根源

第一章&#xff1a;为什么你的Open-AutoGLM在手机上跑不动&#xff1f;许多开发者尝试将开源大语言模型 Open-AutoGLM 部署到移动设备时&#xff0c;常常遇到运行失败、卡顿甚至闪退的问题。这并非代码本身存在缺陷&#xff0c;而是由移动设备的硬件限制与模型运行需求不匹配所…

作者头像 李华