AIGC系列之:Transformer原理及论文解读

news2024/11/23 17:13:58

目录

模型概述

Transformer输入

Word Embedding

Positional Encoding

Transformer的输出

Self Attention

Multi-Head Attention

Encoder结构

最后层的输出

Masked Multi-Head Attention

Decoder输入

Decoder的输出

Transformer训练和推理过程


《Attention is All You Need》

论文地址:https://arxiv.org/abs/1706.03762

原理解读:https://blog.csdn.net/m0_47256162/article/details/127339899

本文的内容参考来自👆这篇博客,感谢博主的辛苦工作~

模型概述

Transformer模块主要包含Encoders和Decoders两个部分

Transformer输入

        以一个翻译的例子理解transformer原理过程:

        整个模型的输入是中文我爱你,目标是将其翻译成英文的I love you,但是对于中文我爱你模型是无法训练的,要将其数值化再送入模型当中。将中文转成数值一般有两种方法:

  • One Hot编码:形成高维向量,向量的维度为词袋大小,如果是中文,向量的维度就是所有汉字的数量,然后是哪个字就将对应位置变为1,其它位置为0。

  • Embedding词嵌入:通过网络进行训练或者通过一些训练好的模型将其转化成连续性的向量。(常用)

Word Embedding

        Embedding可以使用一些预训练好的模型比如word2vec得到,通过Embedding会将每个字形成一个连续型向量,这里假设嵌入维度为5,所以是使用一个维度为5的向量来表示一个字。嵌入后输入的向量维度为[序列长度, 嵌入维度], [3, 5]。

Positional Encoding

        由于Transformer中使用的是自注意力机制来提取信息,虽然处理每个字的时候能够考虑到所有字对其的影响,但是并没有考虑到各个字相互之间的位置信息,也就是上下文,例如如果输入序列变为爱我你,如果仅使用自注意力机制那么输出应该是一样的,所以需要添加整个序列的位置信息。

        在Transformer中使用的是位置编码来表示单词的顺序信息,位置信息也是通过Embedding进行表示,对于位置编码来说有两种方式可以得到:

  • 通过Embedding进行训练

  • 通过公式计算

        Transformer中使用公式将每个位置信息进行编码,然后将这个编码信息和对应位置词的编码进行相加,让自注意力机制同时考虑词的顺序信息,同时又可考虑到所有输入的词。

Transformer的输出

        对于Transformer的输出就是翻译出的:I love you,由于需要预测出每个字需要翻译为哪个词,所以这是个多分类问题(Softmax),相当于做词个数个多分类问题,每个位置对应的输出的维度应为所有单词的个数,每个维度对应预测为该词的概率,概率最大位置对应的词就是该位置预测出翻译的词。输出n个词,每个词对应的维度为词袋的个数,第一个位置预测为I,说明对应该向量I单词对应的概率最大。

Self Attention

        Transformer中最重要的模块就是自注意力机制,Self-Attention自注意力机制有三个输入,分别是Q(查询)、K(键)、V(值)。经过注意力机制后就会得到词个数个新的编码向量,新的编码向量由于采用了注意力机制就会考虑到其它词对其的影响,影响程度就由注意力分数所影响。

注意力机制有几个步骤:

  1. 根据输入向量x计算对应q、k、v

  2. 用自己的查询向量q和其它词的k做点积来计算注意力分数

  3. 将得到的注意力分数进行Softmax

  4. 将注意力分数与各个词的v向量相乘得到加权表示向量

        为了得到Q、K、V,需要使用三个不同的权重矩阵,然后与输入矩阵相乘,然后将输入矩阵X映射到一个新的维度空间,然后就可以利用得到的Q、K、V计算相应的注意力分数和加权向量。得到的Q、K、V行代表的是每个词,就是每个词对应的q向量。

由上面可知Q、K、V矩阵,然后利用Q和K相乘得到不同词之间的注意力分数。

        为了提高并行度,利用矩阵进行运算,将Q和K的转置相乘,这样就会得到一个方型矩阵,矩阵的每个元素代表每个词对其它词的注意力分数。

        然后对得到的注意力分数进行Softmax操作来归一化,这样每一行的分数加起来就为1。然后利用归一化后的注意力分数然后与V进行相乘得到各个词的加权向量,得到的Z每一行代表每个词的新的编码向量。

