Transformer架构笔记

Attention is All You Need.


3.Model Architecture

3.1 整体架构如图

在这里插入图片描述

3.2 Encoder与Decoder

  • Encoder:由 N = 6 N=6 N=6个相同的Block/Layer堆叠而成。每个Block有两个子层sub-layer:多头注意力和MLP(FFN,前馈神经网络),每个子层被一个残差链接包围,且后接一个LayerNorm。由于残差链接要求被包围的Block输入输出shape一致(比如Resnet中利用PWConv达到降维、尺寸缩减,来保证输入输出的shape一致)。多头注意力层和FFN层就要满足此条件,因此作者选择固定网络中的Embedding dimension为512。每个子层的输出可以用公式表示为 LayerNorm ( x + SubLayer ( x ) ) \text{LayerNorm}(x + \text{SubLayer}(x)) LayerNorm(x+SubLayer(x)) x x x为输入。

Q: SliceGPT如何解决各层hidden dimension一致的问题?

  • Decoder:同样为6个Block。有两个多头注意力子层,一个FNN子层。且使用自回归的方式:t时刻Decoder的输入,为t时刻以前所有Decoder的输出的总和

    • masked self multi-head attention: mask样本t时刻以后的输入,保证t时刻无法看到未来的输入,避免模型“作弊”。理解起来很简单,因为预测第i个位置的输出时只能依靠第i个位置以前的所有输出单词的语义信息
  • 为什么用LN而不是BN?
    BN针对特征做归一化,LN则针对样本。LN在机器翻译中会用的更多,主要是因为输入序列的长度通常不一致。(在训练中,使用zero padding来解决输入长度不一致的问题)。如果一个batch中输入序列的长度差异很大,则得到的mean,square也会产生震荡。并且在预测时,由于使用全局的mean square,如果输入序列很长,比train set的序列都要长,则预测效果也会变差(因为之前没有统计过)。

3.3 Attention

概括来说,Attention就是一个将query,key,value映射为output的函数。output,k,v,q均为矩阵/向量。output为value的加权平均,权重由key和query的相似度函数计算得到,不同的attention实现会有不同的计算相似度的方法。

  • 注:这里的query,key,value都是指attention的输入。当然有些文章也会指Attention中q, k, v对应的权重矩阵。这里需要指出,输入的shape一般都是一样的: x ∈ R N × d model x \in R^{N \times d_{\text{model}}} xRN×dmodel。其中 N N N为序列长度, d model d_{\text{model}} dmodel为embedding长度。如果是权重矩阵,比如key的 w k ∈ R d model × d k w_k \in R^{d_{\text{model}}\times d_{\text{k}}} wkRdmodel×dk,相当于把输入 x x x投影到另一个维度 d m o d e l → d k d_{model} \to d_k dmodeldk

3.3.1 Scaled Dot-Product Attention

最基本的Attention。 Q Q Q K K K的hidden dimension维度 d k d_k dk V V V d v d_v dv,计算 K K K Q Q Q的内积作为 V V V的权重。具体公式如下:

Attention ( Q , K , V ) = softmax ( Q K T d k ) V (1) \text{Attention}(Q,K,V)=\text{softmax}(\frac{QK^T}{\sqrt{d_k}})V \tag1 Attention(Q,K,V)=softmax(dk QKT)V(1)

Q , K , V Q, K, V QKV 在这里就是输入乘以权重矩阵后的结果: Q ∈ R N × d k , K ∈ R d k × m , V ∈ R m × d v Q \in R^{N \times d_k}, K \in R^{d_k \times m}, V \in R^{m \times d_v} QRN×dkKRdk×mVRm×dv。比如 Q = x w k Q = xw_k Q=xwk

Scaled:除以了 d k \sqrt{d_k} dk 。当 d k d_k dk很大时,维度数过多,各个值可能差别很大,softmax后大的值很大,小的值很小,softmax函数的梯度,会变得很小,train不动。(这个具体是根据softmax函数的一次函数来看)。

  • Mask:mask掉的是key-value,即对t时刻以后的key-query weight设为0(即进入softmax前设一个很大的负数)。

3.3.2 多头注意力

将高维的 Q , V , K Q,V,K QVK(输入)投影到低维,投影h次分别得到h个低维的 Q , V , K Q,V,K QVK,再分别做attention(相当于h个头),把h个头的attention输出并在一起,然后投影回原维度。多头注意力能让模型学习更多参数,相当于学习不同角度的信息。

