BERTは、モデルを勉強したいですか?この記事を見てみましょう!

最近、私はBERTモデルを勉強したい、しかし、あなたが最初に変圧器を理解する必要があり、BERTがモデルを理解したいことがわかりました。
この記事では、元の紙で一緒にトランスを固執しようとするが、理解しやすいと考えると、そうではない文の翻訳で文章が、翻訳著者の個人的な理解によると、地元の論文の一部は明らかに作者を説明していないか、徹底的に理解することができなかった、そこにありますオリジナルリリースは、不適切な場合、多くが含まれており、案内され、修正させたい下さい。

投稿

  • 注意が必要なのです

ペーパーアドレス

概要

配列変換モードは、エンコーダと複合リカレントニューラルネットワーク(RNN)と畳み込みニューラルネットワーク(CNN)であるに基づいて、デコーダモデルによって支配されます。最適パフォーマンスモデルは、エンコーダおよびデコーダを接続するだけフォーカス機構によるものです。私たちは、新しいシンプルなネットワークアーキテクチャ--Transformerを提案します。パフォーマンスが最適なモデル、もっぱら注意メカニズムに基づくアーキテクチャに比べて、完全に再帰的畳み込みを放棄します。実験結果から、より良い2つの機械翻訳タスク、変圧器の効果を示すが、より良い並列処理があり、かなりの訓練時間を短縮します。我々のモデルのWMT2014年发布的 - 「英国とドイツ」翻訳作業には、全体的な影響を含め、最高記録2 BLEUの既存の任務を超え、28.4 BLEU [注1]に達しました。英国で - フランス語の翻訳作業、8つのGPU上で我々のモデルは、3.5日間訓練を受け、及び単一のモデル最高BLEUスコア--41.8の作成。最適なモデルは文献に比べて、このトレーニングのコストは高くありません。他のタスクの変圧器はまた、我々は成功しているトレーニングデータや限られた学習データの多くの両方で、パースの英語の選挙(英語成分解析)に適用し、優れた汎化能力を持っています。

1はじめに

RNN、LSTMすでにGRNNシリーズモデル、言語モデル、機械翻訳フィールドを認識するための最良の方法。その後、言語境界循環モデル(再発言語モデル)とエンコーダ・デコーダ・アーキテクチャを推進しようとしている多くの人が残っています。

循環モデル(RNN)は、通常シンボル列の入力と出力位置が要因として算出されます。時間ステップの位置及び配向を計算し、以前に隠されたHT [注釈2]に基づいて、隠れ状態の系列を生成するために、位置TのHT-1に入るのプロセス。訓練サンプルのこの固有のシーケンシャルな性質は、より長い配列の顔に並列トレーニング、問題を作ることができない、とメモリは、トレーニングの大きなバッチが特に重要である提供するのに十分ではありません。(モデルの性能を向上させつつ、後者の)最近、因数分解(分解)技術および条件ずつ算出(条件付きの演算)は、計算効率を改善します。しかし、本来の連続的な性質が解決されていません。

様々なタスクシーケンスモデリングと変換モデルにおける注意メカニズムは、不可欠な部分となっています。これは、モデリング間の依存関係を満たすために時間内に、シンボル間の距離が考慮されていないことが可能となります。しかし、ほとんどの場合、このようなメカニズムは、注意され、RNNを併用します。

ここでは、変圧器、サイクルを放棄したモデルのアーキテクチャを提示し、入力と出力モードとの間に世界的に注目の依存関係を描くためのメカニズムの使用に完全に依存します。Transformerモデルは、翻訳品質の優れた並列処理は新たな高みに達しており、8 P100GPUのトレーニングでこのTransformerモデルは、わずか12時間を必要としています。

2背景

シーケンシャル還元計算(逐次計算)は、CNNのビルディングブロック、隠された特徴付けを計算し、すべての入力と出力に平行な位置のための基礎として使用される神経GPU、ByteNetとConvS2S拡張対象の基礎を形成します。これらのモデルのために、増加、ByteNet対数増加ConvS2Sの直線的な増加の位置との間の距離に所望の信号増加に関連する2つの任意の入力または出力位置の操作の数。これは、二つの離れた位置の間の依存関係の学習がより困難になることができます。変圧器では、この問題は加重平均位置情報の後に、このコースのための注意、一定回数の操作を削減し、当社の戦略の有効解像度を削減することである。この問題を相殺するためにマルチヘッドの注意を使用して対処することです。(大雑把に理解:オペレーションの注意シーケンス番号のメカニズムが一定に固定されていますが、場所自体はいくつかの情報を失うことになるが、あなたはマルチヘッドを経由して、この問題を補うことができます)

時にはイントラ注意として知られている自己注意、フォーカス機構は、計算された配列を特徴付けるために、異なる位置に関連付けられた単一の配列です。セルフ注意が読解力、抽象スニペットを含むタスクのさまざまな使用されている、テキスト(テキスト含意)、学習課題の独立した文章の特性が含まれています。

エンド・ツー・メモリネットワークが注目機構の周期ではなく、配列アラインメント中の配列周期(配列整列)に基づいており、単純な言語クイズ、言語モデリング作業でよく行われます。

しかし、我々の知る限り、入力と出力特性の変換を計算するトランス自己注意モデルの最初の完全に依存している、それはアライメントシーケンス(順序整列)や畳み込みRNNを使用していません。我々はさらに手の込んだ自己の注目の利点を議論するセクション次変圧。

3モデルのアーキテクチャ

最も競争力のあるモデルは、神経エンコーダ・デコーダ構造に配列を有しています。ここで、(X1、...、XN)で表されるシンボルエンコーダ(通常ベクター)入力シーケンスは、連続配列特徴付けにマッピングされるZ =(Z1、...、亜鉛)。デコーダは取得Z、1からnまでの各時間ステップYI、Iを生成する(Y1、...、YN)、で表されるシンボルを生成するための出力シーケンスは、任意の数を表します。各ステップの前に生成されたステップ、モデルが自動的にこのような付加的な入力としてY2がY1を生成する時間として消費シンボルです。

自己注目積層層及び透明点を用いて変圧器は、図1の、それぞれ、上記構造、左半分と右半分に追従する。図1は、エンコーダおよびデコーダの完全な接続を示しました。

3.1積層エンコーダおよびデコーダ

エンコーダ:同じ層6のエンコーダスタッキング。それぞれの層は、2層のサブレイヤが含まれています。第一のサブ層は、第2のサブ層が完全に接続されたフィードフォワードネットワーク前に簡単、明確に定義された位置で、マルチヘッド自己注目機構です。我々は、すべての残留接続正規化層(正規化層)、続いて(残留接続)[注3]の各副層に使用されます。すなわち、各副層の出力はLayerNorm(X +サブレイヤ(x)は、である )、 サブレイヤ(x)は、このような自己注目層として、それぞれの副層の機能が実装されている意味実現の独自のセット、フィード繊維を有します回送層は、独自の実装を持っています。これらの残差のリンクの使用を容易にするために、すべての寸法サブレイヤ512が層内に埋め込まれている出力タームを含みます。接続512は、寸法を選択すると推定される理由としてベクトルを埋め込み512ワードでなければならないので、統一の寸法を維持するために、残差行列加算ため、ここで使用されるであろう。図を特に参照すると:

解码器: 解码器也是由6个相同的层堆叠而成。每一层除了和编码器那样有两个子层外,解码器插入了第三个子层,用于在编码器最后的输出上执行multi-head attention。和编码器一样,我们也在解码器的各子层中引入了残差连接,并跟上一个归一化层。我们还修改了解码器的self-attention子层,来防止其将注意力扩散到当前处理位置的后续的位置上。笔者理解这里的意思是,编码器的self-attention子层的注意力机制是关联到当前处理词和其他词的,因为输入的序列的所有词都是明确的,而解码器的self-attention子层只关联到当前处理词之前的词,因为当前处理词还没预测出来,之后的词当然更还没预测出来。所以解码器的self-attention子层的当前处理位置的后续位置都是用-inf来标识的,又称之为mask。这里放上论文中本段落最后的原文:This masking, combined with fact that the output embeddings are offset by one position, ensures that the predictions for position i can depend only on the known outputs at positions less than i.这样应该比较好理解了。