Multi-Head Attention

        Transformer中采用的是Multi-Head Attention(多头注意力机制),它可以类比CNN中的多个kernel,CNN中每个kernel可以理解为提取不同模式的特征图,所以这里也引入了这个机制,不同的头可以提取出不同的语义信息。多头注意力机制就是采用了多个的Self-Attention,这样每一次就会得到多组的Z,比如这里我们设置头的个数为8,那么我们就会得到8个Z矩阵。

        将输入向量X分别送入8个不同的头中,就是8个不同的自注意力机制模块,每个模块拥有自己的参数(Wq, Wk, Wv)。得到了8个输出矩阵Z1,Z2…Z8之后,然后把这个8个矩阵拼接起来,然后利用全连接网络将其映射成一个与输入向量X形状一致的矩阵。Multi-Head Attention输出的矩阵Z和输入矩阵X的维度是一致的。

Encoder结构

        Encoder是由Multi-Head Attention、Add & Norm、Feed Forward、Add & Norm四个小模块组成。

        多头注意力机制会得到8个输出,每个输出维度为[3,5], 然后经过多头注意力机制进行特征提取,会得到多个输出Z向量,也就是每个头提取出不同模式的矩阵,维度是[词个数,隐向量维度]。

        将各个头对应的Z矩阵进行拼接,形成一个大矩阵维度为[词个数, 头个数*隐向量维度],然后将其喂入一个全连接网络,然后会映射成为一个与输入向量形状一致的Z矩阵,这样目的就是能够保持最终的输出向量和输入维度一致,因为Transformer中采用了残差结构,以便于能够相加。最终的Z矩阵每一行就是经过多头注意力机制提取后每个词对应的编码向量。

Add & Norm是分成两个部分,一个是残差结构,一个是LayerNorm,其计算公式如下:

Encoder中有两处使用了残差结构:

  • 第一处是将输入矩阵X与经过多头注意力机制得到的Z相加

  • 第二处是将输入向量与经过FeedForward网络的输出相加

        采用残差结构主要是为了解决网络难以训练的问题,有了残差结构就可以把网络做的更深,现很多深层的神经网络都使用了残差结构。

        LayerNorm是指Layer Normalization,他与Batch Normalization是不同的,对于Batch Normalization会对同一批次的所有样本的同一特征计算均值和方差,但是对于文本问题,一般序列长度是不一致的,所以无法对于同一特征进行计算,所以这里采用了Layer Normalization,就是对于同一样本的所有特征计算均值和方差。

        Feed Forward在Transformer就是普通的全连接网络,激活函数使用的是ReLU:

        由于输入数据是:我爱你,那么经过多头注意力机制及残差网络后得到的输出向量为Z,维度为[词个数,嵌入维度],这个全连接网络会对每个词输出的Z向量进行转换,并不是有3个全连接网络,而是和RNN差不多,是使用了一个全连接网络参数共享。处理每个字的全连接网络是一个,这是参数共享的,并不是说为每个字都分配一个网络。

最后层的输出

        经过6个Encoder个层堆叠后,最后一层的输出就是整个Encoder的输出,输出维度为[词个数, 嵌入向量维度],也就是和Z一样的形状。Z传入到Decoder中计算相应的K和V。

Decoder结构

  • 每个Decoder Block有两个Multi-Head Attention层

  • 第一个Multi-Head Attention层采用了Masked操作

  • 第二个Multi-Head Attention层的K、V矩阵输入源来自Encoder的输出编码矩阵,而Q矩阵是由经过Add & Norm层之后的输出计算来的。

Masked Multi-Head Attention

        Decoder中的第一个Multi-Head Attention是采用了Masked的操作,他和普通的多头注意力机制计算上来将是一致的,只是多了个掩码矩阵,用于遮盖当前输入后面的数据,不让当前时间模型知道后面的答案是什么。掩码只是在第一个注意力机制使用,第二个是没有用的,因为第一个注意力机制接收的输入为正确答案,在预测当前单词的翻译是我们是不能够让他知道正确答案的,只能根据前面已经翻译出来的内容进行推理。

  • 第一步: 构造掩码矩阵Mask,目的就是为了遮盖当前位置之后的信息,由于输入词个数为3,所以会形成一个 3* 3 的掩码矩阵,矩阵绿色代表当前位置是否可利用,第一个单词只可利用自身,第二个单词则可利用自身和前一个单词,而最后一个则可利用所有信息

  • 第二步: 接下来和普通注意力机制是一样的,通过输入矩阵,计算出Q、K、V矩阵

  • 第三步: 然后利用Q和K矩阵计算出对应的注意力分数

  • 第四步: 将上一步得到的注意力分数进行归一化操作,使每一行的概率和为1

  • 第五步: 将归一化后的注意力分数与掩码矩阵按位相乘,这样就会得到一个遮盖后的注意力分数矩阵,对于QK矩阵来说,每一行是每个单词对其它单词的注意力分数,为了不让当前位置看到单词的信息,要将当前位置单词之后的注意力分数变为0,这样注意力机制就只会参考前面出现的信息。

  • 第六步: 使用Mask矩阵与V矩阵相乘得到输出矩阵Z,这样每个词的输出向量就只包含它之前单词的信息。

  • 第七步: 和多头注意力机制一样,将每个头的输出矩阵Z进行拼接,然后使用全连接网络将其映射成和输入矩阵X维度一样。

        Decoder中的第二个Multi-Head Attention其实和Encoder中的是一样的,只不过输入的Q、K、V数据来源不一样,K、V矩阵是由Encoder最后一层输出计算得来的,而Q矩阵是由经过第一个掩码注意力机制后的矩阵计算得来的。这里是不需要Mask的,因为在翻译过程需要看所有单词的信息,就是我爱你所有上下文信息都要看到,这也是为什么要从Encoder的输出矩阵计算K和V,Encoder的最终输出可以理解为整句话的最终编码信息,包含了所有的语义信息。

