简单易懂的Transformer学习笔记

news2024/11/25 20:39:19

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

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

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

相关文章

C++入门篇5---模板

相信大家都遇到过这么一种情况,为了满足不同类型的需求,我们要写多个功能相同,参数类型不同的代码,为此,C引入了泛型编程这一概念,而模板就是实现泛型编程的基础,其实本质就是我们写一个类似”模…

JVM、JRE、JDK三者之间的关系

JVM、JRE和JDK是与Java开发和运行相关的三个重要概念。 再了解三者之前让我们先来了解下java源文件的执行顺序: 使用编辑器或IDE(集成开发环境)编写Java源文件.即demo.java程序必须编译为字节码文件,javac(Java编译器)编译源文件为demo.class文件.类文…

JavaScript + GO 通过 AES + RSA 进行数据加解密

浏览器端搞些小儿科的加密,就好比在黑暗夜空中,点缀了几颗星星,告诉黑客「这里有宝贵信息,快来翻牌」 浏览器端的加密,都是相对安全的。 它的具体安危,取决于里面存在的信息价值,是否值得破解者…

GO学习之 网络通信(Net/Http)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、 文章目录 GO系列前言一、H…

CAPL - XML和TestModule结合实现测试项可选(续)

二、xml文件编写 1、设置xml文件版本号 这个方便我们对xml文件进行文件管理,对于后续工作有进一步帮助。 <?xml version="1.0" ?> 2、设置xml根元素 在CANoe中使用的xml文件根元素我统一都会设置为testmodule,这也是我们在CANoe软件中选择测试用例的最大…

微服务间消息传递

微服务间消息传递 微服务是一种软件开发架构&#xff0c;它将一个大型应用程序拆分为一系列小型、独立的服务。每个服务都可以独立开发、部署和扩展&#xff0c;并通过轻量级的通信机制进行交互。 应用开发 common模块中包含服务提供者和服务消费者共享的内容provider模块是…

七、ESP32 4位数码管显示数字

1. 运行后的效果 可以显示0~9999之间的任何数字 2. 4位数码管与ESP32链接方式 3. 代码</

java网络编程概述及例题

网络编程概述 计算机网络 把分布在不同地理区域的计算机与专门的外部设备用通信线路连成一个规模大、功能强的网络系统&#xff0c;从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。 网络编程的目的 直接或间接地通过网络协议与其他计算机实现…

每天一道leetcode:剑指 Offer 53 - II. 0~n-1中缺失的数字(适合初学者二分查找)

今日份题目&#xff1a; 一个长度为n-1的递增排序数组中的所有数字都是唯一的&#xff0c;并且每个数字都在范围0&#xff5e;n-1之内。在范围0&#xff5e;n-1内的n个数字中有且只有一个数字不在该数组中&#xff0c;请找出这个数字。 示例1 输入: [0,1,3] 输出: 2 示例2 …

Linux 信号signal处理机制

Signal机制在Linux中是一个非常常用的进程间通信机制&#xff0c;很多人在使用的时候不会考虑该机制是具体如何实现的。signal机制可以被理解成进程的软中断&#xff0c;因此&#xff0c;在实时性方面还是相对比较高的。Linux中signal机制的模型可以采用下图进行描述。 每个进程…

网络编程——数据报的组装和拆解

数据包的组装和拆解 一、数据包在各个层之间的传输 二、各个层的封包格式 1、链路层封包格式 -------------------------------------------------------------------------------------------------------------------------------------- | 目标MAC地址&#xff08;6字节&a…

Chatgpt AI newbing作画,文字生成图 BingImageCreator 二次开发,对接wxbot

开源项目 https://github.com/acheong08/BingImageCreator 获取cookie信息 cookieStore.get("_U").then(result > console.log(result.value)) pip3 install --upgrade BingImageCreator import os import BingImageCreatoros.environ["http_proxy"]…

一、Webpack相关(包括webpack-dev-server用以热更新和html-webpack-plugin)

概念与功能&#xff1a; webpack是前端项目工程化的具体解决方案。它提供了友好的前端模块化开发支持&#xff0c;以及代码压缩混淆、处理浏览器端JavaScript的兼容性、性能优化等强大的功能。 快速上手&#xff1a;隔行变色 -S实际是--save的简写&#xff0c;表示安装的第三方…

Mysql存储引擎InnoDB

一、存储引擎的简介 MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE 等。 1、InnoDB存储引擎 从MySQL5.5版本之后&#xff0c;默认内置存储引擎是InnoDB&#xff0c;主要特点有&#xff1a; &#xff08;1&#xff09;灾难恢…

分享21年电赛F题-智能送药小车-做题记录以及经验分享

这里写目录标题 前言一、赛题分析1、车型选择2、巡线1、OpenMv循迹2、灰度循迹 3、装载药品4、识别数字5、LED指示6、双车通信7、转向方案1、开环转向2、位置环速度环闭环串级转向3、MPU6050转向 二、调试经验分享1、循迹2、识别数字3、转向4、双车通信5、逻辑处理6、心态问题 …

Zabbix网络拓扑配置

一、简介 网络拓扑功能是一项非常重要的功能&#xff0c;它可以直观展示网络设备主机状态及端口传输速率等指标信息&#xff0c;帮助运维人员快速发现和定位故障问题&#xff1b;Zabbix同样配备了强大的网络拓扑功能&#xff0c;如何使用Zabbix拓扑图功能创建一个公司网络拓扑…

VMware Workstation及CentOS-7虚机安装

创建新的虚机&#xff1a; 选择安装软件&#xff08;这里选的是桌面版&#xff0c;也可以根据实际情况进行选择&#xff09; 等待检查软件依赖关系 选择安装位置&#xff0c;自主配置分区 ​​​​​​​ 创建一个普通用户 安装完成后重启 点击完成配置&#xff0c;进入登陆界面…

mysql 笔记(一)-mysql的架构原理

mysql体系结构 mysql Server 架构自顶向下大致可以分为网络连接层,服务层,存储引擎和系统文件层.体系架构图如下: 网络连接层提供与mysql服务器建立的支持.常见的java.c.python/.net ,它们通过各自API技术与mysql建立连接. 服务层是Mysql Server 的核心,主要包含系统管理和控…

linux Ubuntu 更新镜像源、安装sudo、nvtop、tmux

1.更换镜像源 vi ~/.pip/pip.conf在打开的文件中输入: pip.conf [global] index-url https://pypi.tuna.tsinghua.edu.cn/simple按下:wq保存并退出。 2.安装nvtop 如果输入指令apt install nvtop报错&#xff1a; E: Unable to locate package nvtop 需要更新一下apt&a…

容灾备份服务器怎么样?

容灾备份服务器是一种用于保护信息系统的设备&#xff0c;它可以在系统出现故障时提供备用服务。容灾备份服务器通常包括两个部分&#xff1a;容灾和备份。容灾是指在遭遇灾害时能保证信息系统能正常运行&#xff0c;帮助企业实现业务连续性的目标。备份是为了应对灾难来临时造…