关于Transfomer的思考

为何诞生

    在说transformer是什么,有什么优势之类的之前,先谈一谈它因何而诞生。transformer诞生最重要的原因是早先的语言模型,比如RNN,由于其本身的训练机制导致其并行度不高,特别是遇到一些长句子的情况下。其次,是由于自注意力的产生。自注意力是什么,Attention Is All You Need原文有一个比较不错的解释:

自注意力机制,是一种将序列中不同位置元素做关联学习进而计算序列表征的方法

     Transformer完全借助自注意力、MLP以及LayerNorm层完成了语言模型的建模工作,完全摈弃了卷积以及递归模型结构。

缩放点积注意力

    transformer的结构没什么可说的,就是encoder+decoder的结构堆叠,这块整体上没有太大创新,创新点在于其encoder和decoder内部使用了自注意力,这个注意力结构的使用使其在目前绝大多数的自然语言处理任务上处于领先地位,这个自注意力即原文所谓的缩放点积注意力(Scaled Dot-Product Attention,下文简称SDPA)。

图1. 缩放点积注意力

    如图1所示,形式化为:

图 2. 缩放点积注意力公式

    点积注意力、加和注意力是普遍使用的两种注意力函数,它们理论计算复杂度一致,但是前者由于高度优化的矩阵运算库的存在,使其在实际应用过程中更加高效。值得注意的一点是softmax的输入为什么要除以一个常数,可以参考原文从统计视角给出的解释。

图 3. 尺度缩放的原因

 

多头自注意力 

    作者认为,基于单一的SDPA不足以发挥其优势,通过执行多次不同的SDPA可以更好的挖掘句子的语义,所以多头自注意力产生了。多头注意力机制能使模型从多个不同的低维表示空间中提取不同的语义信息,它的基本结构如下:

图 4. 多头自注意力

假设现在需要执行SDPA的次数为h,它的基本做法是:

  1.  将Q、K和V分别通过h组不同的线性映射层分别将它们映射为d_kd_k 和 d_v 维;
  2.  对映射完的每一组并行的执行SDPA,产生 d_v 维的输出;
  3.  h组SDPA的输出进行concat操作;
  4.  concat的结果进一步做线性映射得到最终输出;

  从图4可以看出,多头的SDPA操作是并行执行的;同时,原文中将每个头的线性映射层的维度降为了原先单头的 \frac{1}{h}(单头是512),所以最终的时空开销和单头的基本一致。

位置编码

    由于transformer里不再有卷积和递归结构,为了模型能利用序列中不同token的位置信息,需要单独设立一个位置编码embeding,和序列中token的embeding维度一致,因此可以直接做加和操作。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读——MoCo

Momentum Contrast for Unsupervised Visual Representation Learning 动量在数学上理解为加权移动平均: yt-1是上一时刻输出,xt是当前时刻输入,m是动量,不想让当前时刻输出只依赖于当前时刻的输入,m很大时&#xff0…

DP-不同的二叉搜索树

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n 3 输出:5示例 2: 输入:n 1 输出:1提…

kubernetes部署集群

kubernetes部署集群 集群部署获取镜像安装docker[集群]阿里仓库下载[集群]集群部署[集群]集群环境配置[集群]关闭系统Swap[集群]安装Kubeadm包[集群]配置启动kubelet[集群]配置master节点[master]配置使用网络插件[master]node加入集群[node]后续检查[master]测试集群 集群部署…

算法思想总结:双指针算法

一、移动零 . - 力扣&#xff08;LeetCode&#xff09; 移动零 该题重要信息&#xff1a;1、保持非0元素的相对位置。2、原地对数组进行操作 思路&#xff1a;双指针算法 class Solution { public:void moveZeroes(vector<int>& nums){int nnums.size();for(int cur…

专升本 C语言笔记-06 常用的3种输入输出函数

1.scanf() 与 printf() 的使用 scanf() 格式化输入数据 格式:scanf("格式控制字符串",参数地址列表) scanf("%d,%d,%d",&a,&b,&c); printf("a %d\n",a); printf("b %d\n",b); printf("c %d\n",c); 注意 注…

ArcGIS模型构建器Pro版_更多花活演示

相比较ArcMap的模型构建器&#xff0c;Pro里最主要的变化就是增加了一组逻辑工具&#xff1a; 逻辑工具用于控制模型中的流程流&#xff0c;它们返回的结果是true或false。 这个结果一般用于 if-else 分支逻辑&#xff0c;例如&#xff1a;如果某字段存在的时候&#xff0c;执…

【vue baidu-map】实现百度地图展示基地,鼠标悬浮标注点展示详细信息

实现效果如下&#xff1a; 自用代码记录 <template><div class"map" style"position: relative;"><baidu-mapid"bjmap":scroll-wheel-zoom"true":auto-resize"true"ready"handler"><bm-mar…

力扣78. 子集

Problem: 78. 子集 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.定义一维数组track用于记录决策路径&#xff0c;二维数组res用于存储所有的子集&#xff1b; 2.决策阶段&#xff1a;从0阶段起来&#xff08;0阶段决策路径中为空集&#xff09;&#xff0c;每…

力扣每日一题 卖木头块 线性DP

Problem: 2312. 卖木头块 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 灵神题解 复杂度 时间复杂度: O ( n m ( m n ) ) O(nm(mn)) O(nm(mn)) 空间复杂度: O ( n m ) O(nm) O(nm) Code class Solution {public long sellingWood(int n, int m, int…

“城市绿肺诊断:集成GIS、RS、VORS模型、CCDM模型、geodetecto、GWR模型技术深入解析生态系统与城镇化协调发展“

基于GIS、RS、VORS模型、CCDM模型、geodetecto、GWR模型集成的生态系统健康的耦合协调分析 城市群是一国经济发展水平的象征&#xff0c;也是一国经济发展到一定阶段的标志&#xff0c;我国城市群建设体量不断增加&#xff0c;将成为全球经济的核心&#xff0c;中国城市群的建…

除了「au revoir」,「再见」还能怎么说?柯桥成人学外语来银泰附近

1. Je dois y alle#15857575376r I have to go there Y there&#xff0c;意思是“我要走了”。 例如&#xff0c;”Moi, je dois y aller.” 对不起&#xff0c;我该走了。 如果你和同伴都要离开&#xff0c;那就可以说"On y va"&#xff0c;它相当于英语里…

应用程序开发教学:医保购药系统源码搭建实战

医保购药系统作为医疗服务的重要组成部分&#xff0c;其开发不仅能够为患者提供更加便捷的购药服务&#xff0c;还能够提高医疗机构的管理效率。接下来&#xff0c;小编将为您讲解医保购药系统的源码搭建过程&#xff0c;介绍应用程序开发的基本步骤和技巧。 一、系统设计 我…