Decoder输入

        对于Decoder的输入分为第一个Decoder Block和之后的Block,第一个Block输入的是Ground Truth,也就是真实答案的嵌入向量,而之后block的输入为前一个块的输出。

Decoder的输出

        对于翻译任务来说,需要预测每个字的概率,那就需要使用Softmax来预测所有可能词的概率,比如词库有I、love、you、today、me这五个单词,那么对于一个词 “I” 的输出就为 【0.5,0.1,0.1,0.2,0.1】,由于对应 “I” 位置的概率最大,所以第一个单词预测为 “I”。经过Softmax后,每一行概率和为1,每一行预测出的词就为概率最大的一个。

Transformer训练和推理过程

  • 训练过程:对于训练过程,我们是将原始输入和正确答案一同输入的,训练过程采用Teacher Forcing,而对于正确答案输入是采用了Mask操作,就是为了不让模型看到当前词之后的信息,这是可以并行进行的。

  • 推理过程:但是对于推理过程,是不会输入正确答案的,而且和RNN运行差不多是一个一个的,首先会给Decoder输入开始标志,然后经过Decoder会预测出 “I” 单词,然后拿着这个 “I” 单词继续喂入Decoder去预测 “love”,但后拿着 “love” 去预测 “you” ,最后拿着 “you” 去预测结束标志。

        对于翻译任务来说,这是序列到序列的问题,显然每次的输出序列的长度是不一致的,所以需要一个结束标志来表明这句话已经翻译完成,所以需要按顺序一个一个翻译,不断拿着已经翻译出的词送入模型,知道预测出结束标志为止。

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

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

相关文章

网络工程师应知必会的网络故障排查手段,你用过几个?

你们好,我的网工朋友。 网络排错对于网络工程师或运维人员甚至对很多人(搞IT的朋友们)都是基操。 所以知道网络排错的详细流程和流程中每一步的原理,就显得很关键了。 当网络出现问题时,你能迅速排查出网络问题所在…

Pytorch深度学习实战2-1:详细推导Xavier参数初始化(附Python实现)

目录 1 参数初始化2 Xavier参数初始化原理2.1 前向传播阶段2.2 反向传播阶段2.3 可视化思考 3 Python实现 1 参数初始化 参数初始化在深度学习中起着重要的作用。在神经网络中,参数初始化是指为模型中的权重和偏置项设置初始值的过程。合适的参数初始化可以帮助模型…

阿里云服务器部署node和npm

目录 1.链接服务器2.找到node 下载地址3获取链接地址4下载到linux5.解压6.重命名 解压后的文件7.配置环境变量7.1复制当前的bin目录7.2vim /etc/profile7.3在按下ESC按键 8.重启环境变量9.输入node10.npm配置加速镜像 1.链接服务器 2.找到node 下载地址 https://nodejs.org/d…

C++——解锁string常用接口

本篇的内容是记录使用string接口的测试与使用,方便后续使用时查阅使用 首先介绍 string::npos; size_t(无符号整型)的最大值。NPOS 是一个静态成员常量值,具有 size_t 类型元素的最大可能值。当此值用作字符串成员函数中 len&am…

希宝猫罐头怎么样?专业人士告诉你性价比高的猫罐头推荐

作为一家经营猫咖店已有6年的店长,我在这段时间里接触过不少于30种不同的猫罐头。在猫罐头上我还是有话语权的。通过本文,我将与大家分享值得购买的猫罐头,分享猫罐头喂养的技巧。那么希宝猫罐头表现怎么样呢? 希宝猫罐头可是采用…

Python GUI 图形用户界面程序设计,Python自带 tkinter 库

