掌握Transformer之学习各组件

news2024/11/13 9:29:43

01

引言

这是我关于Transformer系列的第二篇文章。在前一篇文章中,我们了解了Transformer结构的功能、相关架构及其相比于RNN架构的优势。在本文中,我们可以深入了解Transformer结构的工作原理。我们将通过实际的矩阵表示来了解数据如何在该结构内流动,并了解每个阶段所需要执行的相关计算。

闲话少说,我们直接开始吧!

02

Transformer整体结构

正如我们在第一部分中所看到的,Transformer架构的主要组成如下所示:

Transformer整体网络结构

观察上述结构,我们知道编码器和解码器的输入,主要包括嵌入层以及位置编码层;同时编码器stack包含多个编码器,其中每个编码器包括一个多头自注意力层以及一个前馈神经网络层;解码器stack包含多个解码器,其中每个解码器包括一个多头自注意力层,一个多头交叉注意力层以及一个前馈神经网络层;右上角的输出head主要包括全连接线性层以及分类softmax层。

为了展示每个组件的功能,让我们以训练Transformer来解决翻译问题的过程中深入探讨一下 Transformer 的工作原理。我们将使用一个训练数据样本进行讲解,该样例包括一个输入序列(英语’You are welcome’)和一个目标序列(西班牙语’De nada’)。

03

嵌入********层

与任何 NLP 模型一样,Transformer 需要了解每个单词的两个方面–单词的含义及其在序列中的位置。

  • 嵌入层对单词的词义进行编码。

  • 位置编码层表示单词在句子中的位置。

Transformer将这两种编码表示进行相加操作,从而将二者结合在一起。

我们首先来学习嵌入层,Transformer有两个嵌入层,如上图所示:输入序列被送入第一个嵌入层,即输入嵌入层。将目标序列右移一个位置,并在第一个位置插入一个开始标记后,将目标序列送入第二个嵌入层。

请注意,在推理过程中,我们没有目标序列,我们将输出序列循环送到第二个嵌入层,这就是它被称为 "输出嵌入"的原因。

如上图所示,使用我们的词汇表可以将文本序列映射为数字单词 ID。然后,嵌入层将每个输入词映射为嵌入向量Embeddings,嵌入向量是该单词更丰富的语义表示。

04

位置编码层

由于 RNN 实现了一个循环,每个单词都是按顺序输入的,因此它隐含地知道每个单词的位置。然而,Transformer架构并不使用 RNN,序列中的所有单词都是并行输入的。这是它相对于 RNN 架构的主要优势,但这也意味着位置信息会丢失,必须重新单独进行添加。

与两个嵌入层一样,Transformer架构中也有两个位置编码层。位置编码的计算与输入序列无关。这些都是固定常数值,只取决于序列的最大长度。这些常数的计算公式如下:

上述公式中:

  • pos 是单词在输入序列中的位置

  • d_model 是编码矢量的长度(与嵌入矢量长度相同)

  • i 是位置编码向量中的索引值

换句话说,位置编码层交织了一条正弦曲线和一条余弦曲线,所有偶数索引都有正弦值,所有奇数索引都有余弦值。举例来说,如果我们对一个包含 40 个单词的序列进行编码,我们可以在下面看到一些组合的编码值。

蓝色曲线表示所有40个单词位置的第 0 个索引的编码情况,橙色曲线表示所有 40 个单词位置的第1个索引的编码情况。其余的索引值也有类似的曲线。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

05

矩阵计算

我们知道,深度学习模型一次处理一批训练样本。嵌入层和位置编码层对表示一批序列样本的矩阵进行处理。嵌入层采用(samples,seq_len)形状的单词矩阵。它将每个单词ID编码成单词向量,单词向量的长度为embedding_size,从而得到一个(samples,seq_len,embedding_size)形状的输出矩阵。位置编码层使用的编码大小等于嵌入大小。因此,它产生的矩阵形状与嵌入矩阵相似。

嵌入层和位置编码层产生的(samples,seq_len,embedding_size)矩阵形状在整个Transformer结构中都会保持不变,因为数据会流经编码器Stack和解码器Stack,直到最后的输出层对其进行reshape。

这样我们就掌握了Transformer中的三维矩阵维度。不过,为了简化可视化效果,从现在起我们将去掉第一个维度(samples),而使用单个样本的二维表示法:

输入嵌入将其输出送入编码器。同样,输出嵌入也会输入到解码器。

06

编码器

编码器stack和解码器stack分别由多个(通常是六个)编码器和解码器组成,按顺序连接。

