简单易懂的Transformer学习笔记

1. 整体概述

2. Encoder

        2.1 Embedding

        2.2 位置编码

                2.2.1 为什么需要位置编码

                2.2.2 位置编码公式

                2.2.3 为什么位置编码可行

        2.3 注意力机制

        2.3.1 基本注意力机制

        2.3.2 在Trm中是如何操作的

        2.3.3 多头注意力机制

2.4 残差网络

2.5 Batch Normal & Layer Narmal

        2.5.1 Batch Normal

        2.5.2 Layer Normal

3. Decoder

        3.1 Mask

        3.2 交互层


1. 整体概述

        Transformer模型首次提出是在论文Attention is All You Need中。在论文中,Transformer被用来实现机器翻译的工作。相较于RNN难以并行处理信息与CNN窗口短难以处理长序列的缺点,Transformer具有更高的效率与更加优秀的性能。

        总体来看,Transformer由编码器与解码器两部分组成。    

        其中,Encoder与Decoder是可以堆叠N(论文中N=6)层的,这些层结构相同,参数独立。

        论文中的Transformer架构如下,下文将针对各个环节进行解释。

2. Encoder

       Encoder分为三个部分,输入部分、注意力机制与前馈神经网络。将输入送入Embedding(词嵌入层),与位置编码对位相加。之后进行多头注意力机制处理,进入残差网络并将结果进行Layer Normal。之后进入双层全连接网络,并对结果进行残差和正则化处理。

        论文中的Encoder有6层堆叠网络,其中每层有2层子层网络。

2.1 Embedding

       Embedding可以看作是一个查找表,用来获取每个单词的学习向量表示。神经网络通过数字进行学习,所以将每个单词映射到一个连续值的向量来表示该单词。

2.2 位置编码

        2.2.1 为什么需要位置编码

        不同于RNN的按时间线串行处理,Transformer是并行处理的。为了保存序列顺序,引入位置编码。

        2.2.2 位置编码公式

         将Embedding与位置编码相加得到的值作为下面环节的输入。

         2.2.3 为什么位置编码可行

           对于一个特定位置的d_{model}维的位置向量,借助三角函数的性质​​

           我们可以得到:

           可以看出,pos+k位置的位置向量的某一维2i2i+1,可以由pos位置与k位置的位置向量的2i2i+1为的线性组合表示。这意味着向量中蕴含了相对位置信息(但该相对位置信息会在注意力机制处消失)。 

2.3 注意力机制

        2.3.1 基本注意力机制

        注意力即关注点。比如给你一张包含婴儿的图片,并提问婴儿在干嘛,此时你对图片中各部分的关注度是不同的,可能对婴儿的脸与手的部分关注度更高,而对图片边缘部分则关注度较低。

        论文中给出的注意力公式如下:

         下面以输入“我不爱你”为例解释公式。如图,阶段1中向量Q与向量K点乘,点乘得到的值可以反映两个向量之间的相似程度。阶段2对阶段1中得到的值做了类softmax的归一化处理。除以$\sqrt{d_k}$可以防止值向两端偏导致梯度消失。阶段3中将阶段2得到的值分别与对应的value值相乘,最后将这些结果相加得到了Attention Value。

         以上是nlp的举例,cv中也类似,图像的分割可类比词的分割。

        2.3.2 在Trm中是如何操作的

        首先,我们需要由单词向量获取$q,k,v$的值。对于词向量X_i,将其分别与W^Q, W^K, W^V相乘(注意这里与所有的词向量相乘的都是同一套$W$参数),可以得到q_i,k_i,v_i。接着,计算$QK$的相似度,得到$Attention$的值。   在实际代码中,通常使用矩阵表示,方便并行。 

         2.3.3 多头注意力机制

        将词向量与不同的W参数相乘,可以得到多组值。亦即将Q,K,V投影到低维h次,做j次注意力函数,合并每个输出得到最终输出。

      类似于CNN里的多通道输出,使得Trm有可学习的参数。   

        MultiHead(Q,K,V)=Concat(head_1,...,head_h)W^O  

where \ head_i = Attention(QW_i^Q,KW_i^K,VW_i^V)

2.4 残差网络

        残差网络将原先的输出F(X)与输入X对位相加。要求输入与输出维度相同,论文中设置维度为512。        

        将上图简化如下:

         根据后向传播的链式法则:\frac{\partial L}{\partial X_{Aout}} = \frac{\partial L}{\partial X_{Din}} \frac{\partial X_{Din}}{\partial X_{Aout}}

        而X_{Din} = X_{Aout}+C(B(X_{Aout}))

        所以\frac{\partial L}{\partial X_{Aout}} = \frac{\partial L}{\partial X_{Din}} (1+\frac{\partial X_{Din}}{\partial X_C}\frac{\partial X_C}{\partial X_B}\frac{\partial X_B}{\partial X_{Aout}})

        连乘容易导致梯度消失,又因为连乘前有“1”在,所以偏导不易为0。因此,使用残差可以得到有效防止梯度消失,从而得到更深的网络。