3.2 注意力(Attention)

注意力函数可以描述为将一个查询(query)和一组键值对(key-value)映射到一个输出(output),这里的query,keys,values和output都是向量。output是通过values的加权求和来计算的,这里的权重是通过一个query和对应的key的兼容函数来计算的。

3.2.1 Scaled Dot-Product Attention

我们称我们特殊的attention为“Scaled Dot-Product Attention”(下图左)。

其输入由dk维数的queries和keys以及dv维数的values构成。
我们计算query和所有keys的点积,然后除以dk的平方根,然后通过一个softmax函数,其输出就是values的权重。

实际上,我们是在一组queries上同时计算注意力(attention),具体是将queries打包到一个矩阵Q中。keys和values也是分别打包到K和V矩阵中。我们进行矩阵计算的输出公式如下:

两个最常用的attention 函数是additive attention和dot-product(multiplicative)attention。Dot-product attention和我们的算法一样,除了我们的算法多了一个缩放因子1/(dk的平方根)。Additive attention计算使用一个feed-forward 网络,该网络仅有一个隐藏层。两个算法在理论上具有相同的复杂度,然而,实践中,dot-product attention更快并且更省空间,因为它可以利用到高度优化的矩阵乘法代码。

虽然在dk不大的时候,这两个算法的执行是效率是相似的,但是对于较大的dk值,additive attention 优于不带缩放的dot-product attention算法。我们猜想dk越大,点积的量级也会增长【注解4】,这会将softmax函数值推向非常小的梯度所在的区域,为了弥补这点,我们才引入缩放因子1/(dk的平方根),将其与点积相乘【注解5】。

3.2.2 Multi-Head Attention

我们发现,相比使用keys,values和queries执行一个单一的注意力函数,线性投影h次不同的keys,values和queries,分别学习到dk,dk,dv维数上的线性投影会更有优势。(原句:Instead of performing a single attention function with dmodel-dimensional keys, values and queries, we found it beneficial to linearly project the queries, keys and values h times with different, learned linear projections to dk, dk and dv dimensions, respectively。) 每一个queries,keys,values的投影版本上,我们并行的执行注意力函数,然后各自得到一个dv维数的输出值。然后将这些输出值(其实就是h个矩阵)拼接(concatenated)起来,在做一次投影【注释6】,得到最后的结果,就像图2的右半部分展示的那样。

Multi-head attention让模型可以连带注意到不同位置上的来自不同表征子空间的信息。用一个attention head,会抑制这种能力。
(原句:Multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions.With a single attention head, averaging inhibits this.)


这里介绍了公式中矩阵W的含义和形状。笔者的理解是所有出现的W都是一种投影矩阵。

此处,我们采用h=8个并行attention层,或称为头。对于每一层我们使用dk=dv=dmodel/h = 64。这里dmodel是指词嵌入向量的维数,可以推出其值为64* 8=512。由于每个头减少了维数,总计算成本和用一个采用完整维数的attention头是差不多的。

3.2.3 Attention在我们的模型中的应用

Transformer 以三种不同的方式使用multi-head attention :

  • 在“encoder-decoder attention”层,queries来自前一个decoder层,keys和values来自encoder的输出。这使得decoder的每个位置能够考虑到输入序列的所有位置。这模拟了sequence-to-sequence模型中采用的经典的encoder-decoder注意力机制。
  • encoder包含self-attention层。在一个self-attention层,所有的keys,values和queries来自相同的地方,这里是来自encoder的前一层的输出。当前encoder层的每个位置都可以关注到前一层encoder的所有位置。
  • 类似的,decoder中的self-attention层允许decoder层每个位置关注到decoder层的所有位置,包括当前位置。为了保证自回归性(auto-regressive property),我们需要阻止解码器中向左的信息流动。我们在点积注意力算法内部实现了这一点,具体是通过屏蔽(set to -∞)softmax层的输入中的所有符合非法连接的值来实现的,见图2左。(笔者的理解就是将当前decoder中self-attention层当前处理词的后面的位置设置为负无穷大)。
3.3 Position-wise Feed-Forward Networks 位置前馈网络

除了attention子层外,每个编码器和解码器层还包含一个全连接前馈网络,该网络以相同的状态分别应用于每个位置。该网络由两个线性变换构成,在这两个变换中间有一个ReLU激活。公式表达如下:

虽然不同的位置做的是一样的线性变换,但是不同的层使用了不同的参数。另一个描述这个的方法是就像使用了size为1的卷积核做了2次卷积。该网络的输入和输出的维数都是512,内部层的维数dff = 2048。(这里作者没有详细解释,所以笔者也不太确定,貌似是说这里利用1* 1的卷积核做了一次升维和一次降维。)
附上原句:

3.4 Embeddings and Softmax

和其他的序列转换模型相似,我们使用经过学习的词嵌入模型来将输入词和输出词转换成dmodel维数的向量。我们也使用经过学习的线性变换和softmax函数来转换decoder输出为预测的下一个词的概率。在我们的模型中,我们在2个embedding层和softmax前的线性变换层共享相同的权重矩阵 。在embedding层,我们会将权重乘以dmodel的平方根。

3.5 Positional Encoding 位置编码

既然我们的模型没有包含循环(recurrence)和卷积(convolution),为了让模型确定序列的顺序,我们必须给模型注入序列中各个词的相对或绝对的位置信息。为此,我们将encoder和decoder栈的底层的embeddings分别与一个“positional encodings”做加法 。positional encodings和embeddings具有相同的维数,以便执行相加操作。有许多做positional encodings的方法,包括经过学习的方式和固定的方式。

此处,我们使用不同频率的sine和cosine函数:

这里pos是位置,i是维。也就是说,每个positional encoding的维对应一个正弦曲线。其波长形成一个从2Π到10000* 2Π的几何数列。我们选择这个函数,是因为我们猜测,既然对任意固定的偏移量k,PEpos+k都能用PEpos的线性函数来表示,那么这可以让模型更容易通过相对位置来学习注意力。

我们也实验了使用经过学习的位置嵌入来代替上面的方案,然后发现这两个方案产生了几乎相同的结果。我们选择正弦曲线方案是因为即使序列的长度比训练期间的任何序列的长度长,模型也能够支持对该序列的推测(extrapolate)。

笔者注:上面关于Positional Encoding 的段落确实很难理解,笔者自己也没能完全理解,但是我们可以先记住一点,就是采用这种基于正弦和余弦曲线的方式来计算位置编码,可以让模型学习到的注意力更容易将相对位置(也包括绝对位置)纳入考虑,这能够弥补模型摒弃循环(recurrence)和卷积(convolution)后导致的位置顺序信息丢失的问题。如果没有位置信息做考量,那么模型对一句话中所有词的打乱排序后组成的各个句子的理解将会使一样的。这种模型是不能拿来做机器翻译或者语言建模的。

如果想深入了解具体原因,可以在下面的函数中查看生成positional encoding的代码:
get_timing_signal_1d

另外,这里贴出论文中3.5节的原文:

3.5 Positional Encoding
Since our model contains no recurrence and no convolution, in order for the model to make use of the order of the sequence, we must inject some information about the relative or absolute position of the tokens in the sequence. To this end, we add "positional encodings" to the input embeddings at the bottoms of the encoder and decoder stacks. The positional encodings have the same dimension dmodel as the embeddings, so that the two can be summed. There are many choices of positional encodings, learned and fixed [9].
In this work, we use sine and cosine functions of different frequencies:

where pos is the position and i is the dimension. That is, each dimension of the positional encoding corresponds to a sinusoid. The wavelengths form a geometric progression from 2π to 10000 · 2π. We chose this function because we hypothesized it would allow the model to easily learn to attend by relative positions, since for any fixed offset k, P Epos+k can be represented as a linear function of P Epos.
We also experimented with using learned positional embeddings [9] instead, and found that the two versions produced nearly identical results (see Table 3 row (E)). We chose the sinusoidal version because it may allow the model to extrapolate to sequence lengths longer than the ones encountered during training.

4 为什么使用Self-Attention

本节我们从各个方面比较self-attention和recurrent、convolutional层,recurrent和convolutional层通常用来做不定长度的符号表征序列
(x1, ..., xn)到另一个相同长度的序列( (z1, ..., zn))的映射,诸如一个典型的序列转换编码器或解码器中的隐藏层。让我们更想选择self-attention的原因有三个。

第一个是每层总的计算复杂度。第二个是可以并行计算的数量,通过需要的序列操作的最小次数来度量。
第三个是网络中远距离依存的路径长度。在许多序列转换任务中,远距离依存的学习都是一个关键挑战。影响这种能力的关键因素是前向和反向信号在网络中需要经过的的路径长度。输入和输出序列中,任意位置的组合间的路径越短,越容易学习到远距离依存关系。因此我们也比较了不同类型的层的任意两个输入和输出中的位置的最大路径长度。如下图:

图中所示,self-attention层用一个恒定的循序执行操作的次数来连接所有的位置,而recurrent层需要O(n)复杂度的循序操作。从计算复杂度来看,当序列的长度n比表征维数d小的时候,self-attention层比recurrent层更快,这种情况在最好的机器翻译模型使用的表征例子中是常见的,比如word-piece和byte-pair表征。为了改善涉及很长序列任务的计算性能,可以限制self-attention只考虑输入序列中以各自的输出位置为中心的一个大小为r的邻域。(笔者注:应该是相对默认的self-attention机制会考虑所有的输入的位置来说的)这会增加最大路径长度为O(n/r)。我们计划在将来的工作中进一步研究这种方法。

一个单一的卷积层,使用k<n大小的卷积核,不能连接所有的输入和输出位置对。...
这段主要是讲采用卷积层的代价比recurrent和self-attention层都大,具体细节可以自行参考原文,由于笔者未能全部理解,就不翻译了。

self-attention有附加的优势,就是模型的可解释性更强。我们从模型中观察注意力分布,并在附录中呈现和讨论了一个示例。单个注意力头不仅清晰的学会了执行不同的任务,还呈现出许多和句子的语义结构、句法有关的行为。

5 Training 训练

本节描述模型的训练机制。

5.1 Training Data and Batching

我们在标准的WMT 2014 English-German数据集上训练,其包含450w句子对。句子用包含37000个词的原目标词汇表的byte-pair encoding来编码。对于English-French,我们使用大的多的WMT 2014 English-French数据集,其由3600万个句子组成,并将单词分割成32000个不同单词组成的词汇表。句子对按照相近序列长度进行批次划分。每个训练批次包含一组含有接近25000原始单词(source tokens)和25000目标单词(target tokens)的句子对。

5.2 Hardware and Schedule

我们在8块NVIDIA P100 GPU上训练我们的模型。我们的基础模型使用了本论文描述的超参数,每个训练步耗时0.4秒。我们训练基础模型用了总共100000步,花费12小时。对于我们的大型模型,(table3的最后一行有描述),每步耗时1秒。大型模型训练了300000步,耗时3.5天。

5.3 Optimizer 优化器

我们使用Adam优化器,采用β1 = 0.9, β2 = 0.98 and epsilon= 10−9 。我们根据如下公式随着训练过程而改变学习率:

这里,我们在首个warmup_step训练步线性增加学习率,然后按照step_num平方根的倒数成比例降低学习率。我们设置warmup_steps=4000。

5.4 Regularization 正则化

我们在训练期间采用了三种正则化方法。

Residual Dropout 我们在每个子层的输出加入下一个子层的输入和归一化之前上应用了dropout。
(原句:We apply dropout [33] to the output of each sub-layer, before it is added to the sub-layer input and normalized.)
另外,我们在encoder和decoder栈的embeddings和positional encodings相加后,应用了dropout。对于基础模型,我们使用的比率Pdrop = 0.1。

Label Smoothing 在训练期间,我们采用label smoothing,值如下:

这使得模型学到了更多的不确定因素,但是改善了准确度和BLEU得分。

6 Results

6.1 Machine Translation 机器翻译

在 WMT 2014 English-German 翻译任务上,大型transformer模型(Transformer(big) in Table 2) 胜过之前最好的模型(包括 ensembles)2.0个BLEU,创造了新的BLEU分数记录——28.4。这个模型的配置在Table3的末行有展示。训练在8块P100GPU上耗时3.5天。甚至我们的基础模型也优于所有先前发布的模型和集成(ensembles),并且训练成本比其他任何模型的成本都低。

在 WMT 2014 English-to-French 翻译任务上,我们的大型模型达到了41.0的BLEU分数,胜过所有发布的单个模型,并且只使用了最好模型的1/4的训练成本。Transformer(big) 在训练English-to-French的时候使用了Pdrop = 0.1的dropout rate(失活率),而不是0.3。

下面这段,笔者也有不明白的地方,笔者会尝试解释,但是未必准确,所以放出原句:
For the base models, we used a single model obtained by averaging the last 5 checkpoints, which were written at 10-minute intervals. For the big models, we averaged the last 20 checkpoints. We used beam search with a beam size of 4 and length penalty α = 0.6 [38]. These hyperparameters were chosen after experimentation on the development set. We set the maximum output length during inference to input length + 50, but terminate early when possible [38].

对于基础模型,我们使用一个单一的从最新的5个训练检查点平均求出的模型,这些检查点的写入间隔是10分钟。对于大型models,我们用的是最新的20个检查点。我们使用beam search算法,beam的大小=4,长度的惩罚系数α = 0.6 。这些超参数是在开发集上实验之后得出的。我们设置推理过程中的最大的输出长度为输入长度+50,但是会在可以终止的时候尽早终止。(笔者注:不明白为什么这么做。)

Table 2 中比较了我们的模型和其他模型架构的表现,包括翻译质量和训练成本。我们通过乘以训练时间,GPU的使用数量,以及对各GPU持续单精度浮点容量的估计(我们对K80, K40, M40 and P100型号的GPU分别使用 2.8, 3.7, 6.0 和 9.5 TFLOPS , respectively),来评估用于训练模型的浮点运算的数量。

6.2 Model Variations

为了评估Transformer不同部分的重要性,我们将基础模型进行不同方式的变化,以此度量在开发集和测试集上模型表现的改变。我们使用beam search算法(和上节提到的一样,但是没有对检查点取平均)。我们在Table 3中呈现了这些。

在Table 3的A行,我们改变attention heads的数量,以及attention key和value的维数,以此保持总计算量的不变,就像3.2.2小节中描述的那样。虽然单头注意力比最佳设置(8个头)差0.9个BLEU,但过多的头也会降低质量。

在Table 3的B行,我们观察到,较小k的维数,会降低模型的表现。这暗示着确定兼容性并不容易,而且一个比点积更复杂的兼容性函数可能是有益的。我们进一步观察C行和D行,如预料的那样,大型模型更好,dropout对避免过拟合非常有用。在E行,我们用经过学习的位置嵌入方式来代替正弦曲线位置编码的方式,对于基础模型来说效果几乎是一样的。

6.3 English Constituency Parsing 英语成分解析

为了评估Transformer是否可以泛化到其他任务上,我们在English constituency parsing上做了实验。此任务有着特别的挑战:输出受强结构约束,并且比输入长的多。此外,基于RNN的sequence-to-sequence的模型还没有在小数据集上达到过最先进的结果。

我们在Wall Street Journal (WSJ) portion of the Penn Treebank数据集上训练了一个4层的transformer,维数dmodel =1024,大概有40K个训练句子。我们还在半监督的环境中对其进行了训练,使用了更大的高置信度和BerkleyParser语料库,语料库中有大约1700万句话。我们在WSJ only 设置中使用了包含16K个唯一单词的词汇表,在半监督设置中使用了32K个唯一单词的词汇表。