编码器stack中的第一个编码器接收经过嵌入层和位置编码层的输入嵌入,而其他编码器则接收前一个编码器的输出作为输入。编码器将其输入传入多头自注意力层,自注意力层的输出进入前馈神经网络层,然后将其输出向上发送到下一个编码器。如下所示:

自注意力层和前馈神经网络层均有一个skip-connection,然后进行LayerNorm归一化层。最后一个编码器的输出被送入解码器stack中的每个解码器,如下所述。

07

解码器

解码器的结构与编码器的结构非常相似,但也有一些不同之处。与编码器一样,解码器stack中的第一个解码器接收嵌入层和位置编码层处理后的输出嵌入作为输入。stack中的其他解码器接收上一个解码器的输出作为输入。

解码器将其输入传递给多头自注意力层。该层的工作方式与编码器略有不同。它只允许关注序列中较早的位置。这是通过mask位置屏蔽来实现的,我们稍后将讨论这一点。

与编码器不同,解码器有第二个多头交叉注意力层,即编码器-解码器交叉注意力层。编码器-解码器交叉注意力层的工作原理与自注意力层类似,只是它结合了两个输入源–其下的自注意力层和编码器stack的输出。该注意力层的输出被送入前馈神经网络层,然后将其向上输出发送到下一个解码器。

每个子层(自注意力层、编码器-解码器交叉注意力层和前馈层)周围都有一个残差连接,然后是LayerNorm归一化层。

08

Attention

在Transformer系列第一篇文章中,我们谈到了为什么在处理序列时注意力机制如此重要。在 Transformer 中,Attention 有三个用途:

  • 编码器中的自注意力层 - 关注输入序列自身

  • 解码器中的自注意力层 - 关注目标序列自身

  • 解码器中的交叉注意力层 - 目标序列关注输入序列

Attention层的输入有三个Query,Key和Value。在编码器的自注意力层中,编码器的输入会传递给Q、K、V这三个参数,如下所示:

与之类似,在解码器的自注意力层中,解码器的输入被传递给所有三个参数,即Q、K和V。

与之不同的是,在解码器的交叉注意力层中,编码器stack中最后一个编码器的输出被传递给参数V 和 K。其下的自注意力模块的输出则传递给参数Q。如下所示:

09

Multi-head Attention

Transformer将每个注意力处理器称为一个注意力头,并并行重复多次。这就是所谓的多头注意力。它通过将多个类似的注意力计算组合在一起,使注意力具有更强的特征表达能力。

Query、Key和Value分别通过独立的线性层,每个线性层都有自己的权重,产生三个结果,分别称为 Q、K 和 V。然后,如下图所示,使用注意力公式将这些结果合并在一起,计算得出注意力分数。

这里需要注意的是,Q、K 和 V 包含了序列中每个单词的编码表示。然后,Attention的计算会将序列中的每个单词与其他单词结合起来,这样注意力得分就可以用来衡量单词应该重点关注序列中的哪些单词。

10

Attention Mask

在计算注意力得分时,注意力模块会执行掩码mask操作。掩码mask有两个目的:

  • 在编码器的自注意力层以及解码器中的交叉注意力层中,掩码mask的作用是将输入句子中存在填充的注意力输出置为零,以确保填充不会影响自注意力。(注:由于输入序列可以是不同长度的,因此会像大多数 NLP处理过程一样,用填充标记对其进行扩展,以便将固定长度的向量输入Transformer)。

  • 在解码器的自注意力层中,掩码mask的作用是防止解码器在预测下一个单词时 "偷看 "目标句子中的其余部分。

解码器处理源序列中的单词,并用它们来预测目标序列中的单词。在训练过程中,解码器通过Teacher Forcing来完成这一工作,将完整的目标序列作为解码器的输入。因此,在预测某个位置的单词时,解码器可以使用该单词之前的目标单词以及该单词之后的目标单词。这使得解码器可以通过使用未来中的目标词来 “作弊”。例如,在预测 "单词 3 "时,解码器只应参考目标词的前 3 个输入词,而不应参考第 4 个单词 “Ketan”。

因此,解码器会屏蔽掉序列中当前需要预测单词后面的输入单词。

在计算注意力分数时(请参阅前面显示计算过程的图片),会在 Softmax 之前对分子进行掩码mask。屏蔽掉的元素(白色方格)被设置为负无穷大,这样 Softmax 就会将这些值变为零。

11

输出层

解码器stack中的最后一个解码器将其输出传递给输出组件,由输出组件将其转换为最终输出句子。