示意图如Figure 2右图所示:h个头的attention。原特征维度 d model d_\text{model} dmodel,则投影后的维度为 d model / h = d k = d v d_\text{model} / h = d_k = d_v dmodel/h=dk=dv K , Q , V K,Q,V KQV经投影矩阵(权重矩阵),也就是Linear层降维后送入Attention,将h个头的Attention拼接,再经过最后的Linear升维度,得到输出。原文中 h = 8 ,   d model = 512 ,   d k = d v = 64 h=8, \ d_\text{model}=512, \ d_k = d_v = 64 h=8, dmodel=512, dk=dv=64为每个头的hidden dimension长度。

在这里插入图片描述

Attention的参数量。https://blog.csdn.net/qq_46009046/article/details/134417286

具体Multi-Head实现如以下公式:
M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , . . . , h e a d h ) W O w h e r e   h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) \begin{aligned} \mathrm{MultiHead}(Q,K,V)& =\mathrm{Concat}(\mathrm{head}_1,...,\mathrm{head}_\mathrm{h})W^O \\ \mathrm{where~head_i}& =\mathrm{Attention}(QW_{i}^{Q},KW_{i}^{K},VW_{i}^{V}) \end{aligned} MultiHead(Q,K,V)where headi=Concat(head1,...,headh)WO=Attention(QWiQ,KWiK,VWiV)

W i Q ∈ R d m o d e l × d k , W i K ∈ R d m o d e l × d k , W i V ∈ R d m o d e l × d v W_i^Q\in\mathbb{R}^{d_{\mathrm{model}}\times d_k},W_i^K\in\mathbb{R}^{d_{\mathrm{model}}\times d_k},W_i^V\in\mathbb{R}^{d_{\mathrm{model}}\times d_v} WiQRdmodel×dk,WiKRdmodel×dk,WiVRdmodel×dv W O ∈ R h d v × d m o d e l W^O\in\mathbb{R}^{hd_v\times d_{\mathrm{model}}} WORhdv×dmodel均为权重矩阵(投影矩阵)。 Q ,   K ,   V ∈ R N × d m o d e l Q ,\ K,\ V \in \mathbb{R}^{N \times d_{model}} Q, K, VRN×dmodel

3.3.3 Attention的不同应用

假设输入序列长为 N N N

  1. Encoder:输入shape为 R ∈ N × d model R \in {N \times d_\text{model}} RN×dmodel。输出shape与输入相同。

  2. Decoder中的Masked-MHSA:与Encoder中的attention类似,不过用了mask保证自回归性。

  3. Cross-Attention:Encoder的输出作为key-value,之前的Decoder输出信息的总和得到的embedding作为query,相当于考虑decoder与encoder的embedding之间的相关性。具体到机器翻译中,如英译中,就是中文某个字与英文某个句子(多个字)的关系。

3.4 Point-Wise FFN

简而言之就是两个全连接层。Point指的是每个word embedding,即针对每个word做处理。与PWConv类似但参数量不同。
PWFFN为: in_embedding × out_embedding \text{in\_embedding} \times \text{out\_embedding} in_embedding×out_embedding,而PWConv为: in_channel × out_channel \text{in\_channel} \times \text{out\_channel} in_channel×out_channel
为什么能用Point-Wise FFN,也就是对每个word做投影?因为Attention部分已经汇聚了语义信息(词与词之间的相关度),MLP相当于只是做维度的变换。

3.5 Embeddings and Softmax

embedding层中权重乘以 d model \sqrt{d_\text{model}} dmodel ,因为L2Norm把权重惩罚得很小。

3.6 Positional Encoding

Attention中没有考虑单词的位置信息,所以理论上来说,如果不加入位置信息,把输入word顺序打乱之后,attention输出应该一致。所以要加入位置编码信息。

预测过程:

Encoder:直接获得整个句子的输入的Embedding,经过6个block,然后得到Encoder的输出,比较直接。
Decoder:先输入起始符(S),经过n层decoder,每一层decoder都要通过masked自注意力机制,以及交互注意力机制(和encoder输出的k,v进行计算,这里就说明decoder在交互注意力不需要再算k,v),在最后一层输出预测结果。然后把最新的预测结果以及历史预测结果综合起来,再放到decoder中,做下一个word的预测,直到得到终止符(E)。

训练过程

Encoder:与预测过程类似。

