动手实践
实现"Attention is all you need"
过年期间无聊,再次捡起博士时候做过一遍的transformer for quantitative finance,从零实现一遍并且记录下来,方便以后复习。
注:“Attention is all you need” 是一篇2017年发表的论文,提出了Transformer架构,该架构使用注意力机制替代了传统的循环神经网络(RNN),极大地推动了自然语言处理(NLP)的发展,是当前大语言模型(如GPT系列)的基础。
今天,我们来实现一个“全家桶”,从零开始拼装:
- 完整的Transformer架构
- 多头注意力机制
- 编码器-解码器结构
- 位置编码
所有代码都用干净、教育性的Python编写!这个实践活动将帮助你理解架构的内部复杂性。
它涵盖了:
- 字符级标记化,
- 带有旋转位置嵌入(RoPE)的多头自注意力,
- 使用多个专家MLP的稀疏路由,
- RMSNorm、残差连接和因果掩码,
- 最后,训练和生成。
让我们开始吧!
这是我们将逐步构建的完整Transformer模型!
注意以下关键组件:
- 编码器与解码器堆栈
- 多头注意力层
- 逐位置前馈网络
- 位置编码
这些是Transformer架构的关键构建块:编码器-解码器堆栈用于处理序列输入和输出,多头注意力层通过并行机制增强注意力表示,逐位置前馈网络在每个序列位置独立应用前馈神经网络,位置编码则为模型提供序列的顺序信息,以弥补自注意力机制的无序性。
现在我们来分解它们!
1️⃣ 两个主要组件:
- 编码器:处理输入序列(例如,英文句子)
- 解码器:生成输出序列(例如,西班牙语翻译)
该架构各有6个相同的块。
接下来,我们实现单个编码器/解码器块…
2️⃣ 编码器层:自注意力 + 前馈网络
每个编码器层有两个子层:
自注意力(Self-Attention)机制使模型能够根据序列中不同位置的重要性动态调整关注点,这对于处理如自然语言中的长距离依赖关系至关重要。前馈网络(FFN)是一个简单的神经网络层,通常包含非线性激活函数,用于对每个位置的表示进行独立变换,以增强模型的表达能力。
多头自注意力(处理输入序列)
多头自注意力机制是Transformer的关键组成部分,它通过并行多个注意力头来捕捉输入序列中不同位置间的复杂关系,常用于自然语言处理任务中。
位置前馈网络
位置前馈网络是一个全连接神经网络,独立应用于序列中的每个位置,用于进一步处理自注意力层的输出,引入非线性变换。
…每个子层周围都有残差连接和层归一化。
残差连接通过将输入直接加到输出上,有助于缓解深度网络中的梯度消失问题;层归一化则对每个样本的特征进行标准化,以稳定训练过程并加速收敛。
3️⃣ 解码器层:
解码器层包含三个子层:
- 掩码自注意力(无法看到未来标记)
- 编码器-解码器注意力(与编码器的交叉注意力)
- 位置前馈网络
生成就发生在这里!
编码器和解码器设置好后,让我们探索它们的子层,从多头注意力块开始。
掩码自注意力是解码器特有的设计,通过在自注意力计算中掩蔽未来位置的标记,确保生成过程是自回归的,即只能基于已生成的上下文预测下一个标记。编码器-解码器注意力(交叉注意力)使解码器能聚焦于编码器的输出表示,这对于需要跨序列信息整合的任务(如机器翻译)至关重要。多头注意力是Transformer的核心组件,通过并行多个注意力头来捕获输入的不同特征子空间,提升模型的表示能力。
如上所述,这些头是并行处理的,头数作为一个超参数。左侧是多头注意力模块的放大视图。
4️⃣ 多头注意力:并行处理
头数越多,意味着参数更多,学习模式的灵活性也更大,当然账单也更感人。
多头注意力机制允许模型同时关注输入序列的不同部分,通过多个独立的注意力头并行计算,从而提高表示能力。超参数是在训练前设定的,不直接从数据中学习,如这里的头数。
- 头 1:主语-动词关系
- 头 2:形容词-名词关系
- 头 3:长程依赖
…然后连接所有输出!
5️⃣ 核心:自注意力
这是该架构的关键亮点,公式看起来比实际简单。
长程依赖指的是在序列数据中,当前元素与远处元素之间的关联。在自然语言处理中,例如一个句子中的单词可能依赖于句子开头的单词,这种依赖关系对于理解上下文至关重要。Transformer模型通过自注意力机制来有效捕捉这些长程依赖。
著名的公式:Attention(Q,K,V) = softmax(QK^T / √d_k)V
- Q(查询):“我在寻找什么?”
- K(键):“有哪些信息可用?”
- V(值):“要返回什么信息?”
6️⃣ 前馈网络:思考层
在注意力机制之后,每个位置会独立进行处理!
注意:softmax函数是机器学习中常用的归一化函数,它将一组数值(如注意力得分)转换为概率分布,确保所有值的和为1,从而用于加权求和。√d_k中的d_k代表键向量的维度,除以√d_k是为了缩放点积结果,防止在计算梯度时出现数值不稳定(如梯度爆炸或消失),这是训练深度神经网络时的常见技巧。
FFN(x) = max(0, xW₁ + b₁)W₂ + b₂
简单但强大:
线性变换 → ReLU → 线性变换
ReLU(Rectified Linear Unit,整流线性单元)是一种常用的激活函数,它将负值置零,正值保持不变,有助于在神经网络中引入非线性,从而增强模型的表达能力。
7️⃣ 位置编码:教授位置信息
由于注意力机制本身没有顺序感,我们需要注入位置信息!
位置编码是Transformer架构中的一种技术,通过向输入嵌入向量添加与位置相关的编码,使模型能够感知序列中元素的位置顺序,以弥补自注意力机制对顺序信息的天然缺失。
它是通过使用正弦函数来实现的,为每个位置创建独特的模式!
最后,我们将所有这些整合到我们Transformer的前向传播中。
这是之前定义的主Transformer类的前向传播。
位置编码使用正弦函数来生成位置向量,这允许模型学习序列中的顺序信息,而不依赖于自注意力机制的固有特性。正弦函数因其周期性和平滑性,常用于构建位置嵌入,使模型能处理可变长度序列。
原始论文处理了序列到序列翻译任务,例如:
- 英语 ↔ 西班牙语翻译
- 英语 ↔ 德语翻译
我们简要看一下它在训练和推理阶段是如何工作的。
8️⃣ 训练
以英语↔西班牙语翻译为例:
序列到序列翻译是机器学习中一种常见任务,常用于机器翻译、文本摘要等场景,它将输入序列(如英文文本)转换为输出序列(如西班牙文文本)。Transformer模型通过自注意力机制有效处理变长序列,从而在这一任务中表现出色。
- 编码器编码英语句子。
- 解码器获取西班牙语目标,但该目标被右移(教师强迫)。
- 我们将预测与真实的西班牙语输出进行比较,使用交叉熵损失。
这就是为什么我们要右移,一种让模型学会“下一步该说什么”的经典操作。
教师强迫(teacher forcing):在训练序列生成模型(如解码器)时,一种常用的技巧,即在每个时间步将真实的目标序列(而不是模型自身的预测)作为输入,以提供更稳定的训练信号,加速模型收敛。
交叉熵损失(cross-entropy loss):一种用于衡量模型预测概率分布与真实概率分布之间差异的损失函数,常用于分类和序列生成任务中,优化模型使其预测更接近真实数据。
- 右移操作向解码器提供前一个正确的标记(例如,<开始> + 目标句[:-1]),以便专注于历史信息来预测下一个标记。
- 这允许自回归建模,即使用所有先前的标记来预测下一个标记,同时通过掩码并行训练所有位置。
自回归建模是一种序列生成方法,其中每个新标记的预测基于之前所有标记。掩码在Transformer解码器中用于确保在训练时,每个位置只能访问之前的标记,从而实现并行计算,同时保持自回归特性。
9️⃣ 推理:自回归生成
在推理阶段,我们逐步生成(自回归)!
编码器运行一次,解码器则需多次执行:
- 第一步: → “Hola”
- 第二步: , Hola → “mi”
- 以此类推…
每一步都依赖于先前的预测结果!
这便是从头开始实现该架构的方法。
希望这能帮助你更好地理解这个架构。
如果你有兴趣学习其他架构(如扩散模型)的具体实现,请通过回复告诉我们。
文章涵盖了以下主题:
- 字符级分词,
- 采用旋转位置嵌入(RoPE)的多头自注意力机制,
- 基于多专家多层感知机(MLP)的稀疏路由,
- RMSNorm、残差连接和因果掩码,
- 以及最终的训练与生成。
RoPE(旋转位置嵌入):一种在Transformer中编码序列位置信息的技术,通过旋转嵌入向量来增强模型对长距离依赖的捕捉能力。MLP(多层感知机):一种基础神经网络结构,由多个全连接层组成,常用于数据变换和非线性建模。RMSNorm:均方根归一化,一种替代传统层归一化的方法,计算更简单,有助于稳定训练过程。
普通人如何抓住AI大模型的风口?
领取方式在文末
为什么要学习大模型?
目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。
目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过30%。
随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:
人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!
最后
只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!
在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发
【附赠一节免费的直播讲座,技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等,欢迎大家~】
大模型全套学习资料展示
自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。
希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!
01教学内容
从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!
大量真实项目案例:带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
02适学人群
应届毕业生:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
vx扫描下方二维码即可
【附赠一节免费的直播讲座,技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等,欢迎大家~】
本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!
03入门到进阶学习路线图
大模型学习路线图,整体分为5个大的阶段:
04视频和书籍PDF合集
从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)
新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)
05行业报告+白皮书合集
收集70+报告与白皮书,了解行业最新动态!
0690+份面试题/经验
AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)
07 deepseek部署包+技巧大全
由于篇幅有限
只展示部分资料
并且还在持续更新中…
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发
【附赠一节免费的直播讲座,技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等,欢迎大家~】