2.5 Batch Normal & Layer Narmal

        2.5.1 Batch Normal

        针对不同样本的同一维度(特征)进行标准化处理,使得均值为0,方差为1。

         缺点:

        1.当batch\_size较小时,效果差(此时每个batch里的样本的均值和方差无法替代整体)。

        2.在RNN中效果比较差,因为会出现词向量长度不一样的情况。

        2.5.2 Layer Normal

         针对同一样本的不同维度(特征)进行标准化处理,使得均值为0,方差为1。

        $LayerNorm(x+Sublayer(x))$

3. Decoder

       DecoderEncoder的组成模块大体相似,主要的不同在于Mask与交互层。

        论文中的Decoder具有6层堆叠网络,其中每层网络有2个子层,多插入了第三个子层。

         3.1 Mask

        需要Mask的原因:若与Encoder一样没有Mask,则会导致预测结果偏差。因为那样子训练模型的时候后续单词是可见的,但实际预测时,未来的单词是不可知的。因此将后续的单词计入影响是不合适的。

        实现Mask的方法:计算权重时,t时刻之后的值替换为很大的负数,指数变换后为0。

        3.2 交互层

        每个Encoder与所有的Decoder进行交互。k,v来自于Encoder本身,q来自于Decoder。这里相当于Decoder中的每个q去询问每个Encoder输出的量,并与之结合。

         但是在实际代码训练中,一般Encoder生成q,k矩阵,Decoder输出v矩阵加权。   

参考资料:

Vaswani, Ashish, et al. “Attention is All You Need.” Advances in Neural Information Processing Systems (NIPS), 2017.

Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili
Transformer从零详细解读(可能是你见过最通俗易懂的讲解)_哔哩哔哩_bilibili
超强动画,一步一步深入浅出解释Transformer原理!_哔哩哔哩_bilibili

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VBA技术资料MF40:VBA_计数筛选状态的数据行数

【分享成果,随喜正能量】人唯有与喜欢的事物发展关系,不管是人或者是物还是事,包括喜欢自己外表、个性的部分,喜欢自己做的事,喜欢自己的创造,喜欢的风景……才给人带来对自己的认同。在与喜欢的事物互动关…

yolo-v5学习(使用yolo-v5进行安全帽检测错误记录)

常见错误 跑YOLOv5遇到的问题_runtimeerror: a view of a leaf variable that requi_Pysonmi的博客-CSDN博客 python train.py --img 640 --batch 16 --epochs 10 --data ./data/custom_data.yaml --cfg ./models/custom_yolov5.yaml --weights ./weights/yolov5s.pt 1、梯度…

C# 简单模拟 程序内部 消息订阅发布功能

文章目录 前言模拟消息订阅发布使用注意事项 前言 我想做个简单的消息发布订阅功能,但是发现好像没有现成的工具类。要么就是Mqtt这种消息订阅发布。但是我只想程序内部进行消息订阅发布,进行程序的解耦。那没办法了,只能自己上了 模拟消息…

【LeetCode】094. 分割回文串II

文章目录 1. 解题思路1.1 创建dp表1.2 状态转移方程1.3 提前求出所有子串是否是回文串 2. 整体代码 1. 解题思路 1.1 创建dp表 这道题我们使用动态规划的方法来解,首先创建一个大小为字符串长度的dp表。dp[i] 表示 s[0, i] 的字符串最小划分多少次可以全划分为回文…

Matlab对TMS320F28335编程--SVPWM配置互补PWM输出

前言 F28335中断 目的:FOC的核心算法及SVPWM输出,SVPWM的载波频率10kHz,SVPWM的每个周期都会触发ADC中断采集相电流,SVPWM为芯片ePWM4、5、6通道,配置死区 1、配置中断SVPWM进ADC中断,查上表知CPU1,PIE1 …

时间复杂度接近O(n)的三种排序算法

1.桶排序 桶排序,顾名思义,会用到“桶”,核心思想是将要排序的数据分到几个有 序的桶里,每个桶内的数据再单独进行排序。桶内排完序之后,再把每个桶内的数据按照顺序依次 取出,组成的序列就是有序的了。 …

CubeSLAM: Monocular 3D Object SLAM——论文简述