Decoder:与预测过程不同的是,采用Teacher Forcing的方式,即直接告诉Decoder整个目标序列(也就是正确的输出结果),但是由于预测阶段中,不可能直接告诉你答案是上面,因此会加一些随机mask,比如对15%的单词加入mask,以保证训练效果。


文献标注

Attention的参数数量: https://blog.csdn.net/qq_46009046/article/details/134417286

Attention的训练,推理过程: https://blog.csdn.net/AIcar_lrm/article/details/138577652


问题

  1. auto regressive 是什么意思?

    自回归模型:自变量和因变量应当属于同一个分布。比如根据前n天的股票价格,预测下一天的股票价格。(过去时候的输入作为当前时刻的输入)

  2. 为什么要除以 d k \sqrt {d_k} dk ?
    • 在数值过大/过小的情况下,softmax的偏导数值过小,造成学习困难。除以$\sqrt {d_k} $相当于将输入控制在均值为0,方差为1,控制了数量级。还起到了归一化的作用
  3. BN和LN是什么。Transformer中用的是什么?

    LN:对每个Batch中,所有样本基于所有维度进行归一化,均值和方差数量根据batch_size决定()。
    BN:对各个Batch中的样本,在各个维度进行归一化,均值和方差数量根据batch中的word数量决定(图片的话是维度)。
    使用的实际上是InstanceNorm,对每个instance的所有维度做归一化,但是pytorch中可以用nn.LayerNorm函数实现

实现细节:

  • d m o d e l = 512 d_{model}=512 dmodel=512,模型中的embedding dimension和output的维度固定为512,以保证训练效率
  • h = 8 h = 8 h=8代表使用8个头的注意力
    d k = d v = d m o d e l / h = 64 d_k = d_v = d_{model} / h=64 dk=dv=dmodel/h=64 为每个矩阵得到的向量维度。
    ding dimension和output的维度固定为512,以保证训练效率
  • h = 8 h = 8 h=8代表使用8个头的注意力
    d k = d v = d m o d e l / h = 64 d_k = d_v = d_{model} / h=64 dk=dv=dmodel/h=64 为每个矩阵得到的向量维度。

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

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

相关文章

网络安全简单入门与扫描

网络安全简单入门 内容大纲 策略制定安全工具其他 1、安全策略 1.1、安全三要素 要全面地认识一个安全问题,我们有很多种办法,但首先要理解安全问题的组成属性。前人通过无数实践,最后将安全的属性总结为安全三要素,简称CIA。 安全三要素是安全的基本组成元素,分别是机密性…

在WPF程序中实现PropertyGrid功能

使用C#开发过Windows Forms的都知道,在Windows Forms程序中,有一个PropertyGrid控件,可以用于显示对象的属性,在WPF中并没有默认提供此功能的控件,今天以一个简单的小例子,简述在WPF中借助WinForm的Propert…

大模型时代的具身智能系列专题(十四)

冯晨团队 冯晨是纽约大学的副教授。他对通过多学科使用启发研究实现机器人主动和协作感知和学习感兴趣,这些研究源自建筑、制造和运输领域。在纽约大学之前,冯晨是马萨诸塞州剑桥市三菱电机研究实验室 (MERL) 计算机视觉小组的研究科学家,专…

力扣-Hot100-栈【算法学习day.40】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…

RT_Thread内核源码分析(三)——线程

目录 1. 线程结构 2. 线程创建 2.1 静态线程创建 2.2 动态线程创建 2.3 源码分析 2.4 线程内存结构 3. 线程状态 3.1 线程状态分类 3.2 就绪状态和运行态 3.3 阻塞/挂起状态 3.3.1 阻塞工况 3.4 关闭状态 3.4.1 线程关闭接口 3.4.2 静态线程关闭 3.4.3 动态线程关…

043 商品详情

文章目录 详情页数据表结构voSkuItemVo.javaSkuItemSaleAttrVo.javaAttrValueAndSkuIdVo.javaSpuAttrGroupVo.javaGroupAttrParamVo.java pom.xmlSkuSaleAttrValueDao.xmlSkuSaleAttrValueDao.javaAttrGroupDao.xmlAttrGroupServiceImpl.javaSkuInfoServiceImpl.javaSkuSaleAtt…

硬件知识 cadence16.6 原理图输出为pdf 网络名下划线偏移 (ORCAD)