全连接线性层将解码器输出向量投射到单词得分中,目标词汇中的每个单词在句子中的每个位置都有一个得分值。例如,如果我们的最终输出句子有 7 个单词,而目标西班牙语词汇有 10000 个单词,那么我们就会为这 7 个单词中的每个单词生成 10000个分值。这些分值表示词汇中的每个单词在句子该位置出现的可能性。

然后,Softmax 层会将这些分数转化为概率(和加起来为 1.0)。在每个位置上,我们会找到概率最高的单词的索引,然后将该索引映射到词汇表中的相应单词。这些词就构成了Transformer的输出序列。如下所示:

12

计算损失

在训练过程中,我们使用损失函数(如交叉熵损失)将生成的输出概率分布与目标序列进行比较。概率分布给出了每个词在该位置出现的概率。

假设我们的目标词汇只包含四个单词。我们的目标是生成与预期目标序列 "De nada END "相匹配的概率分布。

这意味着,在第一个位置的概率分布中,"De "的概率应为 1,而词汇表中所有其他词的概率均为 0。同样,在第二个和第三个位置,"nada "和 "END "的概率应分别为 1。

像往常一样,损失被用来计算梯度,通过反向传播训练Transformer,更新其权重。

13

结论

希望这篇文章能让大家对训练期间Transformer内部的运行机制有所了解。正如我们在上一篇文章中所讨论的,Transformer在推理过程中循环运行,但大部分处理过程保持不变。

多头注意力模块赋予了Transformer结构强大的功能。在下一篇文章中,我们将继续深入了解注意力的计算细节。

在大模型时代,我们如何有效的去学习大模型?

现如今大模型岗位需求越来越大,但是相关岗位人才难求,薪资持续走高,AI运营薪资平均值约18457元,AI工程师薪资平均值约37336元,大模型算法薪资平均值约39607元。
在这里插入图片描述

掌握大模型技术你还能拥有更多可能性

• 成为一名全栈大模型工程师,包括Prompt,LangChain,LoRA等技术开发、运营、产品等方向全栈工程;

• 能够拥有模型二次训练和微调能力,带领大家完成智能对话、文生图等热门应用;

• 薪资上浮10%-20%,覆盖更多高薪岗位,这是一个高需求、高待遇的热门方向和领域;

• 更优质的项目可以为未来创新创业提供基石。

可能大家都想学习AI大模型技术,也_想通过这项技能真正达到升职加薪,就业或是副业的目的,但是不知道该如何开始学习,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学。为了让大家少走弯路,少碰壁,这里我直接把都打包整理好,希望能够真正帮助到大家_。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,下面是我整理好的一套完整的学习路线,希望能够帮助到你们学习AI大模型。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述

三、AI大模型经典PDF书籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

四、AI大模型各大场景实战案例

在这里插入图片描述

结语

【一一AGI大模型学习 所有资源获取处(无偿领取)一一】
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2131772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何构建高效快速的数据同步策略方案

在数据化的商业环境中,实现数据的实时同步不仅是提升企业内部协作效率的关键,更是确保业务决策精准性和时效性的核心要素。通过确保数据的一致性和最新性,企业能够实现跨部门的无缝协作,从而为业务流程的顺畅运作和快速响应市场变…

比 GPT-4 便宜 187 倍的Mistral 7B (非广告)

Mistral 7B 是一种设计用来快速处理较长文本的人工智能模型。它采用了一些特别的技术来提高速度和效率,比如“分组查询注意力(grouped-query attention)”和“滑动窗口注意力(sliding-window attention)”。 这些技术…

python中如何打印日志信息推荐logaid库(强大的日志库)

一、安装 pip install logaid二、使用 只打印,不保存 from logaid import loglog.info(hello world) log.error(hello world) log.warning(hello world) log.fatal(hello world,123,{},[],False)开启超级print from logaid import log log.init(print_proTrue)prin…

长沙自闭症寄宿学校推荐,为孩子开启光明未来

在长沙这座历史悠久而又充满活力的城市中,自闭症儿童的成长与教育问题牵动着无数家庭的心。家长们渴望为孩子找到一所能够提供专业康复、温馨关怀与全面教育的学校,为他们的未来铺设一条光明之路。虽然本文起始于长沙的期盼,但我们的目光已跨…

多态(上)【C++】

文章目录 多态的概念多态的实现多态产生的条件什么是虚函数?虚函数的重写和协变重写协变 析构函数的重写为什么有必要要让析构函数构成重写? 多态的概念 C中的多态是面向对象编程(OOP)的一个核心特性,指的是同一个接口…