一、简介 提出一种在动态和静态环境中同时进行3D目标检测和定位建图的方法,并且能够互相提升准确度。具体地,对于3D目标,其位置、方向和尺寸通过slam进行了优化;而3D目标作为slam中的路标,可以提供额外的语义和几何约…

【统计学精要】:使用 Python 实现的统计检验— 1/10

一、介绍 欢迎来到“掌握 Python 统计测试:综合指南”,它将介绍本手册中您需要熟悉使用 Python 的所有基本统计测试和分析方法。本文将为您提供统计测试及其应用的全面介绍,无论您是新手还是经验丰富的数据科学家。 使用来自现实世界的实际示…

stable diffusion(1): webui的本地部署(windows)

一、前言 是的,现在是202308月份了,网上已经有很多打包好的工具,或者直接进一个web就能用SD的功能,但是我们作为程序员,就应该去躺坑,这样做也是为了能够有更多自主操作的空间。 像其他AI一样&#xff0c…

【链表OJ 3】链表的中间结点

前言: 本文收录于http://t.csdn.cn/n6UEP数据结构刷题的博客中,首先欢迎大家的来访,其次如有错误,非常欢迎大家的指正!我会及时更正错误! 目录 一.链表的中间结点 1.1原理:快慢指针的使用 链表元素个数为奇数时 链表元素个数…

SQL注入实操三(SQLilabs Less41-65)

文章目录 一、sqli-labs靶场1.轮子模式总结2.Less-41 stacked Query Intiger type blinda.注入点判断b.轮子测试c.获取数据库名称d.堆叠注入e.堆叠注入外带注入获取表名f.堆叠注入外带注入获取列名g.堆叠注入外带注入获取表内数据 3.Less-42 Stacked Query error baseda.注入点…

【小沐学C++】C++ 基于CMake构建工程项目(Windows、Linux)

文章目录 1、简介2、下载cmake3、安装cmake4、测试cmake4.1 单个源文件4.2 同一目录下多个源文件4.3 不同目录下多个源文件4.4 标准组织结构4.5 动态库和静态库的编译4.6 对库进行链接4.7 添加编译选项4.8 添加控制选项 5、构建最小项目5.1 新建代码文件5.2 新建CMakeLists.txt…

一、1.汇编指令、寄存器和寻址方式

立即数:可以立即在一条机器指令后找到具体数值的数,如内存中00位写着加指令,01位写着1100_1111,意思就是将1100_1111(十进制207)加到某处,反之可以表示数据的地址。 低端字节序:16位…

Java实现数字加密

Java实现数字加密 需求分析代码实现小结Time 需求分析 1.首先,考虑方法是否需要接收数据处理? 需要一个4位数,至于是哪一个数,让方法的调用者传递。 所以,方法的参数,就是这个需要加密的四位数 2.接着&…

nsqd的架构及源码分析

文章目录 一 nsq的整体代码结构 二 回顾nsq的整体架构图 三 nsqd进程的作用 四 nsqd启动流程的源码分析 五 本篇博客总结 在博客 nsq整体架构及各个部件作用详解_YZF_Kevin的博客-CSDN博客 中我们讲了nsq的整体框架,各个部件的大致作用。如果没看过的&…

【websocket - Tornado】简易聊天应用

1、背景 项目测试的过程中需要自己搭建一个webscoket站点,确保此类服务接入后台系统后访问不受影响。python的服务框架常用的有Flask、Django、Tornado,每个框架的侧重点不同,导致使用的场景就会有所差异。 Flask轻量级,采用常规的同步编程方式,需要安装其他模块辅助,主…

Pytest测试框架2

目录: pytest参数化用例pytest标记测试用例pytest设置跳过、预期失败用例pytest运行用例pytest测试用例调度与运行pytest命令行常用参数python执行pytestpytest异常处理 1.pytest参数化用例 参数化 通过参数的方式传递数据,从而实现数据和脚本分离。…

并网逆变器学习笔记6---三电平SVPWM下的连续和不连续调制

之前在学习中总结过一次DPWM策略选择:并网逆变器学习笔记5---三电平DPWM 但是对于三电平逆变器而言,如何从连续调制切换到不连续调制,存在一些疑惑点,下午闲来无事,把SVPWM下的连续调制和不连续调制的开关状态选择&am…

MyCat核心概念、需求案例讲解、环境准备及分片配置

1.MyCat概念介绍 2.MyCat入门需求 2.1 需求分析 2.2 环境准备 输入以下命令检查服务器防火墙状态 dead代表关闭状态,如果不关闭也可以需要开放特定的端口号!! systemctl status firewalld接着需要在三台服务器上的MySQL上创建三个数据库db0…