Transformer学习笔记

2023-11-19

一. Transformer诞生背景

        Transformer模型是解决序列转录问题的一大创新。在Transformer模型之前,序列转录模型都或多或少的基于复杂的循环卷积神经网络。

        循环神经网络的计算是时序性的,t位置的计算必须基于之前所有位置的计算结果,因此循环神经网络上的计算难以并行,效率较低。而且在翻译长句时,循环或卷积神经网络对之前文本的“记忆”是有限的,采用时序计算很可能丢掉之前的重要信息。

        为了改善长句翻译过程中信息丢失的问题,诞生了Attention注意力机制。注意力机制使得模型能够不断吸收输入序列上下文中的有用信息,且与当前词汇关联性越强的词汇,注意力得分越高,对该词汇影响越大。理论上只要拥有足够的算力,便能够兼顾无限长的句子信息。

        Transformer的革新性在于,完全基于注意力机制来解决序列转录问题,彻底丢弃了传统模型中循环或卷积的部分,使得序列转录工作能够并行实现,大大提高了工作效率。Transformer模型应用了两种注意力机制,一是Encoder、Decoder中都存在的Self-attention机制,使每一层编(解)码器能够兼顾上一次编(解)码器的全部输出信息;二是仅存在与Decoder中的Encoder-Decoder Attention机制,使每一层解码器能够兼顾编码器的全部输出信息,提高了信息利用率,综合了上下文对翻译结果的影响。

二. Transformer结构

整体结构:Encoder+Decoder

 

(一)编码器Encoder

1. 结构

(1)编码器由N层相同的编码结构(Layer)垂直叠加构成。

    Transformer原论文中设定N=6,在实际应用中可以调整编码器的层数以适应具体问题。

    多层相同编码器叠加的作用:每一层能够学习不同的内容,如某些层学习词汇,某些层学习语法,某些层学习逻辑。

(2)每一层编码器分为两个子层(Sublayer):

  • 自注意力(Self Attention) ——通过样本自身词汇之间的关系得到注意力值(Attention);挖掘某个词汇A与该句子中其他词汇的联系,在编码词汇A时,对句子中其他不同词汇投入不同的“注意力”,从而能够起到联系上下文的效果,不断调整词汇A的编码结果。
  • 全连接的前馈神经网络(Feed Forward Neural Network)——由于在之前的Self-attention中已经考虑了不同向量直接的联系,因此在FFNN层中,数据可以相互独立并行流动。

2. 作用

        编码器将输入序列转化为浮点数编码,并通过Multi-head Attention调整编码内容。

(二)解码器 Decoder

1. 结构

(1)与编码器一致,解码器由N层相同的编码结构(Layer)垂直叠加构成。

(2)每层解码器分为3个子层(Sublayer)

  • Self-attention:与编码器结构相同
  • FFNN:与编码器结构相同
  • Encoder-Decoder Attention:与Self-attention相似,只是计算的是上一层解码器的输出对编码器最终输出的注意力

2. 作用

        译码器将输入的编码转化为目标“语言”的词向量,输出序列翻译的结果。

三. 数据流动过程

(一)数据准备——位置编码

        Transformer丢失了时序信息,无法捕捉序列顺序,输出结果也与输入序列中词汇的顺序关系不大。然而,在实际应用中,序列中词汇的位置也是重要信息,因此Transformer模型设计了如下编码规则,对序列中词汇的位置进行编码:

         选用正余弦函数进行位置编码的原因是正余弦函数具有如下性质:

sin(\alpha+\beta)=sin\alpha\cdot cos\beta+cos\alpha\cdot sin\beta

cos(\alpha+\beta)=cos\alpha\cdot cos\beta-sin\alpha\cdot sin\beta

        说明位置\alpha+\beta的位置编码能够由位置\alpha的正余弦线性表示,因此用正余弦函数编码便于反应词汇的相对位置关系。

(二)编码

1. Word Embedding 词嵌入

用词嵌入算法将词汇转化成词向量,词向量作为最底层编码器的输入。原论文使用的词向量维度为d_{model}=512

2. 编码器数据输入

每个编码器的输入是一个向量列表

  • 最底层编码器:输入为词向量列表
  • 其他编码器:输入为紧邻的下一层编码器的输出
  • 向量长度等于词向量维度,为512,列表长度一般设置为最长语句(Sequence)中单词个数

