当前位置: 首页 > news >正文

简单易懂的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

相关文章:

简单易懂的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.…...

C语言经典小游戏之三子棋(超详解释+源码)

“纵有疾风来,人生不言弃,风乍起,合当奋意向此生。” 今天我们一起来学习一下三子棋小游戏用C语言怎么写出来? 三子棋小游戏 1.游戏规则介绍2.游戏准备3.游戏的实现3.1生成菜单3.2游戏的具体实现3.2.1初始化棋盘3.2.2打印棋盘3.2…...

宝塔Linux面板点击SSL闪退打不开?怎么解决?

宝塔Linux面板点击SSL证书闪退如何解决?旧版本的宝塔Linux面板确实存在这种情况,如何解决?升级你的宝塔Linux面板即可。新手站长分享宝塔面板SSL闪退的解决方法: 宝塔面板点击SSL证书闪退解决方法 问题:宝塔Linux面板…...

Problem: 6953. 判断是否能拆分数组

Problem: 6953. 判断是否能拆分数组 文章目录 思路解题方法复杂度Code 思路 针对题目中的以下目标,可以转换寻求数组中是否存在前后两个元素之和>m的情况,如果存在则返回ture,如果不存在则返回false。能这样转换的原因是,如果…...

MobiSys 2023 | 多用户心跳监测的双重成形声学感知

注1:本文系“无线感知论文速递”系列之一,致力于简洁清晰完整地介绍、解读无线感知领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; MobiCom, Sigcom, MobiSys, NSDI, SenSys, Ubicomp; JSAC, 雷达学报 等)。本次介绍的论文是:<<MobiSys’23,Multi-User A…...

Netty:ChannelInitializer添加到ChannelPipeline完成任务以后会自动删除自己

说明 io.netty.channel.ChannelInitializer是一个特殊的ChannelInboundHandler。它的主要作用是向 Channel对应的ChannelPipeline中增加ChannelHandler。执行完ChannelInitializer的initChannel(C ch)函数以后&#xff0c;ChannelInitializer就会从ChannelPipeline自动删除自己…...

【VUE】项目本地开启https访问模式(vite4)

在实际开发中&#xff0c;有时候需要项目以https形式进行页面访问/调试&#xff0c;下面介绍下非vue-cli创建的vue项目如何开启https 环境 vue: ^3.2.47vite: ^4.1.4 根据官方文档&#xff1a;开发服务器选项 | Vite 官方中文文档 ps&#xff1a;首次操作&#xff0c;不要被类…...

【状态估计】一维粒子滤波研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

设计模式-迭代器模式在Java中使用示例

场景 为开发一套销售管理系统&#xff0c;在对该系统进行分析和设计时&#xff0c;发现经常需要对系统中的商品数据、客户数据等进行遍历&#xff0c; 为了复用这些遍历代码&#xff0c;开发人员设计了一个抽象的数据集合类AbstractObjectList&#xff0c;而将存储商品和客户…...

Maven入职学习

一、什么是Maven&#xff1f; 概念&#xff1a; Maven是一种框架。它可以用作依赖管理工具、构建工具。 它可以管理jar包的规模、jar包的来源、jar包之间的依赖关系。 它的用途就是管理规模庞大的jar包&#xff0c;脱离IDE环境执行构建操作。 具体使用&#xff1a; 工作机…...

【多音音频测试信号】具有指定采样率和样本数的多音信号,生成多音信号的相位降低波峰因数研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

LeetCode150道面试经典题-删除有序数组中的重复项(简单)

1.题目 给你一个 升序排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &#xff0c…...

人大金仓数据库Docker部署

docker 搭建 yum -y install yum-utilsyum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposystemctl start docker.servicesystemctl enable docker.servicesystemctl status docker.service 配置Docker cd /etc/docker/ vi da…...

Leetcode-每日一题【剑指 Offer 07. 重建二叉树】

题目 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 示例 1: Input: preorder [3,9,20,15,7], inorder [9,3,15,20,7]Output: [3,9,20,null,null,15,7] 示例 2: Input: preo…...

Shell编程快速入门

Shell编程快速入门 脚本格式要求 脚本以#!/bin/bash开头脚本需要有可执行权限 脚本的常用执行方式 方式1&#xff1a;输入脚本的绝对路径或相对路径方式2&#xff1a;sh脚本 Shell的变量 Shell变量介绍 Linux Shell中的变量分为系统变量和用户自定义变量 系统变量&#…...

wpf 3d 坐标系和基本三角形复习

wpf 3d 坐标系的描述见此&#xff0c; WPF 3d坐标系和基本三角形_wpf 坐标系_bcbobo21cn的博客-CSDN博客 X轴正向向右&#xff0c;Y轴正向向上&#xff1b;Z轴&#xff0c;正向是从屏幕里边出来&#xff0c;负向是往屏幕里边去&#xff1b;坐标原点是在呈现区域的中心&#x…...