我们只用了少量的实验来选择droput,不论是attention、residual、学习率、beam size 都是如此,所有其他剩余的参数和English-to-German的基础翻译模型的一样。在推理阶段,我们增加了最大输出长度为输入的长度+300。对于WSj only 和半监督设置,我们使用beam size=21,α = 0.3。

Table 4 显示,尽管我们的模型缺少特定任务的调优,其仍然执行的非常好,除了Recurrent Neural Network Grammar(
Dyer等人提出)以外,比其他模型都好。

与RNN序列到序列模型相比,即使只在 WSJ 的40K句训练集上进行训练,Transformer的性能也优于BerkeleyParser[29]。

7 总结

在本次工作中,我们展示了Transformer,首个完全依赖注意力机制的序列转化模型,用multi-headed self-attention替换了encoder-decoder架构中常用的recurrent层。

在翻译任务中,Transformer 的训练比基于recurrent或convolutional层的架构的模型都要快的多。在WMT 2014 English-to-German 和 WMT 2014 English-to-French 翻译任务上,我们创造了新的记录。在前一个任务中,我们的最佳模型甚至优于所有先前报告的模型的集成。

我们对基于注意力的模型的未来感到兴奋,并计划将其应用于其他任务。我们计划将Transformer扩展到涉及文本以外的输入和输出模式的问题上,并研究局部的、受限的注意机制,以便有效地处理大量输入和输出,如图像、音频和视频。Making generation less sequential is another research goals of ours。(注:这句没翻译,是因为不知道“Making generation less sequential ”具体是指什么。)

我们用于训练和评估我们模型的代码可通过这个地址获取: https://github.com/ tensorflow/tensor2tensor

致谢 我们感谢Nal Kalchbrenner和Stephan Gouws富有成效的评论、纠正和启发。

参考文献

请从原论文末尾查找。

Attention Visualizations 注意力可视化


图3:可以看到,在编码making的时候,注意力的关注情况。上面的图只将making的注意力展示出来了。颜色越深的头注意力越集中。


图4:Top: head 5的完整注意力。Bottom: 仅是从head 5 和head 6中剥离出来的对单词‘its’的注意力。


图5:许多注意力头表现出的行为看起来都和句子的结构有些关系。我们给出了2个例子,来自编码器中不同的注意力头。注意力头显然学会了执行不同的任务。

注解

  1. BLEU:全称 bilingual evaluation understudy。是一种使用机器代替人工评估翻译结果好坏的方法。评估思路是将模型翻译的結果和一组人工翻译的结果进行比较得出一个综合分数,分数越高的模型越好。
  2. ht: 第t个时间步的激活值,如果不理解,请先了解神经网络结构中的激活函数。
  3. residual connection: 残差连接.引入残差连接,一般是为了避免梯度爆炸和弥散问题,这里估计也是为了解决这个问题。
  4. 为什么维数越大,点积越大?看下面的公式,其中dk是维数,q·k是点积 :

    根据图中的公式,直觉上觉得dk越大q·k就越大是显然的,然而,论文中作者对此的解释提到了均值和方差,这里笔者还没能弄明白为什么要通过均值和方差来说明点积会随着维数的增加而增加。
    原句如下:
  5. 要理解这句话,需要看下面三个图:



    x轴显示的是输入的向量中的各个分量,y轴表示输入的向量中的各个分量对应的softmax的输出。笔者将第一幅图的输入维数设置为20,输入向量的各个分量是从1到20,步长为1;第二幅图的输入维数设为了60,输入向量的各个分量是从1到60,步长为1;明显第二幅图中有更多的梯度非常小的区域。而在深度学习神经网络中,我们知道非常小的梯度将导致非常慢的学习速度。所以作者引入了一个缩放因子,那么第三幅图就是笔者将第二幅图的输入除以其维数的平方根后的图,可以看到落在非常小的梯度的区域的值变少了。
    绘制曲线的代码如下,大家可以自行调整参数以做测试:
import matplotlib.pyplot as plt
import numpy as np

def softmax(inputs):
    return np.exp(inputs) / float(sum(np.exp(inputs)))

def line_graph(x, y, x_title, y_title):
    plt.plot(x, y)
    plt.xlabel(x_title)
    plt.ylabel(y_title)
    plt.show()

# graph_x = range(0, 21) 维数小的时候
graph_x = range(0, 61) # 维数大的时候
# graph_x = np.array(graph_x)/(float(len(graph_x)) ** 0.5) # 加入缩放因子
graph_y = softmax(graph_x)
print("GraphXreadings: {}".format(graph_x))
print("GraphYreadings: {}".format(graph_y))
line_graph(graph_x, graph_y, "Inputs", "SoftmaxScores")
  1. projected: 投影。具体的操作是用当前矩阵乘以另一个矩阵,另一个矩阵通常就是一个权重矩阵,其中的值一开始是随机初始化的,然后通过不断的学习得到合适的值。

笔者总结

ok,终于翻译完成了。让我们来回顾一下论文作者的思路以做个总结。
本论文中,作者提出了Transformer模型架构,该架构用在序列到序列的转换领域,比如机器翻译,可以是语言到语言的翻译,也可以是任何序列到另一个序列的转换。

Transformer中用到了一种注意力机制,直观上理解就是在编码句子中的某个词的时候,会同时注意句子中的"其他词","其他词"中各个词越和当前词相关,得到的注意力越多。

Transformer利用这种注意力机制来给相关词打分,来得到最终的输出,然后通过训练样本集和相应的损失函数不断更新网络的权重系数来得到一个有效的序列到序列转换的模型。
也就是说,训练好的模型会知道如何将一个句子序列映射到另一个句子序列,比如英文到中文的翻译。

在这个过程中,作者提出了query,key,value的概念,注意力分数就是用这三个概念参与计算出来的,其中还用到了query和key的点积。而这三个概念作者只用了一段话描述:”注意力函数可以描述为将一个查询(query)和一组键值对(key-value)映射到一个输出(output),这里的query,keys,values和output都是向量。output是通过values的加权求和来计算的,这里的权重是通过一个query和对应的key的兼容函数来计算的。“。
笔者的尝试直观的解释一下(不一定准确,仅作参考,请大佬指正。),就是作者把
query当作当前词的词嵌入向量在某个注意力空间的投影;
key 当作句子中所有词在注意力空间上的键投影;
value当作句子中所有词在注意力空间上的值投影。
而编码器中query和key做点积,就是为了找到注意力空间中其他词和当前编码词的注意力相关性,这些相关性将作为value的权重,也就是其他词对当前编码词的注意力集中度。
解码器中的query和编码器的key做点积,是为了在计算注意力的时候再加入对已经解码的词的考量。
为了让模型在注意力上考虑的更全面,作者使用了8个注意力头,也就是计算了8次上面涉及q,k,v的过程,然后将结果拼接在一起。
但是这个过程并没有考虑到句子中词和词之间的位置关系,所以为了弥补,作者引入了positional encoding,就是要让Transormer能够考虑到位置信息。不至于打乱一个句子的词汇后,得到的转换结果和没打乱一样。

相比基于注意力机制的循环或卷积的架构模型,Transformer的显著特点是其完全依赖注意力机制,而摒弃了循环和卷积。由此得到的好处包括:计算复杂度降低了,并行计算的数量增加了,句子中任意两个词离得越远,越不容易学习其依存关系的问题被减轻了。

如果你还是隐隐觉得不能完全搞懂论文的所有思想也不要紧,因为论文本身确实比较难读懂,毕竟是论文,不是教学为目的。但是至少通过本文,你应该大致明白了论文在讨论什么,其提出的attention机制是为了解决什么问题。

ok,本篇就这么多内容啦~,感谢阅读O(∩_∩)O,88~

おすすめ

転載: www.cnblogs.com/anai/p/11572847.html