1. cadence原理图输出为PDF网络名下划线偏移 生这种情况的原因 1. 设计的原理图图纸大小比正常的 A4图纸大。 2. 打印为PDF 的时候,打印机的设置有问题。 2.cadence原理图输出为 PDF网络名下划线偏移的情况 可以看到上图,网络名往上漂移。 3. 解决办法 …

Spring-boot3.4最新版整合swagger和Mybatis-plus

好家伙,今天终于开始用spring-boot3开始写项目了,以后要彻底告别1.x和2.x了,同样的jdk也来到了最低17的要求了,废话不多说直接开始 这是官方文档的要求jdk最低是17 maven最低是3.6 一. 构建工程,这一步就不需要给大家解释了吧 二. 整合Knife4j 1.大于 …

从零开始:如何使用第三方视频美颜SDK开发实时直播美颜平台

开发一个具有实时美颜功能的直播平台,能够显著提高用户体验和内容质量。而利用第三方视频美颜SDK可以大大简化开发过程,加快产品上市速度。本篇文章,小编将从零开始,详细讲解如何使用第三方视频美颜SDK开发一个实时直播美颜平台。…

ROS入门学习ONE

ros入门玩法1:控制小龟龟 终端1输入 sudo apt install ros-noetic-rqt-steering 新建终端2(快捷键CtrlAltT),打开控制台 roscore //启动ros系统 回到原终端 rosrun rosrun rqt_robot_steering rqt_robot_steering 新建终端3,…

shell脚本(二)

声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…

简单理解下基于 Redisson 库的分布式锁机制

目录 简单理解下基于 Redisson 库的分布式锁机制代码流程:方法的调用:具体锁的实现:riderBalance 方法:tryLock 方法(重载):tryLock 方法(核心实现): 简单理解…

小鹏汽车智慧材料数据库系统项目总成数据同步

1、定时任务处理 2、提供了接口 小鹏方面提供的推送的数据表结构: 这几个表总数为100多万,经过条件筛选过滤后大概2万多条数据 小鹏的人给的示例图: 界面: SQL: -- 查询车型 select bmm.md_material_id, bmm.material_num, bm…

LeetCode 3244.新增道路查询后的最短距离 II:贪心(跃迁合并)-9行py(O(n))

【LetMeFly】3244.新增道路查询后的最短距离 II:贪心(跃迁合并)-9行py(O(n)) 力扣题目链接:https://leetcode.cn/problems/shortest-distance-after-road-addition-queries-ii/ 给你一个整数 n 和一个二维…

华为无线AC+AP组网实际应用小结

之前公司都是使用的H3C的交换机、防火墙以及无线AC和AP的,最近优化下无线网络,说新的设备用华为的,然后我是直到要部署的当天才知道用华为设备的,就很无语了,一点准备没有,以下为这次的实际操作记录吧&…

Fakelocation Server服务器/专业版 Windows11

前言:需要Windows11系统 Fakelocation开源文件系统需求 Windows11 | Fakelocation | 任务一 打开 PowerShell(以管理员身份)命令安装 Chocolatey Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProto…

C语言基础学习:抽象数据类型(ADT)

基础概念 抽象数据类型(ADT)是一种数据类型,它定义了一组数据以及可以在这组数据上执行的操作,但隐藏了数据的具体存储方式和实现细节。在C语言中,抽象数据类型(ADT)是一种非常重要的概念&…

基于深度学习CNN算法的花卉分类识别系统01--带数据集-pyqt5UI界面-全套源码

文章目录 基于深度学习算法的花卉分类识别系统一、项目摘要二、项目运行效果三、项目文件介绍四、项目环境配置1、项目环境库2、环境配置视频教程 五、项目系统架构六、项目构建流程1、数据集2、算法网络Mobilenet3、网络模型训练4、训练好的模型预测5、UI界面设计-pyqt56、项目…

Bokeh实现大规模数据可视化的最佳实践

目录 引言 一、Bokeh简介 二、安装Bokeh 三、数据准备 四、性能优化 五、创建图表 六、添加交互功能 七、应用案例 八、高级技巧 九、总结 引言 在数据科学领域,数据可视化是一个至关重要的环节。通过可视化,我们可以直观地理解数据的特征和趋势,为数据分析和决策…

Easyexcel(4-模板文件)

相关文章链接 Easyexcel(1-注解使用)Easyexcel(2-文件读取)Easyexcel(3-文件导出)Easyexcel(4-模板文件) 文件导出 获取 resources 目录下的文件,使用 withTemplate 获…