3. Self-attention 自注意力计算

核心内容:通过整个输入样本本身,为每个输入向量x(对应一个词)学习一个权重,作为衡量词y与词x关联性的标准——注意力

输出结果:将输入向量x转化为一个新向量z,z为所有词汇生成的Value以注意力为权重的加权总和。

(1)数据结构 => q、k、v向量

根据输入向量[x1,x2,...,xn],通过矩阵乘法(输入向量x_i与相应的权重矩阵W^j相乘)生成3个新向量:Query(q)、Key(k)、Value(v)。

其中权重矩阵维度是512×64 => 向量q、k、v长度缩短为64

  • Query

q_i = x_i \times W^Q

        Query是信息检索的目标,在Self-attention模型中,Query是由样本x_i通过空间变换W^Q提取得到的。

  • Key

 k_i=x_i\times W^K

        在信息检索领域,Key是检索的关键词,计算Query与Key的匹配程度score,匹配程度score最高的Key对应的Value即为所求。

        在Self-attention模型中,Key是由样本x_i通过空间变换W^K得到的。

        score的计算方法为向量内积score=q\odot k^T,当两向量正交时score为0,认为q与k无关。

        用这种方法计算出的score,进行归一化与Softmax函数的处理,即可得到注意力Attention

  • Value

v_i=x_i\times W^v

        Value是Query的检索结果,由样本x_i通过空间变换W^V得到。

        一般地信息检索问题中,系统只要根据Query给出一系列Value即可完成任务,但Transformer模型并不是要得到一系列Value的值,而是要为每个Value提供一个权重,并计算所有Value的加权和。

        v_j的权重w_j计算公式如下:

w_j=Softmax(\frac{score}{\sqrt{d_k}})

        从Query、Key、Value的生成方式可以得出“自注意力”一词的本质——Query、Key、Value全部都是基于样本x本身生成的,所有的注意力都是基于样本本身进行计算,因此称为自注意力机制。

(2)Self-Attention算法

     实际算法实现以矩阵形式进行:

  • 词向量构成输入矩阵X,输入矩阵X每一行为一个词
  • 根据输入X,生成向量矩阵QKV

Q=X\times W^Q

K=X\times W^k

V=X\times W^V 

  • 计算每条Query q_i与矩阵K中所有向量k_j的匹配度得分score_{ij},生成匹配度得分矩阵S

S=Q\times K^T

  • 归一化

 {S}'=\frac{S}{\sqrt{d_k}}=\frac{Q\times K^T}{\sqrt{d_k}}

        这里的d_k是指Key的长度,在Transformer模型中,Query、Key、Value是等长的,维度均为64。归一化的目的是缩小激活函数Softmax输出的差距,获得更稳定的梯度。若不做归一化,则会出现Softmax函数输出集中在0和1两端的现象。

         如上图所示,经过归一化

Softmax(\frac{q1\cdot k1}{\sqrt{d_k}})=0.88

Softmax(\frac{q2\cdot k2}{\sqrt{d_k}})=0.12

        若不经过归一化

Softmax(q1\cdot k1)=0.999

Softmax(q2\cdot k2)=0.001

        经过Softmax函数预测的概率值过于集中在0和1两端,不能充分吸收其他词汇中的有用信息,也就不能发挥Attention机制的优势。

  • 激活