UE4_后期处理六—夜视仪、扫描线

参考:在虚幻引擎中混合材质函数 | 虚幻引擎 5.4 文档 | Epic Developer Community (epicgames.com) 效果: 知识储备: 混合材质函数: 这些函数用于将一种颜色与另一颜色混合,这类似于PS中的混合模式。 混合 是一种函数类型,这类…

因MathType导致word复制粘贴失败,显示:运行时错误‘53’

问题:运行时错误‘53’:文件未找到:MathPage.WLL 解决方法:打开MathType所在文件夹 右击MathType图标->点击“打开文件所在位置”->找到MathPage.WLL文件。 然后,把这个文件复制到该目录下:C:\Progr…

UE5-俯视角色移动(蓝图)01

效果如下: 蓝图节点如下: 使用示例自带的移动蓝图,发现角色只能平移,不会转向。必须勾选以下选项: 点击蓝图-》组件-》SpringArm节点。在细节中找到摄像机设置,勾选以下: 在 点击蓝图-》组件-…

智能化大数据平台引领企业迈向精准决策时代

随着科技的飞速发展,大数据平台正逐步迈向更加智能化和自动化的未来趋势。未来的数据平台不仅仅是一个简单的存储和处理数据的工具,而是一个能够自主学习、优化和做出决策的智能系统。这一转变将极大地改变企业处理数据的方式,提高决策的速度…

LeetCode_sql_day24(1212.查询球队积分)

描述 表: Teams ------------------------- | Column Name | Type | ------------------------- | team_id | int | | team_name | varchar | ------------------------- team_id 是该表具有唯一值的列。 表中的每一行都代表一支独立足球队。表: Matches…

[机器学习]逻辑回归

1 前置知识 逻辑回归解决二分类问题。sigmoid函数:非线性,值域(0,1)概率值 2 逻辑回归原理 3 癌症分类案例 import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import Standa…

Python爬虫案例七:抓取南京公交信息数据并将其保存成excel多表形式

测试链接: https://nanjing.8684.cn/line4 思路:先抓取某个类型下的某一条线路所有数据,然后实现批量,,列举出三个类型代表既可 源码: from lxml import etree from xlutils.copy import copy import requests, os, xlrd, xlwtd…

【计算机网络】电路交换、电报交换、分组交换

【计算机网络】电路交换、电报交换、分组交换 目录 【计算机网络】电路交换、电报交换、分组交换1. 电路交换2. 电报交换3. 分组交换4. 基于分组交换~“虚电路交换”技术 1. 电路交换 电路交换(Circuit Switching):通过物理线路的连接,动态地…

为什么总是分心?(影响专注力的5因素)

【Ali Abdaal】Why You’re Always Distracted - 5 Mistakes Ruining Your Focus 介绍 在这个视频中,将讨论影响你注意力的五个主要因素。 内容将深入研究如何提高专注力、避免分心,从而更有效地投入到你的工作和学习中。 视频提供了一些实用的技巧和…

redis群集的三种模式

目录 一、redis群集有三种模式 二、redis主从复制 2.1 概念 2.2 主从复制的作用 2.3 主从复制流程 三、搭建redis主从复制 四、redis哨兵模式 4.1 概念 4.2 哨兵模式原理: 4.3 哨兵模式的作用: 4.4 故障转移机制: 4.5 主节点的选举&#xff…

Python编码系列—Python工厂方法模式:构建灵活对象的秘诀

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

Vue组件:模板引用ref属性的使用

Vue 组件系列文章: 《Vue组件:创建组件、注册组件、使用组件》 《Vue组件:使用Prop实现父组件向子组件传递数据》 《Vue组件:使用$emit()方法监听子组件事件》 《Vue组件:插槽》 《Vue组件:混入》 《Vue组件…

解读工控, PLC+组态能替代DCS吗?

在工业自动化的浪潮中,技术的不断进步正在重塑我们对于控制系统的传统认知。前几天听到一个颇为有趣的观点——现代的DCS可以被看作是PLC加上组态的结合体。这个观点引发了我的深思,因为它不仅触及了工业自动化领域的技术变革,也反映了在数字…

基于Python的电影票房数据分析系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的电…

等保测评中的合规性自查:企业指南

在信息安全等级保护(等保)体系下,合规性自查是企业确保自身信息安全管理水平符合国家法律法规和标准要求的关键步骤。本文旨在为即将进行等保测评的企业提供一份详细的合规性自查指南,帮助企业顺利通过测评。 一、合规性自查的重…