ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

全面指南!掰细了讲Transformer模型各个组件和数据流动过程,建议收藏!!

全面指南!掰细了讲Transformer模型各个组件和数据流动过程,建议收藏!! 导读最近 Transformer 模型可太火了它作为 GPT 中的 “T”无疑是当下人工智能领域的核心技术甚至堪称 21 世纪最伟大发明的有力候选者。你是不是也常听到它的大名却对其原理一知半解本文是一篇关于Transformer模型的详细解析作者通过实际操作和代码追踪深入探讨了Transformer模型的工作原理特别是其在训练和文本生成中的具体机制。Transformer模型是由谷歌的一个团队发明的当时他们致力于自动翻译研究比如将英语翻译成德语。2017年该模型在如今大名鼎鼎的论文《Attention Is All You Need》中首次亮相。在深入 Transformer 模型的细节之前咱们得先搞清楚一些基础概念。词元化Tokenization词元化就像是把句子拆分成一个个小零件。比如 “我喜欢苹果”经过词元化可能就变成了 [“我”, “喜欢”, “苹果”]。在 Transformer 模型处理文本时首先就要把输入的文本进行词元化每个词元都被赋予一个唯一的编号这样计算机就能 “读懂” 文本啦。嵌入Embedding这一步就像是给每个词元打造一张专属 “身份证”。把词元编号转化为一个固定长度的向量这个向量里包含了词元的各种语义信息。比如 “苹果” 这个词元经过嵌入后会变成一个像 [0.2, 0.5, -0.3, 0.1] 这样的向量向量中的每个数值都承载着特定的意义让模型能更好地理解和处理词元之间的关系。注意力机制Attention Mechanism注意力机制是 Transformer 模型的核心亮点。简单来说它让模型在处理文本时能像人阅读一样重点关注某些部分。比如读到 “小明在公园里喂鸽子它们吃得很开心”模型能通过注意力机制把 “小明” 和 “鸽子” 联系起来理解是小明喂鸽子鸽子吃得开心而不是其他混乱的关系。这样模型就能更准确地捕捉文本中的语义信息提高处理效果。整体架构概览Transformer 模型采用了编码器 - 解码器Encoder - Decoder架构就像两个配合默契的小伙伴。编码器负责把输入的文本 “消化” 成一种抽象的表示这种表示包含了文本的关键信息解码器则根据编码器的输出一个词元一个词元地生成目标文本。编码器Encoder详解多头注意力模块Multi - Head Attention这是编码器的 “智慧大脑”。它把嵌入后的向量分成多个 “小份”也就是多个头head每个头都独立地计算注意力。假设向量大小是 512有 8 个注意力头那么每个头处理的向量大小就是 64。不同的头可以关注文本的不同方面有的头可能更关注主语和谓语的关系有的头则对时间地点等信息更敏感。最后再把各个头的结果拼接起来这样就能更全面地捕捉文本信息啦。前馈网络Feed - Forward Network这是一个对每个位置独立进行操作的模块。它先把每个位置的向量从 8 个元素扩展到 32 个在基础模型中是从 512 扩展到 2048经过 ReLU 函数激活ReLU 函数会把负数变成 0正数保持不变再把向量变回 8 个元素基础模型变回 512。虽然操作看起来简单但这里面包含了大量的参数模型的很多 “学习成果” 都体现在这里呢。Add Norm这个模块起到了 “平衡器” 的作用。它先把多头注意力模块或前馈网络的输出与输入相加这样可以保留原始输入的一些信息避免在处理过程中丢失关键内容然后进行归一化操作把数据的分布调整到一个合适的范围让模型训练更加稳定。解码器Decoder详解掩码多头注意力模块Masked Multi - Head Attention解码器中的这个模块和编码器的多头注意力模块类似但多了一个 “掩码” 操作。训练时模型不能 “偷看” 后面的词元信息掩码就像是给模型戴上了一副 “眼罩”遮住了不该看的部分。比如模型在预测 “我喜欢苹果” 中的 “苹果” 时不能直接看到 “苹果” 这个词只能根据前面的 “我喜欢” 来预测这样就能保证模型真正在学习如何根据上下文进行预测。第二个多头注意力模块这个模块的输入比较特殊V 和 K 来自编码器的输出携带了源文本的信息Q 则来自解码器上一个位置的输出。通过这个模块解码器能把源文本信息和已经生成的部分译文信息结合起来更好地预测下一个词元。输出层Output Layer经过前面一系列的处理解码器最后通过一个线性变换和 Softmax 函数把输出转化为词汇表上每个词元的概率分布。模型会选择概率最高的词元作为预测结果逐步生成完整的译文。整体流程详解本文构建一个小型的Transformer模型并使用PyTorch进行实现和训练来深入理解模型的各个组件和数据流动过程。例如训练完成后“dog run” 应该输出 “dog run”。展示训练模型复制标记的示例包括训练数据、词汇表、张量维度等信息换句话说此处插入图进一步说明训练时输入和预测的标记以及防止模型 “作弊” 的情况这里尝试用文字解释一下目前图表中紫色标注的张量维度的含义此处插入图详细解释张量维度的含义如批次大小、序列长度、词汇表大小等超参数之一是 在论文的基础模型中它的值为512。在这个示例中本文将其设为8。这意味着我们的嵌入向量embedding vectors长度为8。下面是再次展示的主图表很多地方都标注了维度此处插入图标注了更多维度信息的Transformer模型架构图涵盖编码器、解码器、注意力模块等部分让我们放大看看编码器的输入此处插入图展示编码器输入的张量及相关解释包括位置编码对嵌入向量的影响图表中大多数模块如Add Norm、Feed Forward、最后的线性变换都只对最后一个维度即8进行操作。如果只是这样模型就只能利用序列中单个位置的信息来预测单个位置。模型肯定在某个地方对不同位置的信息进行了 “融合”而这个神奇的操作就发生在多头注意力模块中。让我们放大看看编码器中的多头注意力模块。在接下来的图表中请记住在我的示例中我将超参数 头的数量设为2论文基础模型中是8。此处插入图标注了作者注释的多头注意力模块图展示了线性变换、拼接、缩放点积注意力等操作及张量维度变化(2,3,8) 是如何变成 (2,2,3,4) 的呢我们先进行了一次线性变换然后将结果按照头的数量进行拆分8÷2 4并重新排列张量维度使第二个维度变成头的维度。让我们看看实际的张量此处插入图展示多头注意力模块中输入张量V、K、Q的具体数值解释它们之间的关系及维度变化原因我们还没有进行任何跨位置信息融合的操作这将在接下来的缩放点积注意力模块中实现。“4” 维度和 “3” 维度最终会相互作用。此处插入图标注了作者注释的缩放点积注意力模块图展示了矩阵乘法、SoftMax、掩码可选、缩放等操作及张量维度变化让我们看看张量但为了便于理解我们只看批次中的第一个元素和第一个头即Q[0,0]、K[0,0] 等。其他三个元素也会进行相同的操作。让我们看看SoftMax输出和V之间的最后一次矩阵乘法此处插入图展示缩放点积注意力模块中最后一次矩阵乘法的计算过程及结果说明其对不同位置信息的融合作用从最开始梳理可以发现在这次乘法之前V中三个位置的元素一直回溯到原始句子 “dog run”都只是独立进行操作。这次乘法首次融合了其他位置的信息。回到多头注意力模块的图表我们可以看到拼接操作将每个头的输出重新组合在一起这样每个位置现在都由一个长度为8的向量表示。注意拼接后、线性变换前的张量中的1.8和 -1.1与上面缩放点积注意力模块输出中批次中第一个元素的第一个头的第一个位置向量的前两个元素1.8和 -1.1相匹配接下来的两个数字也匹配只是被省略号隐藏了。此处插入图再次展示多头注意力模块图突出拼接前后张量数值的对应关系现在让我们把视角放大到整个编码器此处插入图展示整个编码器的输入、输出及中间操作的张量包括位置编码、多头注意力、前馈网络等部分起初本想详细追踪前馈网络模块。论文中它被称为 “逐位置前馈网络position-wise feed-forward network”我原以为这意味着它可能会将一个位置的信息传递到右侧的位置。但并非如此“逐位置” 意味着它对每个位置独立进行操作。在我们的小示例中它对每个位置进行一次线性变换将8个元素转换为32个应用ReLU函数取0和该数中的较大值然后再进行一次线性变换变回8个元素。在论文的基础模型中是从512转换为2048再变回512。这里有很多参数很可能模型的大部分学习过程都发生在这里前馈网络的输出维度又变回了(2,3,8)。暂时抛开我们的简易模型看看论文基础模型中的编码器是什么样的。输入和输出维度相匹配这一点非常好此处插入图展示论文基础模型中编码器的架构包含多个编码器层输入和输出维度均为(batch size, sequence length, 512)现在让我们把视角拉到最大看看解码器。此处插入图展示Transformer模型架构图重点突出解码器部分包括掩码多头注意力模块、第二个多头注意力模块及相关输入输出张量解码器部分的大部分内容与我们刚刚看过的编码器部分非常相似所以不需要详细追踪。不过我标记为A和B的部分有所不同。A部分不同是因为我们使用了掩码多头注意力机制训练时防止 “作弊” 的关键肯定就在这里。B部分我们稍后再看。但首先我们先忽略内部细节记住我们希望从解码器得到什么结果。此处插入图简化后的解码器示意图突出输入信息和预测目标强调训练时防止模型 “作弊” 的原理为了更深入理解这一点假设我们的英语句子是 “she pet the dog”翻译成猪拉丁语Pig Latin是 “eshay etpay ethay ogday”。如果模型已经有了 “eshay etpay ethay”并尝试预测下一个单词“ogday” 和 “atcay” 都是概率较高的选择。结合 “she pet the dog” 这个完整英语句子的上下文模型应该能够选择 “ogday”。然而如果模型在训练时能看到 “ogday”它就不需要学习如何利用上下文进行预测只需学会复制即可。让我们看看掩码是如何起作用的。我们可以跳过前面一部分因为A部分的开头与之前的操作完全相同都是应用线性变换并将数据拆分成头。唯一的区别是进入缩放点积注意力部分的维度是(2,2,2,4)而不是(2,2,3,4)因为我们的原始输入序列长度为2。这是缩放点积注意力部分。和编码器部分一样我们只看批次中的第一个元素和第一个头。此处插入图详细展示解码器中掩码多头注意力模块的缩放点积注意力部分的计算过程包括掩码的应用及对结果的影响这次我们有一个掩码。让我们看看SoftMax输出和V之间的最后一次矩阵乘法此处插入图展示掩码多头注意力模块中最后一次矩阵乘法的结果突出掩码对信息传递的限制作用注意第一个矩阵右上角的0.0它来自掩码。现在当我们进行乘法运算类似于求加权平均值时输出的第一个位置就无法从第二个位置获取任何信息但第二个位置可以从第一个和第二个位置获取信息。如果我们的序列更长SoftMax输出的矩阵可能是这样的[[#,0,0,0], [#,#,0,0], [#,#,#,0], [#,#,#,#]]现在我们来看看B部分即解码器中的第二个多头注意力模块。与其他两个多头注意力模块不同这里输入的不是三个相同的张量所以我们需要弄清楚哪个是V、哪个是K、哪个是Q。我用红色标注了输入。可以看到V和K来自编码器的输出维度是(2,3,8)Q的维度是(2,2,8)。此处插入图展示解码器中第二个多头注意力模块的输入及相关张量维度和之前一样我们直接跳到缩放点积注意力部分。V和K的维度是(2,2,3,4)批次中有两个元素、两个头、三个位置、向量长度为4Q的维度是(2,2,2,4)这虽然能说得通但也有点让人困惑。此处插入图展示解码器中第二个多头注意力模块的缩放点积注意力部分的计算过程及张量维度变化尽管我们是从编码器输出中 “读取” 信息而编码器输出的 “序列” 长度为3但经过一系列矩阵运算最终得到了我们想要的维度(2,2,2,4)。让我们看看最后一次矩阵乘法此处插入图展示解码器中第二个多头注意力模块最后一次矩阵乘法的结果解释输出向量与编码器输出向量之间的关系每个多头注意力模块的输出会相加在一起。我们直接跳到解码器的输出部分看看如何将其转换为预测结果此处插入图展示解码器输出经过线性变换、SoftMax等操作后得到预测概率的过程以及与标签对比计算损失的相关信息线性变换将我们从(2,2,8) 的维度转换到(2,2,5)。可以把这看作是嵌入的逆过程只不过不是从长度为8的向量转换为单个标记的整数标识符而是转换为在包含5个标记的词汇表上的概率分布。在我们的小示例中这些数字可能看起来有点奇怪。在论文中当进行英语到德语的翻译时更像是从大小为512的向量转换到包含37000个词的词汇表。马上我们就要计算损失了。不过即便只是匆匆一瞥你也能大致了解模型的表现。此处插入图展示预测概率和标签的对比直观呈现模型预测的正确与否模型只预测对了一个标记这并不奇怪因为这是我们的第一个训练批次所有结果都只是随机的。这个图表的好处在于它清晰地表明这是一个多分类问题。类别就是词汇表中的单词在这个例子中有5个类别。这也是我之前感到困惑的地方我们是对翻译句子中的每个标记进行预测并打分而不是对整个句子进行一次预测。让我们来实际计算一下损失。此处插入图展示损失计算的具体过程以交叉熵为例例如如果 -3.2 变成了 -2.2我们的损失就会降到5.7朝着我们期望的方向下降因为我们希望模型学习到第一个标记的正确预测是4。上面的图表没有展示标签平滑label smoothing的过程。在实际的论文中损失计算使用了标签平滑并采用KL散度损失。我认为在没有平滑的情况下它与交叉熵损失是相同或相似的。下面是同样的图表但包含了标签平滑的过程。此处插入图展示包含标签平滑的损失计算图表解释其原理和作用让我们快速看一下编码器和解码器中学习的参数数量此处插入图展示计算编码器和解码器中参数数量的相关信息以简易模型为例说明计算方法作为一个合理性检查在我们的简易模型中前馈网络模块有一次从8到32再回到8的线性变换如上文所述所以参数数量为8×32权重 32偏置 32×8权重 8偏置 52。请记住在论文的基础模型中 为512 为2048并且有6个编码器层和6个解码器层参数数量会多得多。使用训练好的模型现在让我们看看如何输入源语言文本并得到翻译后的文本。这里我仍然使用一个简易模型这个模型经过训练可以通过复制标记来 “翻译”。不过与上面的示例不同这个模型的词汇表大小为11 为512上面的示例中词汇表大小为5 为8。首先进行一次翻译然后看看它是如何工作的。此处插入图展示输入源句子和得到的 “翻译” 句子标注出翻译错误的位置第一步是将源句子输入到编码器中并保留其输出在这个例子中输出是一个维度为(1, 10, 512) 的张量。此处插入图展示源句子输入编码器的过程及编码器输出张量的维度第二步是将输出的第一个标记输入到解码器中并预测第二个标记。我们知道第一个标记总是等于1。此处插入图展示第一个标记输入解码器后经过一系列操作得到预测概率的过程包括SoftMax、线性变换等在论文中他们使用束搜索beam search束宽为4这意味着在这一步我们会考虑概率最高的4个标记。为了简化操作我将使用贪心搜索greedy search。你可以把它看作是束宽为1的束搜索。从图表顶部读取概率最高的标记是5上面的输出是概率的对数概率最高的仍然是数值最大的那个。在这个例子中是 -0.0实际上是 -0.004但我只保留一位小数。模型非常确定5是正确的exp(-0.004) 99.6%。现在我们将[1,5] 输入到解码器中如果我们使用束宽为2的束搜索我们可以输入一个包含[1,5] 和[1,4] 的批次[1,4] 是下一个最有可能的结果。此处插入图展示[1,5] 输入解码器后经过一系列操作得到预测概率的过程现在我们输入[1,5,4]此处插入图展示[1,5,4] 输入解码器后经过一系列操作得到预测概率的过程得到输出3。以此类推直到我们得到一个表示句子结束的标记我们的示例词汇表中没有这个标记或者达到最大长度。最后的最后感谢你们的阅读和喜欢作为一位在一线互联网行业奋斗多年的老兵我深知在这个瞬息万变的技术领域中持续学习和进步的重要性。为了帮助更多热爱技术、渴望成长的朋友我特别整理了一份涵盖大模型领域的宝贵资料集。这些资料不仅是我多年积累的心血结晶也是我在行业一线实战经验的总结。这些学习资料不仅深入浅出而且非常实用让大家系统而高效地掌握AI大模型的各个知识点。如果你愿意花时间沉下心来学习相信它们一定能为你提供实质性的帮助。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】大模型知识脑图为了成为更好的 AI大模型 开发者这里为大家提供了总的路线图。它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。经典书籍阅读阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。面试资料我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表