| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 爆火的Transformer,到底火在哪? -> 正文阅读 |
|
[人工智能]爆火的Transformer,到底火在哪? |
传送门: 第一章 细讲:Attention模型的机制原理 前言与传统的 Soft Attention(如Bahdanau Attention、Luong Attention) 相比, Self-Attention 可有效缩短远距离依赖特征之间的距离,更容易捕获时间序列数据中相互依赖的特征,在大多数实际问题中,Self-Attention 更被研究者们所青睐,并具有更加优异的实际表现。 Transformer在Goole的一篇论文Attention is all you need被提出,其火爆程度相信已经不需要我多说了,大部分AIers应该都听过Transformer。本人在接下来的课题研究中也会用到与之有关的知识,因此,结合网上一些已有的博客( Transformer是我的一个重点学习、讲解内容,如果有哪里写的不对,欢迎大家批评指正,感谢~ 1.总体架构以机器翻译为例,先整体看一下Tranformer的结构, 如果我们把Transformer想象成一个黑匣子,在机器翻译的领域中,这个黑匣子的功能就是输入一种语言然后将它翻译成其他语言。如下图所示: 对于Encoders中的每一个Encoder,结构都是相同的,但并不会共享权值。每层Encoder有2个部分组成,如下图:
Self-attention的输出会被传入一个全连接的前馈神经网络, 每个Decoder也同样具有这样的层级结构,但是在这之间有一个Attention层,帮助Decoder专注于与输入句子中对应的那个单词(类似与seq2seq models的结构) 2.基本单元2.1 Word Embedding (词嵌入)首先,我们需要将单词变成词向量形式,不明白的可以看Glossary of Deep Learning: Word Embedding,我也会在接下来的新文章中详细介绍一下Word Embedding。 每个单词都嵌入到 因此,对于所有的Encoder来说,我们都可以按下图来理解,具体地: 输入(一个向量的列表,每个向量的维度为512维, 另外这个列表的大小和词向量维度的大小都是可以设置的超参数。一般情况下,它是我们训练数据集中最长的句子的长度。 注意观察,在每个单词进入Self-Attention层后都会有一个对应的输出。Self-Attention层中的输入和输出是存在依赖关系的,而 2.2 Self- AttentionSelf- Attention是Transformer的重点,与 Soft Attention 所不同的是,Self-Attention 是 Encoder 内部或者 Decoder 内部之间所发生的注意力机制,是由 Google AI 研究院所提出的预训练语言表征模型——BERT(Bidirectional Encoder Representations from Transformers) 的主要组成部分之一。 由于包括 LSTM、GRU 在内的众多 RNN 模型需按照固定方向顺序计算,为有效缩短远距离依赖特征之间的距离,在 Self-Attention 中,各隐藏层状态可通过特定的计算步骤被直接联系,也就是说, 因此,Self-Attention 更容易捕获时间序列数据中相互依赖的特征。 关于注意力机制的部分在已经在我之前的文章做了详细的阐述,在此不再赘述,只是大体再做一个总结。 传送门:细讲:Attention模型的机制原理
X矩阵中的每一行对应于输入句子中的一个单词。我们再次看到词嵌入向量(512,或图中的4个框)和q/k/v向量(64,或图中的3个框)的大小差异: Attention ? ( Q , K , V ) = softmax ? ( Q K T d k ) V \operatorname{Attention}(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V Attention(Q,K,V)=softmax(dk??QKT?)V 其中, Attention ? ( Q , K , V ) \operatorname{Attention}(Q, K, V) Attention(Q,K,V) 为一个维度为 d ? m d*m d?m 的矩阵。在具体实现中,随着隐向量维度 d d d增大,点乘的方差也在逐渐增大,在计算Softmax的时候会出现梯度消失的情况,因为计算过程加了 d k \sqrt{d_{k}} dk?? 归一化因子,归 一化因子可有效缓解梯度消失情况的发生,并保证点乘结果的方差不随隐藏层维度 d 变化。 注意看这个公式,
Q
K
T
Q K^{T}
QKT其实就会组成一个word2word的attention map!(加了softmax之后就是一个合为1的权重了)。比如说你的输入是一句话 “i have a dream” 总共4个单词,这里就会形成一张4x4的注意力机制的图:
注意encoder里面是叫self-attention,decoder里面是叫masked self-attention。 这里的masked就是要在做language modelling(或者像翻译)的时候,不给模型看到未来的信息,即采用教师强制(Teacher- forcing)模式进行训练。
做完softmax后就像这样,横轴合为1
2.3 Multi-Head Attention (MHA)Multi-headed的机制是Transformer的另外一个特色,其目的是进一步完善self-attention层。 原始的attention, 就是一个query 和一组key算相似度, 然后对一组value做加权和; 假如每个Q和K都是512维的向量, 那么这就相当于在512维的空间里比较了两个向量的相似度. multi-head相当于把这个512维的空间人为地拆成了多个子空间, 比如head number=8, 就是把一个高维空间分成了8个子空间, 相应地,V也要分成8个head; 然后在这8个子空间里分别计算Q和K的相似度, 再分别组合V. 这样可以让attention能从多个不同的角度进行结合, 这对于NMT是很有帮助的, 因为我们在翻译的时候源语言和目标语言的词之间并不是一一对应的, 而是受很多词共同影响的. 每个子空间都会从自己在意的角度或者因素去组合源语言, 从而得到最终的翻译结果.
Multi-headed主要有以下作用:
通过multi-headed attention,我们为每个“header”都独立维护一套Q/K/V的权值矩阵。然后我们还是如之前单词级别的计算过程一样处理这些数据。 因为我们有8头attention,所以我们会在八个时间点去计算这些不同的权值矩阵,但最后结束时,我们会得到8个不同的矩阵。 由于self-attention后面紧跟着的是前馈神经网络,而前馈神经网络接受的是单个矩阵向量,而不是8个矩阵。所以我们把这8个矩阵压缩成一个矩阵,将这8个矩阵连接在一起然后再与另一个权重矩阵 W O W^{O} WO相乘。
总体计算过程维度变化如图所示: 2.4 Positional Encoding (位置编码)模型不包括Recurrence/Convolution,因此是无法捕捉到序列顺序信息的,例如将K、V按行进行打乱,那么Attention之后的结果是一样的。但是序列信息非常重要,代表着全局的结构,因此必须将序列的分词相对或者绝对position信息利用起来。 回想一下attention,任意一对(query, key)的计算都是完全一样的,不像CNN和RNN,有一个位置或者时序的差异:
因此为了体现出时序或者在序列中的位置差异,要对input加入一定的位置信息,即positional embedding。 为了解决输入序列中的单词顺序问题,transformer为每个输入单词的词嵌入上添加了一个新向量-位置向量。这些位置编码向量有固定的生成方式,所以获取他们是很方便的,但是这些信息确是很有用的,他们能捕捉到每个单词的位置,或者序列中不同单词之间的距离。将这些信息也添加到词嵌入中,然后与Q/K/V向量点击,获得的attention就有了距离的信息了。
编码器和解码器的底部输入,位置编码与词嵌入具有相同的维度 d m o d e l d_{model} dmodel?,因此可以将两者相加。位置编码有很多选择,主要包括可学习的和固定的基于正余弦的位置编码。 P E ( p o s , 2 i ) = sin ? ( p o s / 1000 0 2 i / d model? ) P E ( p o s , 2 i + 1 ) = cos ? ( p o s / 1000 0 2 i / d mold? ) \begin{aligned} P E_{(p o s, 2 i)} &=\sin \left(p o s / 10000^{2 i / d_{\text {model }}}\right) \\ P E_{(p o s, 2 i+1)} &=\cos \left(p o s / 10000^{2 i / d_{\text {mold }}}\right) \end{aligned} PE(pos,2i)?PE(pos,2i+1)??=sin(pos/100002i/dmodel??)=cos(pos/100002i/dmold??)? 其中, pos 是位置,也就是文本序列位置的索引,i 是维度索引。也就是说,位置编码的每个维度对应一个正弦曲线。波长形成从 2π 到 10000 · 2π 的几何级数。我们选择这个函数是因为我们假设它可以让模型轻松学习通过相对位置来参与,因为对于任何固定的偏移量 k, P E p o s + k PE_{pos+k} PEpos+k? 可以表示为 P E p o s PE_{pos} PEpos? 的线性函数。 Position Embedding本身是一个绝对位置的信息,但在语言中,相对位置也很重要,Google选择前述的位置向量公式的一个重要原因是,由于我们有: Transformer还尝试了使用可学习的位置嵌入,但发现这两个版本产生了几乎相同的结果。因此选择了正弦版本,因为它可以让模型推断出比训练期间遇到的序列长度更长的序列长度。 2.5 The Residuals (残差连接) & Layer Normalization(层归一化)经过了前面的叙述,进一步探究了其内部的计算方式,上图可以转化为下图。 Add代表了Residual Connection,是为了解决多层神经网络训练困难的问题,通过将前一层的信息无差的传递到下一层,可以有效的仅关注差异部分,这一方法之前在图像处理结构如ResNet等中常常用到。 Norm则代表了Layer Normalization,通过对层的激活值的归一化,可以加速模型的训练过程,使其更快的收敛。 在每个sub-layer我们都模拟了残差网络,每个sub-layer的输出都是:
?LayerNorm?
(
x
+
?Sublayer?
(
x
)
)
\text { LayerNorm }(x+ \text { Sublayer }(x))
?LayerNorm?(x+?Sublayer?(x))
2.6 Feed Forward Network (前馈全连接模块)除了注意力子层之外,Transformer的编码器和解码器中的每一层都包含一个完全连接的前馈网络(每一个输入独立),该网络分别且相同地应用于每个位置,包括两个线性变换,中间有一个 ReLU 激活: FFN ? ( x ) = max ? ( 0 , x W 1 + b 1 ) W 2 + b 2 \operatorname{FFN}(x)=\max \left(0, x W_{1}+b_{1}\right) W_{2}+b_{2} \\ FFN(x)=max(0,xW1?+b1?)W2?+b2? 在论文的介绍中,输入以及输出维数
D
m
o
d
e
l
=
512
D_{model}=512
Dmodel?=512,内层维数DFF=2048,如图所示: 2.7 Softmax Layer假设实验中我们的模型从训练数据集上总共学习到1万个英语单词(“Output Vocabulary”)。这对应的Logits矢量也有1万个长度-每一段表示了一个唯一单词的得分。在线性层之后是一个softmax层,softmax将这些分数转换为概率。选取概率最高的索引,然后通过这个索引找到对应的单词作为输出。 具体执行过程如图所示:
3. 编码器-解码器结构经过上面的基本单元叙述,Transformer的编码器-解码器结构如下图所示 (如:Encoder和Decoder均为2层): 3.1 Encoder每层Encoder包括两个sub-layers:
Encoder部分在前文已经做了很详细的叙述,在此不再赘述。 3.2 Decoder每层Decoder包括3个sub-layers:
3.3 Encoder-Decoder Attention重点讲一下Encoder-Decoder Attention,Encoder-Decoder Attention在Decoder层发生,并在MHA之后的一层,FFN之前。 “Encoder-Decoder Attention”层的工作方式与"Multi-Headed Self-Attention"一样
Encoder-Decoder Attention使得Decoder中的每一个位置都能参与输入序列中的所有位置。 这模仿了序列到序列模型中典型的编码器-解码器注意力机制。 Encoder-Decoder Attention通过计算输出序列对输入序列的注意力来更新解码器的隐状态矩阵。 3.4 Encoder和Decoder有哪些不同?
综上,Transformer的执行过程如图所示: 4. 补充4.1 Transformer的特点
4.2 Transformer VS RNN
4.3 Transformer存在的问题
4.4 基于Transformer的预训练语言生成模型Transformer的提出极大地促进了大规模预训练语言生成模型的发展,主要模型如下:
BERT 中的Transformer 使用双向self-attention,而GPT 中的Transformer 使用受限制的self-attention,其中每个token只能处理其左侧的上下文。 什么是单向Transformer?在Transformer的文章中,提到了Encoder与Decoder使用的Transformer Block是不同的。在Decoder Block中,使用了Masked Self-Attention,即句子中的每个词,都只能对包括自己在内的前面所有词进行Attention,这就是单向Transformer。
总结完全不依赖于RNN结构仅利用Attention机制的Transformer由于其并行性和对全局信息的有效处理使其获得了较之前方法更好的翻译结果,在这基础上,Attention和Transformer架构逐步被应用在自然语言处理及图像处理等领域, 可以说,Transformer在各领域均取得了显著的成绩,是如今的一个热门使用模型,很多研究者也基于传统的Transformer提出了很多改进版本,Transformer的提出大大促进了包括自然语言处理在内的众多领域的发展,对于Transformer模型结构的应用以及改进也是如今的一个热点研究方向,值得众多研究者深入探讨。 参考 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:35:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |