资讯详情

资讯详情

深入浅出Transformer的多头注意力机制:小白也能轻松掌握大模型核心技术!

本文深入探讨了Transformer的核心组件——多头注意力机制详细解析了其在编码器自注意力、解码器自注意力和编码器-解码器注意力中的应用。通过实例和图示阐述了多头注意力如何并行处理数据增强模型对序列信息的理解和处理能力。文章还介绍了影响数据维度的超参数如嵌入尺寸、查询尺寸和注意力头数量并解释了输入层和线性层的工作原理。最后总结了多头注意力如何促进更深层次的理解为读者提供了全面而清晰的Transformer学习指南。#01Transformer 中如何使用注意力机制编码器的自注意力输入序列对自己进行聚焦。解码器的自注意力目标序列对自己进行聚焦。解码器的编码器 - 解码器注意力目标序列关注输入序列。注意力机制的输入参数 —— 查询Query键Key和值Value注意力层通过三个参数接收输入查询Query键Key和值Value。这三个参数结构类似序列中的每个词条都通过一个向量来表示。编码器自注意力输入序列首先经过输入嵌入Input Embedding和位置编码Position Encoding处理为序列中的每个词条生成了包含意义和位置信息的编码表示。这些表示分别作为查询Query键Key和值Value的输入送入第一个编码器中的自注意力模块。自注意力模块基于这些输入为输入序列中的每个词条生成一个新的编码表示其中融合了相应的注意力得分。随着序列通过编码器堆栈每个编码器中的自注意力模块都会对词条表示进一步加入自己的注意力得分。解码器自注意力在解码器部分目标序列通过输出嵌入Output Embedding和位置编码Position Encoding处理后为每个词生成了既包含意义又包含位置信息的编码表示。这些表示作为查询Query键Key和值Value的输入送入第一个解码器的自注意力模块中。此模块针对目标序列中的每个词产生一个新的编码表示其中也融入了相应的注意力得分。通过层标准化Layer Norm处理后这些表示被用作第一个解码器中的编码器 - 解码器注意力的查询Query参数。编码器 - 解码器注意力同时堆栈中最后一个编码器的输出被送入编码器 - 解码器注意力的值Value和键Key参数中。因此编码器 - 解码器注意力同时获得了来自解码器自注意力的目标序列表示和来自编码器堆栈的输入序列表示。它进而产生了一种新的表示这种表示不仅包含了目标序列每个词的注意力得分也融合了来自输入序列的注意力得分。随着序列通过解码器堆栈每个自注意力和编码器 - 解码器注意力模块也会为每个词的表示增加自己的注意力得分。#02多头注意力在 Transformer 中注意力模块会并行地重复进行多次计算每一次计算都被称为一个 “注意力头”。注意力模块将查询Query键Key和值Value参数分成 N 个部分每部分独立通过一个注意力头进行处理。所有这些相似的注意力计算后来被合并形成最终的注意力得分。这种多头注意力机制赋予了 Transformer 强大的能力能够对每个词条编码多种关系和细微的差别。为了深入了解数据在 Transformer 内部是如何处理的我们不妨具体看一看在训练 Transformer 进行翻译时注意力模块是如何工作的。以我们的训练数据中的一个样本为例这个样本包括一个输入序列英文的 “You are welcome”和一个目标序列西班牙语的 “De nada”。#03注意力机制的关键超参数影响数据维度的有三个主要的超参数嵌入尺寸Embedding Size这是嵌入向量的宽度在我们的示例中为 6。这个维度在整个 Transformer 模型中保持一致有时也被称为 “模型尺寸”。查询尺寸Query Size与键Key和值Value的尺寸相同这是用于生成查询、键和值矩阵的三个线性层的权重尺寸在我们的示例中为 3。注意力头的数量在我们的示例中我们使用了 2 个注意力头。除此之外还有一个批量大小Batch size参数它表示样本的数量。#04输入层输入嵌入Input Embedding和位置编码Position Encoding层会生成一个形状为样本数量序列长度嵌入尺寸的矩阵。这个矩阵随后被送入堆栈中第一个编码器的查询Query键Key和值Value。为了简化展示我们在图示中将忽略批量尺寸专注于其它维度。#05线性层对于查询Query键Key和值Value有三个独立的线性层每个层都有自己的权重。输入数据通过这些线性层生成 Q查询K键和 V值矩阵。#06将数据分配到各个注意力头现在数据被分配到多个注意力头中使每个头可以独立处理数据。但需要理解的关键点是这种分配只是在逻辑上进行的。查询、键和值并不会物理上分割成为每个注意力头一个的独立矩阵。对于查询、键和值分别使用单一的数据矩阵其中每个注意力头逻辑上分配有矩阵的不同部分。同样也不存在为每个注意力头单独设置的线性层。所有的注意力头共享相同的线性层但只操作于数据矩阵的 “各自” 的逻辑部分。按注意力头逻辑划分线性层的权重通过在注意力头之间均匀分配输入数据和线性层权重可以完成这种逻辑分割。我们可以通过选择适当的查询尺寸来实现这一点查询尺寸 嵌入尺寸 / 注意力头的数量。在我们的例子里这就是为什么查询尺寸是 6 除以 2即 3 的原因。尽管层的权重和输入数据是一个整体的矩阵但我们可以想象它是每个注意力头的独立层权重 “组合在一起”。因此所有注意力头的计算可以通过一个矩阵运算来完成而无需多个独立的运算。这不仅使计算更高效还保持了模型的简洁性因为它减少了需要的线性层的数量同时依然实现了独立注意力头的强大功能。重塑 Q、K 和 V 矩阵线性层输出的 Q、K 和 V 矩阵被重新整形以包括一个明确的注意力头维度。现在每一块 “切片” 都对应着每个头的一个矩阵。接着这个矩阵通过交换头维度和序列维度再次进行重塑。虽然在图示中没有表示批量维度但 Q 的维度现在变成了Batch、Head、Sequence、Query size即批量、头、序列、查询尺寸。在下面的图示中我们可以看到我们示例中的 Q 矩阵在经过线性层处理后分割的整个过程。最后一个阶段主要用于可视化 —— 虽然 Q 矩阵是一个单一的矩阵但我们可以将它理解为每个注意力头逻辑上分开的 Q 矩阵。Q 矩阵划分为注意力头现在我们可以开始计算注意力得分了。#07为每个头计算注意力得分目前我们有了三个矩阵QK 和 V它们分布在不同的注意力头上。这些矩阵将被用于计算注意力得分。我们将展示单个注意力头的计算过程这里只涉及最后两个维度序列和查询尺寸而忽略前两个维度批量和头。从本质上讲我们可以想象我们正在观察的计算过程在每个头和批量中的每个样本上都在进行尽管实际上它们是作为一个整体的矩阵操作进行的而不是循环。第一步是进行 Q 和 K 矩阵之间的矩阵乘法。接着向结果中加入一个掩码值。在编码器的自注意力机制中这个掩码用于隐藏填充值确保它们不参与注意力得分的计算。在解码器的自注意力和编码器 - 解码器注意力中使用的掩码会有所不同我们稍后将在过程中讨论这一点。现在的结果通过除以查询尺寸的平方根来缩放然后应用 Softmax 函数。随后进行 Softmax 输出和 V 矩阵之间的另一次矩阵乘法。在编码器自注意力中完整的注意力得分计算过程如下所示#08将每个头的注意力得分合并现在我们得到了每个注意力头的独立注意力得分接下来需要将它们合并成一个统一的得分。这个合并操作实际上是分割操作的逆过程。这个过程通过重新调整结果矩阵的形状来消除头维度。具体步骤如下通过交换头维度和序列维度来重新调整注意力得分矩阵的形状。也就是说矩阵的形状从批量、头、序列、查询尺寸转变为批量、序列、头、查询尺寸。通过重塑为批量、序列、头 * 查询尺寸来折叠头维度从而有效地将每个头的注意力得分向量串联成一个整体的注意力得分。由于嵌入尺寸 头 * 查询尺寸因此合并后的得分维度为批量、序列、嵌入尺寸。在下图中我们可以看到示例得分矩阵的合并过程。#09端到端的多头注意力综合这些步骤我们得到了多头注意力机制的端到端流程。#10多头分割促进更深层次的理解嵌入向量用于捕捉单词的含义。在多头注意力机制中我们看到输入和目标序列的嵌入向量在逻辑上分布在多个头中。这意味着什么呢这意味着嵌入向量的不同部分可以学习每个单词的不同意义方面尤其是它与序列中其他单词的关联。这使得 Transformer 能够更丰富、更深入地解读序列。虽然这可能不是一个现实的例子但它有助于我们建立一种直觉。比如说嵌入向量的一个部分可能专注于捕捉名词的 “性别属性”如男性、女性、中性而另一个部分则可能关注名词的 “数目属性”如单数与复数。这在翻译过程中是重要的因为在很多语言中动词的使用取决于这些因素。#11解码器自注意力和掩蔽解码器自注意力的工作原理与编码器自注意力类似区别在于它作用于目标序列的每个单词上。同样掩蔽机制用于屏蔽目标序列中的填充词。#12编码器 - 解码器注意力和掩蔽编码器 - 解码器注意力从两个不同的来源接收输入。因此不同于编码器自注意力仅计算输入词汇间的相互作用以及解码器自注意力计算目标词汇间的相互作用编码器 - 解码器注意力是计算每个目标词汇与每个输入词汇之间的相互作用。因此在注意力得分结果中的每个单元都对应于一个 Q即目标序列中的单词与所有 K即输入序列中的单词和所有 V即输入序列中的单词之间的交互。同样掩蔽机制在目标输出中遮蔽了后续的单词这一点在本系列的第二篇文章中已经有了详细的解释。大模型的知识又多又杂到底怎么学做这行久了被问最多的问题就一个大模型的知识又多又杂我到底先学啥翻了一堆资料看啥都像重点结果啥都没学进去。今天把我自己一路摸出来的顺序捋一遍零基础、应届生、转行的都适用。跟着走至少方向不乱、不瞎忙学完拿得出手。第一阶段10天初阶应用这一阶段就一个目标把大模型真正玩明白不是只会聊天那种而是能调教它、能用代码把大模型和业务接起来。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用这阶段正式进实战目标很实在做出两个能拿出手的东西——一个私有知识库一个 agent 对话机器人。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…走完这 30 天Python 或 JavaScript 背景的基本能独立做一套 RAG 应用简历上也敢写大模型应用开发了。第三阶段约20天动手微调学到这你已经开始 “造” 模型了 —— 通过微调搞出垂直领域的专用小模型。为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你从 “只会用” 变成 “能造” 的 AI 小子。那么你还想往下探索吗想要入局AI大模型赛道、抢占行业红利的朋友微信扫描下方CSDN官方认证二维码即可100%免费领取全套学习资料第四阶段20天商业闭环部署落地技术学完落地才算数。这阶段带你搞明白大模型怎么真正跑起来、用起来。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…想要入坑大模型的朋友给大家准备了一份2026 年最新 AI 大模型全套学习资料1、大模型系统化学习路线2、大模型学习视频教程3、大模型学习书籍电子文档4、AI大模型最新行业报告5、大模型项目实战配套源码6、2026大模型大厂面试真题7、为什么要学习大模型我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年人才缺口已超百万凸显培养不足。随着AI技术飞速发展预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。8、适合谁学传统后端 / Java / 前端开发想转型 AI 应用大学生、应届生想拿更好的 offer产品经理、运营想武装职业竞争力技术负责人想给团队落地提效学习是反人性的但回报是真金白银。技术会更新赛道会切换但只要你先动手机会就永远站在你这边。9、这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。想要入局AI大模型赛道、抢占行业红利的朋友微信扫描下方CSDN官方认证二维码即可100%免费领取全套学习资料好了就写到这。路线是死的人是活的卡住了随时来问我。觉得有用就点个收藏别让它进收藏夹吃灰——动起来比啥都强。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →