之后有时间 会给attention is all you need 这篇论文做一个pr应该还会结合hug_face的一些最近的其他热门论文 看之后的灵感吧 想到了就做Transformer之所以强大核心在于自注意力机制Self-Attention Mechanism 与并行计算的突破叠加多头注意力、残差连接层归一化、编码器-解码器架构、可扩展性等设计彻底解决传统序列模型痛点成为大模型基础1. 全局依赖捕捉自注意力机制让每个token直接关联序列中所有token无距离衰减轻松捕捉长距离语义依赖解决RNN/LSTM长序列信息丢失问题。2. 极致并行计算摒弃循环结构通过矩阵运算并行处理所有token充分利用GPU算力训练与推理速度大幅提升突破RNN串行瓶颈。3. 多维度特征提取多头注意力Multi-Head Attention并行捕捉语法、语义、逻辑等不同维度关联拼接后生成更丰富的特征表示。4. 深度堆叠能力残差连接Residual Connection缓解深层网络梯度消失层归一化Layer Normalization稳定训练支撑数百层网络与千亿级参数规模。5. 强扩展性与多模态适配编码器-解码器架构适配理解与生成任务支持大规模预训练微调范式可迁移至文本、图像、语音等多模态场景。一句话总结Transformer以自注意力为核心用并行计算提速、多头机制增维、残差LN稳训、预训练提能奠定大模型时代的技术根基。手写一个极简版Transformer的自注意力代码含QKV计算、多头拼接、残差LNTransformer自注意力实现PyTorch包含QKV计算、多头拆分/拼接、残差连接层归一化核心逻辑无冗余代码变量命名极简适配PyTorch常规使用场景import torchimport torch.nn as nnimport torch.nn.functional as Fclass MultiHeadAttention(nn.Module):def __init__(self, d_model, n_head):super().__init__()self.nh n_headself.dk d_model // n_head# 单线性层实现QKV并行计算避免三次重复定义self.qkv nn.Linear(d_model, 3 * d_model)# 输出投影层归一化残差适配self.proj nn.Linear(d_model, d_model)self.ln nn.LayerNorm(d_model)def forward(self, x):B, L, D x.shape # 批次/序列长度/模型维度# 1. 计算QKV并拆分 (B,L,3D) - (3,B,nh,L,dk)qkv self.qkv(x).reshape(B, L, 3, self.nh, self.dk).permute(2, 0, 3, 1, 4)q, k, v qkv[0], qkv[1], qkv[2]# 2. 缩放点积注意力 (B,nh,L,dk) (B,nh,dk,L) - (B,nh,L,L)attn (q k.transpose(-2, -1)) / torch.sqrt(torch.tensor(self.dk, dtypetorch.float32))attn F.softmax(attn, dim-1)# 3. 注意力加权多头拼接 (B,nh,L,L) (B,nh,L,dk) - (B,L,D)out (attn v).transpose(1, 2).reshape(B, L, D)out self.proj(out)# 4. 残差连接 层归一化Pre-LN风格Transformer标准return self.ln(x out)# 测试批次2序列长10模型维度5128头注意力if __name__ __main__:mha MultiHeadAttention(d_model512, n_head8)x torch.randn(2, 10, 512)out mha(x)print(out.shape) # 输出: torch.Size([2, 10, 512])核心设计点1. QKV并行计算单 nn.Linear(3*d_model) 替代3个线性层减少代码/参数冗余2. 张量维度极简操作一次 reshapepermute 完成QKV拆分避免多次循环/切片3. 多头拼接无冗余 transposereshape 直接还原模型维度无需额外拼接操作4. Pre-LN残差Transformer官方标准的层归一化在前残差连接一行实现核心范式5. 变量极简 nh(n_head) / dk(d_k) / B/L/D 等缩写保持代码紧凑且易读代码可直接作为Transformer编码器/解码器的自注意力模块无额外修改即可嵌入整体网络。