如何安全变更亚马逊收款账户?

有太多的卖家想知道如何安全变更亚马逊收款账户&#xff0c;因为更改了第三方收款账户可能会导致二次视频认证或者增强视频。真的是这样吗&#xff1f; 其实不推荐亚马逊店铺正常运营之后去变更信用卡&#xff0c;收款账户等重要资料的&#xff0c;因为玩黑科技的卖家也真的多…...

大数据面试题:Hadoop中的几个进程和作用

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 可回答&#xff1a;1&#xff09;启动Hadoop&#xff0c;都会有什么进程 参考答案&#xff1a; 1&#xff09;NameNode&#xff1a;Master&#xf…...

题解:ABC276D - Divide by 2 or 3

题解&#xff1a;ABC276D - Divide by 2 or 3 题目 链接&#xff1a;Atcoder。 链接&#xff1a;洛谷。 难度 算法难度&#xff1a;入门。 思维难度&#xff1a;入门。 调码难度&#xff1a;入门。 综合评价&#xff1a;极简。 算法 数论。 思路 由大脑可知&#x…...

后台管理系统

1.1 项目概述 简易后台管理系统是一个基于Vue3ElemrntPlus的后台管理系统&#xff0c;提供了用户登录、记住密码、数据的增删改查、分页、错误信息提示等功能&#xff0c;旨在协助管理员对特定数据进行管理和操作。 没有后台对接&#xff0c;数据源为假数据。 全部代码已上传G…...

VisualCppRedist AIO:一站式解决Windows软件运行依赖问题的终极指南

VisualCppRedist AIO&#xff1a;一站式解决Windows软件运行依赖问题的终极指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况&…...

5大维度解析开源飞控核心技术:PX4自主飞行全链路实战指南

5大维度解析开源飞控核心技术&#xff1a;PX4自主飞行全链路实战指南 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot 无人机飞控开发是融合多学科知识的复杂工程领域&#xff0c;而PX4作为开源飞控…...

告别B站缓存碎片化:3步智能合并视频的终极解决方案

告别B站缓存碎片化&#xff1a;3步智能合并视频的终极解决方案 【免费下载链接】BilibiliCacheVideoMerge 项目地址: https://gitcode.com/gh_mirrors/bi/BilibiliCacheVideoMerge 你是否曾在高铁上打开B站缓存视频准备消遣时光&#xff0c;却发现播放器卡在开头几秒后…...

Wan2.2-I2V-A14B开源模型:符合ISO/IEC 23053 AI系统可解释性要求

Wan2.2-I2V-A14B开源模型&#xff1a;符合ISO/IEC 23053 AI系统可解释性要求 1. 镜像概述与核心价值 Wan2.2-I2V-A14B私有部署镜像是一款专为文生视频场景优化的AI模型运行环境。这个镜像最突出的特点是完全符合ISO/IEC 23053标准对AI系统可解释性的要求&#xff0c;让用户不…...

如何快速实现免费离线OCR:Umi-OCR完整使用指南

如何快速实现免费离线OCR&#xff1a;Umi-OCR完整使用指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内置多国语言库。 …...

Swift-All部署教程:快速搭建多模型推理与微调环境

Swift-All部署教程&#xff1a;快速搭建多模型推理与微调环境 1. 从零开始&#xff1a;为什么你需要Swift-All&#xff1f; 如果你正在研究大模型&#xff0c;或者想把大模型用在实际项目里&#xff0c;大概率会遇到这几个头疼的问题&#xff1a; 模型太多&#xff0c;下载太…...

5步突破:思源宋体TTF字体库的商业级应用方案

5步突破&#xff1a;思源宋体TTF字体库的商业级应用方案 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文排版的专业性发愁吗&#xff1f;面对商业字体高昂的授权费用和免费字…...

深度解析ViGEmBus:如何高效构建Windows内核级游戏控制器模拟框架

深度解析ViGEmBus&#xff1a;如何高效构建Windows内核级游戏控制器模拟框架 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是一款基于Windows内核…...

原神帧率解锁工具进程管理实战:解决启动冲突的3个鲜为人知的解决技巧

原神帧率解锁工具进程管理实战&#xff1a;解决启动冲突的3个鲜为人知的解决技巧 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 问题现象&#xff1a;启动失败的常见场景 当你双击原神…...

javaee-网络原理2

⽹络原理-TCP/IP ①应用层&#xff1a;规则 → 格式 → 实际用途讲解↓ (1)定义应用之间怎么通信比如&#xff1a;浏览器怎么请求网页、APP 怎么跟服务器发数据。 谁先说话什么时候发请求什么时候回响应出现错误怎么办一次会话怎么开始、怎么结束 比如 HTTP 协议就明确规定&…...