{S}''=Softmax({S}')=Softmax(\frac{Q\times K^T}{\sqrt{d_k}})

Softmax(t)=\frac{e^t}{\Sigma e^t}

  • 加权求和,得到输出

Z=Softmax(\frac{Q\times K^T}{\sqrt{d_k}})\times V

(3)Multi-head Attention 多头注意力机制

        将X分别输入到h个Self-attention系统,得到h个输出矩阵Z_1,Z_2,...,Z_h,将所有输出矩阵拼接在一起得到整个输出矩阵Z。拼接方法如下:

         首先将矩阵Z_1,Z_2,...,Z_h(m\times n)水平联结成一个矩阵B(m\times hn),再用该矩阵乘输出权重矩阵W^O(hn\times r),即可得到总的输出矩阵

Z=B\times W^O

        Z的维度为(m\times r)

4. 前馈神经网络 FFNN

        每个位置分量(position)对应一个完全相同的全连接前馈神经网络,对Self-attention层的输出作独立的并行处理。

        激活函数如下:

         共包含两次线性变换和一次ReLU变换。

        ReLU激活函数:

         ReLU函数是分段线性函数,将负值处理成0;在Transformer模型中,将ReLU函数中的线性部分从y=x扩充为y=W_1x+b_1

【注意】同一层中所有FFNN网络,参数W_1,W_2,b_1,b_2均相同,而不同层次,参数值可不同。

(三)解码

1. 解码器数据输入

         编码器的输出结果作为编码器的输入。

2. Encoder-Decoder注意力机制

        与自注意力机制类似,也是通过QKV矩阵计算注意力值,并通过注意力加权调整编码。与自注意力机制的区别在于,Encoder-Decoder注意力机制中,Q矩阵由编码器的最终输出矩阵生成,KV矩阵由上一层解码器的输出矩阵生成。

        由此可知,Encoder-Decoder机制的作用是,使每一层解码器在解码的过程中能够兼顾编码器输出的全部信息,也就是兼顾所有输入序列的信息

3. Masked Multi-head Attention

        在解码器的Self-attention层,学习v_t的注意力权重时应避免并能吸收t位置之后的信息,因此需要将v_i,i>t的权值设置为-\infty,从而经过Softmax函数得到的权重为0,如此便可消除i>t位置的影响,称为Masked Multi-head Attention。

四. 未解决的问题

1.计算q、k、v时,用到的对x实施空间变换的权重矩阵W是什么?

2.为什么q、k、v可以由同一个向量经过不同的空间变换得到,他们的内在联系是什么?

3.为什么编码时学习v_t的注意力权重能够吸收t位置之后的信息,而解码时却不可以,需要采用“Mask”方式呢?

4. 残差连接方法还需要进一步理解和学习。

参考资料:

1. Vaswani A , Shazeer N , Parmar N , et al. Attention Is All You Need[J]. arXiv, 2017.详解Transformer (Attention Is All You Need) - 知乎2. The Illustrated Transformer – Jay Alammar – Visualizing machine learning one concept at a time.详解Transformer (Attention Is All You Need) - 知乎

4. 如何理解 Transformer 中的 Query、Key 与 Value_yafee123的博客-CSDN博客_key query value5. ReLU激活函数:简单之美_对半独白的博客-CSDN博客_relu激活函数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Transformer学习笔记 的相关文章

随机推荐

  • js扩展jquery对象基元的开发与代码编写

    js扩展jquery对象基元的开发与代码编写 function window undefined var Core function var eventarr var OnPageLoad undefined 获取USER信息 var ge
  • OpenCV:旋转矩形(RotatedRect)

    RotatedRect类是OpenCV的基础类 用于创建旋转矩形 下面是它的构造函数 包含旋转中心点 尺寸大小和旋转角度 构造函数1 RotatedRect const Point2f center const Size2f size fl
  • ​2 万字系统总结,带你实现 Linux 命令自由?

    前言 Linux 的学习对于一个程序员的重要性是不言而喻的 前端开发相比后端开发 接触 Linux 机会相对较少 因此往往容易忽视它 但是学好它却是程序员必备修养之一 如果本文对你有所帮助 请点个 吧 作者使用的是阿里云服务器 ECS 最便
  • redis主从同步,总是显示master_link_status:down的解决方法

    前几天 在修改一台从节点的redis的监听端口后 重启了下redis 发现master link status 很长时间一直都是down状态 查看了redis日志 发现日志里出现很多的 I O error trying to sync wi
  • 解决Java连接MySQL后出现的时区错误问题

    好不容易连接好数据库后 第二天打开运行 发现底下一串报红 The server time zone value is unrecognized or represents more than one time zone 线程 main ja
  • Java中变量的作用域【Java基础】

    最近在看 Thinking in Java 想把Java基础再巩固一下 在博客上遇到的以前没注意到的知识点或者较难的知识点记录下来 与大家分享 Java中的基本类型变量的作用域为 int x 1 变量x的作用域只在大括号内 System o
  • QT文件读取路径

    最近在弄中兴的一个程序大赛 用QT读取XML文件的编程 在编程中发现QT文件读取路径与VS有不同之处 我们提供给QFile的文件路径无非就是绝对路径和相对路径 绝对路径是绝对没问题的 不过相对路径就得小心了 谈到相对路径 需要注意区分进程所
  • MES系统给制造型企业带来了哪些效益

    MES系统要怎么给制造型企业带来效益 在这场剧烈的市场竞争中 制造企业不只要在产品质量和创新上具有竞争优势 而且产品的价格在很大程度上决定了企业的市场竞争力 MES系统如何去打破生产暗箱 建造通明化工厂 提高生产效率 如今 中国工厂存在两大
  • 逃逸闭包和非逃逸闭包

    在使用swift开发 使用闭包作为参数传递到函数中 但是总是默认提示加上 escaping 逃逸闭包 是指闭包在函数结束时 闭包就会随着函数的结束而被释放 非逃逸闭包 是指闭包在函数结束时 逃逸函数 不会随函数的结束而被释放 在该闭包执行后
  • ubuntu 下实现 docker+ovs+quagga搭建网络---bgp

    注 本机上现有quagga镜像 ovs虚拟交换机 2 9 1 docker 18 09 7 实现bgp网络搭建 1 sudo ovs vsctl add br br1 增加一个ovs网桥br1 2 sudo docker images 查看
  • ADFS 概念与基本开发介绍 (1)

    如您转载本文 必须标明本文作者及出处 如有任何疑问请与我联系 me nap7 com ADFS 相关开发技术的中文资料相对匮乏 之前再弄这个东西的时候搞的比较辛苦 因此总结此文档 以解后人之忧 本文会首先介绍与联合身份验证有关的概念及相关的
  • 泰迪杯挑战赛优秀论文-A题-基于数据挖掘的上市公司高送转预测

    目 录 第 1 章 绪论 1 1问题背景 1 2问题重述 1 3本文主要工作与创新点 1 4模型假设 1 5本文研究意义 第 2 章 相关理论 2 1高送转相关知识介绍 2 1 1高送转的实质 2 1 2预测下一年上市公司高送转的一些其他条
  • Redis 事务

    目录 Redis 事务 一 Redis事务的概念 二 redis事务提出的逻辑 三 redis事务的基本操作 四 事务的执行流程 五 redis锁 六 redis分布式锁 Redis 事务 一 Redis事务的概念 Redis 事务的本质是
  • 3、思科模拟器介绍 (认识思科模拟器界面、安装思科模拟器、思科模拟器汉化)

    认识思科模拟器界面 标题栏 菜单栏 思科模拟器软件包 CSDN思科模拟器安装 https download csdn net download weixin 53645521 85135225 百度网盘思科模拟器安装包 链接 https p
  • 图像恢复(加噪与去噪)

    人工智能导论实验导航 实验一 斑马问题 https blog csdn net weixin 46291251 article details 122246347 实验二 图像恢复 https blog csdn net weixin 46
  • tar命令笔记

    作用 tar 可以保存文件属性 本身不具备压缩能力 配合gzip或者bzip 进行压缩解压缩 参数 相关参数如下 来自百度百科 c create 创建新的tar文件 x extract get 解开tar文件 t list 列出tar文件中
  • 火狐浏览器文本两端对齐无效text-align: justify

    找了很多地方 尝试很多办法都不好使 直到看到这篇 只需要设置了text align justify时加设一个white space pre line就可以了
  • [Docker]使用Docker部署Kafka

    Kafka 是一个分布式流处理平台 它依赖于 ZooKeeper 作为其协调服务 在 Kafka 集群中 ZooKeeper 负责管理和协调 Kafka 的各个节点 因此 要在 Docker 容器中启动 Kafka 通常需要同时启动一个 Z
  • 对数器的简单使用

    对数器 1 前言 2 内容 简介对数器 以排序算法的检测为实例 3 总结 4 更新日志 1 前言 学习左神的数据结构的过程中 推荐使用对数器检验自己的算法是否正确 2 内容 简介对数器 1 对数器的作用 在一个题目未OJ的时候 可以通过对数
  • Transformer学习笔记

    一 Transformer诞生背景 Transformer模型是解决序列转录问题的一大创新 在Transformer模型之前 序列转录模型都或多或少的基于复杂的循环或卷积神经网络 循环神经网络的计算是时序性的 位置的计算必须基于之前所有位置