文章目录 前言GUI介绍简单操作tkinter组件介绍向窗体中添加按钮控件使用文本框控件使用菜单控件使用标签控件使用单选按钮和复选按钮组件使用绘图组件关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集…

【多线程】-- 04 静态代理模式

多线程 3 静态代理 这里以一个现实生活中的例子来解释并实现所谓的静态代理模式,即结婚者雇用婚庆公司来帮助自己完成整个婚礼过程: package com.duo.lambda;interface Marry {void HappyMarry();//人生四大乐事:久旱逢甘霖;他…

自动化测试|我为什么从Cypress转到了Playwright?

以下为作者观点: 早在2019年,我就开始使用Cypress ,当时我所在的公司决定在新项目中放弃Protractor 。当时,我使用的框架是Angular,并且有机会实施Cypress PoC。最近,我换了工作,现在正在使用R…

springboot自定义更换启动banner动画

springboot自定义更换启动banner动画 文章目录 springboot自定义更换启动banner动画 📕1.新建banner🖥️2.启动项目🔖3.自动生成工具🧣4.彩蛋 🖊️最后总结 📕1.新建banner 在resources中新建banner.txt文…

C#——多线程之异步调用容易出现的问题

C#——多线程之异步调用容易出现的问题 Q1:For中异步调用函数且函数输入具有实时性 Q1:For中异步调用函数且函数输入具有实时性 在项目进行过程中,发现For中用异步调用带有输入参数的函数时,会由于闭包特性,以及Task.…

ssm+vue的公司安全生产考试系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的公司安全生产考试系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结…

C#从零搭建微信机器人(二)分词匹配组件【jieba】的使用

上篇文章我们讲解了微信机器人的环境搭建及演示,这期我们来说一下其中在模糊匹配搜索时用到的Segement子项目,也就是其中的中文分词匹配器。 一、原理介绍: 其实这个子项目中的分词插件和solr的IK分词器类似,都是可以支持将一句…

TP4066L是一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器。

TP4066L 采用ESOP8/DFN2*2-8封装 1A线性锂离子电池充电器 描述: TP4066L是一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器。其底部带有散热片的ESOP8DFN2*2-8封装与较少的外部元件数目使得TP4066L成为便携式应用的理想选择。TP4066L可以适合USB电源和适…

桐庐县数据资源管理局领导一行莅临美创科技并带来感谢信

11月23日,浙江桐庐县数据资源管理局党组成员、副局长朱勃一行到访美创科技总部参观交流,并带来感谢信,对美创圆满完成护航亚运政务外网数据网站安全保障工作表示充分肯定。美创科技联合创始人、副总裁胡江涛等进行热情接待并开展交流座谈。 图…

微信ipad协议8.0.37/8.0.40新版本

功能如下,如有定制功能请在官网联系我们。 登录 创建新设备 获取登录er维码 执行登录 注销登录 消息 消息回调 消息撤回 发送app类型消息 发送小程序 发送CDN文件 发送CDN图片 发送CDN视频 发送emoji 发送文件 发送图片 发送链接 发送消息 发送视频 发送语音 …

2021年全国a级景区数据,shp+csv数据均有

大家好~这周将和大家分享关于文化旅游和城乡建设相关的数据,希望大家喜欢~ 今天分享的是2021年全国a级景区数据,数据格式有shpcsv,几何类型为点,已经经过清洗加工,可直接使用,以下为部分字段列表&#xff…

无人机遥控器方案定制_MTK平台无人设备手持遥控终端PCB板开发

随着科技的不断发展和无人机技术的逐步成熟,无人机越来越受到人们的关注。作为一种高新技术,无人机的应用范围不断拓展,包括农业、环境监测、城市规划、运输物流等领域。同时,无人机的飞行控制技术也得到了不断的优化和提升。 早…

前端管理制度

数据运营中心的管理形式: 数据运营中心的管理形式 竖向是各小组 横向是项目管理 负责人的定位: 只是工作的内容不同,没有上下级之分 帮助组员找到适合的位置,帮助大家解决问题,给大家提供资源 前端组的工作形式&am…

Doris-Routine Load(二十七)

例行导入(Routine Load)功能为用户提供了一种自动从指定数据源进行数据导入的功能。 适用场景 当前仅支持从 Kafka 系统进行例行导入,使用限制: (1)支持无认证的 Kafka 访问,以及通过 SSL 方…

二维码智慧门牌管理系统:实现高效信息管理

文章目录 前言一、 功能升级优势 前言 随着科技的飞速发展和人们生活节奏的加快,传统的门牌管理系统已经不再适应现代社会的需求。为了解决这一问题,全新的二维码智慧门牌管理系统升级解决方案应运而生,为用户带来前所未有的便捷与高效。 一…