海南省住房和城乡建设厅网站电脑版,丹东静态管理,1688外贸平台,呼和浩特做网站的Transformer最早是在论文《Attention is All You Need》中提出的#xff0c;目前已广泛应用于NLP领域#xff0c;如语言翻译、文本分类、问答系统等。由于在产品规划中需要使用这样的模型结构#xff0c;因此花了一些时间对其进行了一些学习理解。
除了阅读论文及配套的代码…Transformer最早是在论文《Attention is All You Need》中提出的目前已广泛应用于NLP领域如语言翻译、文本分类、问答系统等。由于在产品规划中需要使用这样的模型结构因此花了一些时间对其进行了一些学习理解。
除了阅读论文及配套的代码之外还参考了Jay Alammar的技术讲解博客The Illustrated Transformer。这篇博客非常推荐Transformer的初学者像我这样的语言模型菜鸟读起来都没什么压力。
1. Transformer模型结构
在讲Self-Attention之前我们先来看看Transformer的结构。论文中给出的Transformer结构如下 图1 model architecture 不同数量的Encoder和Decoder的堆叠就可以组成不同的Transformer结构例如在翻译模型中可以使用6个Encoder和6个Decoder来组成整个模型 图2 NMT模型的完整结构 那么接下来我们看看每个Encoder和Decoder内部的结构。简单来理解每个Encoder内部包含两大部分Self-Attention和Feed-Forward而Decoder内部结构则略复杂一点比起Decoder还多了一层Encoder-Decoder Attention。 图3 encoder和decoder内部模块划分 2. 数据流
我们关注的第二个议题是作为文字的输入数据是如何在模型中处理的答案就是需要将文字转换为数字也就是Word Embedding。这是因为机器学习算法通常要求输入为数值向量网络并不擅长处理字符串。将词汇或短语从文字映射成实数向量除了易于神经网络处理另外还有两个重要而有力的特性(1) 降维 (2) 上下文相似性这两方面都使得语言能够被更有效地表示。
Word Embedding只在最下面一层的Encoder进行其他Encoder接收上一个Encoder输出的向量。向量大小为512。对一整个句子中的词语完成Embedding之后这些vector将会经过每个encoder的Self-attention层和Feed-forward层。 图4 Encoder中的数据流 从上图中我们可以看到每一个位置的词向量按照自己的路径经过Encoder在Self-attention模块这些词向量会有交互在Feed-forward模块每个词向量是独立传播的这也有利于它们的并行执行。
3. Self-Attention的实现
论文中对Self-attention的描述为Scaled Dot-Product Attention并给出了实现公式 输入为dk维的Queries和Keys以及dv维的Values图形化表示如下 图5 Scaled Dot-Product Attention 有点抽象对吧那我们就跟随文章开头提到的那篇博客的脚步来解释这个结构。
Self-attention的目的是要寻找输入向量可以理解为输入语句内部的关联例如要翻译下面这句话
“The animal didnt cross the street because it was too tired”
那么句子中的it指代什么呢是指the animal还是指the street对于机器学习来说这就是个问题。那么通过学习句子中不同单词的关联性就可以知道it指代的是the animal。 图6 Self-attention应用解释示例 3.1 Self-attention的分步理解
对Self-attention的理解可以分为几个步骤
(1) 首先我们需要创建三个vector分别是Query vector、Key vector和Value vector这几个vectors的获取是通过输入的embedding和三个矩阵WQ、WK和WV相乘这三个矩阵是网络在训练中学习到的。论文中设计的三个输出vector维度为64。 图7 Query, Key, Value三个vector的生成 (2) 接下来我们要使用计算出来的三个vectors进行打分计算具体做法是对每一个单词位置计算该位置的Query vector和每一个位置的Key vector的点积以下图为例第一个单词在整个输入序列本例中只有两个单词中对应位置的分数计算分别为q1·k1q1·k2同样的如果计算第二个单词在整个输入序列对应位置的分数则应该是q2·k1q2·k2。 图8 Self-attention中的score计算 (3) (4) 我们把第三步和第四步合并首先上面的score计算结果要除以8见上面Attention公式dk为64其平方根为8接下来进行softmax操作将分数归一化到0~1之间并使其和为1 图9 对score除以8并归一化 进行以上操作之后我们就可以看到每个单词在每个位置上的关注度。在此例中“Thinking”这个单词在自身位置的关注度最大。当然也会有些句子当前位置的单词对其他位置的单词关注度比较大比如我们前面例子中的“it”和“the animal”。
(5) 前面步骤我们已经算出了每个单词处理时在不同位置上的关注度相当于权重那么接下来我们需要将该权重作用在Value vector上可以理解为对关注位置的单词进行保持而抑制非相关位置上单词的权重。
(6) 第六步是对第(5)步的加权向量进行求和。该步会产生Self-attention在当前单词位置的输出。 图10 求和并输出 3.2 Self-attention的矩阵实现
上面我们分步骤理解了Self-attention的原理和实现但在实际应用中为了快速执行是通过矩阵的形式来进行的。那么矩阵如何实现呢
首先计算Query、Key和Value几个矩阵在前面讲的分步理解中是Query vector、Key vector和Value vector矩阵的计算通过将输入embedding vectors打包成一个Matrix X相当于把前面的X1、x2...堆叠在一起再跟训练出来的权重矩阵WQ、WK和WV做矩阵乘法。 图11 计算Q, K, V矩阵 接下来通过矩阵运算把3.1中的六个步骤压缩到一步中处理如下图所示 图12 Self-attention的完整矩阵运算 以上就是Transformer中Self-Attention的完整解读了。网络结构中还有Multi-Head Attention等结构为了篇幅简洁我们放在下一篇中来解读。