Transformer(詳細解説): アテンション中心の系列変換 Encoder-Decoder

1. Transformer とは [概要]

Transformer とは,自然言語処理由来の,アテンションを主部品として採用したトークン入力系列変換むけのEncoder-Decoderネットワークである.Transformerは,マルチヘッドアテンションを主部品として何度もスタックした構成を採用し,位置符号化を用いることで,なるべくアテンション中心で構成できるようなEncoder-Decoder設計を提案した.このおかげで,大規模なデータに対して学習規模をスケールさせやすくなり,Transformerは,2019年頃以降,画像・言語・音の各分野で非常に広く定番ネットワークとして使用されることとなる.

従来の系列対系列変換でよく使用されていた seq2seq with attentionの後継モデルとして,まずNLPの機械翻訳タスク向けにTranformerは提案された[Vaswani et al., 2017].その後,非常に多くのパターン認識・生成分野でTransformerおよび,Transformer-EncodeかTransfomer-Decoderの単体が使用されている.近年の巨大Deepネットワークは,系列対系列変換に限らず,Transformerを基盤構造として採用している派生型だらけの状況となっている.自己教師有り学習を用いた一般化言語モデルである BERT/ GPT は,Transformer-Encoder / Transformer-Decoderで構成されている.また,コンピュータビジョンでも Vision Transformer(ViT)DETR に,Transformer構造が基本設計として応用され,NLP業界同様にTranformerが新たな基盤構造の1つとなりつつある.

※ この記事の対象である「初期定案」以降の応用モデルの話なので述べないが,DETRのように,集合体集合変換でも力を発揮するのがTransformer系モデルの大きな利点である.

この記事では,自然言語処理分野で登場した最初の機械翻訳むけのTransformerの提案 [Vaswani et al., 2017] にフォーカスして,豊富な図つきで紹介をしていく(1.1節).各層・ブロック(2節)と全体構造(3節)を順に紹介していき,記事を読了後には,Transformerの(Encoder-Decoderとしての)全体構造と,各構成部品(マルチヘッドアテンション,トークン位置の位置符号化,FFNにトークン表現の変換, トークン分割)が,俯瞰しやすくなるような記事構成にした (2~4節).

Transformerは,アテンションの並列化であるマルチヘッドアテンションを提案したことにより,seq2seq with attention型の(フレーム単位の)自己回帰モデルによる系列対系列変換が,系列間・系列内ともにグローバル処理・並列処理化できるようになった.これにより,Transformerは高速かつスケールする巨大な系列変換モデルを実現できるようになった.また,DETR-Decoderでは,Transformer-Decoderの自己回帰的な処理を削除して「非自己回帰化」を行い,集合の各要素(もといN個のROI)を,同時に並列推定するようにアレンジしたことで,更なる並列化を達成している.

Transformerは,これまでのNLPモデル同様に,入力系列を単語・サブワードの単位にトークナイズして辞書化し,トークンのEmbedding学習も埋込み層により(系列変換部分と同時に)行う.これにより,トークン化さえ行えば,文章のみならず,画像や音などのデータも入力できるゆえ,各シングルモーダルや,マルチモーダル(Vision-Language, Vision-Audio, 音声認識)向けに,(seq2seq with attention時代と同様に) Transformer が広く応用されている.

Transformer の最重要点は,系列Encoding/Decodingの 自己アテンション化が導入された点である.従来のseq2seq with attentionの「RNN + 系列間アテンションによる,フレームごとの再帰変換」を除去し,代わりにEncoder/Decoder内のCoding処理は,自己アテンションのN回繰り返し(スタック)に担当させることを提案した.この設計のおかげで,効率的な「系列全体の一括処理」を数回(N=6~12回程度)スタックして実行するのみで,高精度な機械翻訳,系列変換を達成できるようになった.

マルチヘッドアテンションは8並列分散処理化しており,複数GPUを用いた並列処理効率化を強く意識した設計になっており,各問題をTransformerの使用でスケールさせやすくなった点も重要である.これにより,パラメータ数が膨大な巨大ネットワークであるTransformerの使用が,NLPやビジョンに音声系など,各タスクで加速したと言える.

突如,Transformer以降だけを天下り的に紹介・解説しただけに終わっているものも多い.これに対し,本サイトでは,系列対系列変換のTransformer前に主役モデルであったseq2seq with attentionとの違いも示し,「新旧の系列対系列変換モデルの比較」もおこなう .それにより,「Transformerの各部品が,なぜそういう部品の構成になったか?」がとらえやすい解説にしている (※ もちろん,元論文でも比較はされているので,元論文や各タスクの関連研究も読むことでも,その理由・経緯を理解していっていただきたい).

1.1 この解説 記事の構成

2節以降は,以下の構成で Transformerの基本モデルを紹介していく:

  • 1節 登場前夜とTransformerの全体的な概要
  • 2節 Transformer の各構成部品
  • 3節 Transformer の全体像
    • 3.1 残差接続とレイヤー正規化層
    • 3.2 Transformer-Encoder
    • 3.3 Transformer-Decoder
  • 4節 Transformer の学習 (サブワードまでトークン分割)
    • 4.1 サブワード分割の使用
    • 4.2 Transformerの正則化
    • 4.2 実験結果
  • 5節 Transformer の発展型(Transformer-XL)
  • 6節 まとめ

2節以降で,各ブロックの紹介(2節),各ブロックをどう組み合わせるかの全体像 (3節)の構造を話す.次ぎ (4節)では,トークナイザ学習(WordPieceなど)など,Transformerの学習の前処理と,学習処理を話す.最後に5節では,発展型の例としてTransformer-XLを概要だけ紹介する.

そのまえに,以降の1節では,まず全体的な俯瞰度を高めてもらいたい.

1.2 Transformer 登場前夜の状況

1.2.1 seq2seq の流行

Transformer登場前夜(2015~2017年頃)の頃は,Sutskever 氏らのseq2seq系列対系列変換問題への敷居がさがり,応用研究が流行した時期である.アテンション機構を用いた発展版である seq2seq with attention がその後すぐ登場して定着したことで,NLP・機械翻訳や,音声認識・TTS・Vision-Languageなどにおいて,seq2seq with attention が広く活用され,流行状態にあった.

Transformerは,それを代替する,高性能な系列対系列変換モデルとして,まず機械翻訳向けに登場した.その後,あらゆる問題でTransformerをよく応用する現代(2018~2019年ごろ以降)の状況へとつながった.

1.2.2「サブワードも含むトークン」の使用

Transformer登場前夜のseq2seq with attent終盤期は,Google NMT [Wu et al., 2016]などでは,サブワードまで分割するトークナイザ(BPEやWordPieceなど)を用いて,「サブワード分割を使用する方向性」も登場していた.よって,Transformer [Vaswani et al., 2017] でもこの流れに乗っとり,入力出力のトークンとして,サブワードまで分割したトークンを用いる.これにより,Transformerでも,語彙外(Out-of-Vocabulary)のトークンを含んだ文章への対応力が期待出来る.

1.3 Transformer の概要の解説: 元論文での提案

[Vaswani et al., 2017] の研究は,機械翻訳向けに,以下の設計を用いた系列対系列変換ネットワークである,Transformerを提案した:

  • スタック化: EncoderとDecoderは,それぞれ6ブロックを直列にスタック化 (= GoogleNMT 等の路線を踏襲).
  • 「トークン埋め込み層位置符号化(2.2節)」の合成(加算による),トークン表現を利用.
  • マルチヘッドアテンション: 系列全体のトークン表現を,アテンションで一括変換.
    1. Encoder-Decoder間:相互アテンションを,マルチヘッドアテンションに変更.
    2. Encoder内/Decoder内:マルチヘッド自己アテンションで系列内全トークン表現を一括変換(再帰型や,時間方向畳み込み[Gehring et al., 2017] は用いない).
    3. Decoder側:未来部分をマスクで隠すマスク化自己アテンションを使用 (2.3.2節).

機械翻訳向けの最初の提案 [Vaswani et al., 2017]では,「トークン群の語彙 (例えば K=1万~5万語程度)」を入力系列(ソース)・出力系列(ターゲット)の母集合として想定する.そして,任意の長さのA言語の1文(トークン系列)を,任意の長さのB言語の1文(トークン系列)に変換する様子を,(ほぼ)アテンションのみの構成で実現している.

系列全体を,グローバルなマルチヘッドアテンションで一気に変換・予測する仕組みを提案したことで,Transformerは効率性・高精度の両方を実現した.ただ,アテンションの多用により巨大なモデルではあり,かなりのメモリ容量が必要ではある.とはいうものの seq2seq with attention よりも大規模であるだけスケールできるゆえ,パターン認識界隈の全域にブレイクスルーを起こすモデルとなった.

1.4 Transformer の部品構成

Transformer による系列変換:(マルチヘッド) アテンションが主部品 [概要図]
図1. Transformer による系列変換:(マルチヘッド) アテンションが主部品 [概要図]

図1は,Transformer のネットワーク構造の概要図である.[Ruan et al., 2021] の構成を元に,少しアレンジした図である(※ 全体の見やすさを優先し,残差接続とレイヤー正規化は全て省略).

Transformerは,6ブロックのEncoder(図1 緑色)と,6ブロックのDecoder(図1青色)から構成される.系列全体を,自己回帰で6回Encode/Decodeし,出力トークン系列を予測する.これまでのseq2seq 同様に,入力系列全体をEncodeしたのち,出力系列のone-hot表現トークンを,1フレームずつ予測していくモデルである.

Transformerの各EncoderブロックおよびDeocderブロックは,以下の2つのサブブロックで構成される:

  • サブブロック(1): マルチヘッドアテンション (図1 薄茶色 2.3節).
  • サブブロック(2): トークン位置ごとに個別実行する「FFN (図1 黄色 2.4節)」.

しかし,各マルチヘッドアテンションでは, [シーケンス長 $n$ × 埋め込み次元 $d_model$]サイズの埋め込み表現を並べてつくった行列を,入力のQ, K, Vとして受け付ける (1.4.1節).

ブロック(1),(2)は,毎回残差接続により残差ブロック化されていて,Transformer全体がResNet化されているゆえ,深いTransformerネットワークをうまく学習しやすくなっている.

以降は,マルチヘッドアテンションの2種類(自己 or 相互)をまとめた後(1.4.1節),各部品の特徴を述べる(1.4.2節).

1.4.1 自己 or 相互 アテンション

Transformer の概要図2:自己 or 相互アテンションとQKV入力の違い
図2. Transformer の概要図2:自己 or 相互アテンションとQKV入力の違い

Transformerの設計は,マルチヘッドアテンションを主要ブロックとして採用したのが,最大の特徴である.マルチヘッドアテンションは「系列内自己アテンション or 系列間相互アテンション」アテンションの役割を担当する(図2):

  1. Encoder内とDecoder内:系列全体の全トークン間の関係を,自己アテンションで階層的に学習 (これがTransformerで提案されたもので一番重要!).
  2. Encoder-Decoder間:相互アテンションで橋渡しを行う(※ seq2seq with attention のアテンションから同じ役割.ただ,マルチヘッドアテンションを用いる).

2.3節にマルチヘッドアテンションの節も用意してあるが,この記事をなるべく短くするため,より詳しくは以下の子記事に,別途まとめてある:

1.4.2 各部品の役割・特徴

つづいて,Transformerの全体的な概要・特徴について,列挙してまとめておく(次回以降,ここを見直すと,すぐにTransformerの全容を復習しやすい).

  • 事前準備:入力/出力言語をトークナイザでトークン辞書化.
  • 入力系列の作成:
    • 各トークンに対してそれぞれ:
      1. 埋め込み層で,埋込みベクトルを計算
      2. 位置符号化で,位置符号化ベクトルを計算
    • 各トークンが「埋込みベクトル + 位置符号化ベクトル」の系列となる.
  • 全体のEncoder-Decoder構造:
    • 以下の2種の層で構成される各ブロックを$N = 6$回ずつ繰り返す:
  • 出力(softmax):出力言語の,各次フレームの「トークン」のクラス確率を予測.
  • マスク化アテンション(2.3.2, Transformer-Decoderで使用):
    • 現フレーム以降のアテンションは,マスク値$-\inf$に(softmax後0になる).
    • これにより,現フレームの予測単語以前のトークンだけ入力とした,seq2seqライクな予測が可能に.

以上がTransformerの概要である.あらゆるタスクで性能を発揮する汎用性の高さを持つので,seq2seq with attention の後継として,音系の分野やVision and LanguageなどでもTransformerが代わりに用いられていく(※ ただし言語モーダル以外でも,信号のトークン化が必要なのは難点にもなるポイント).

1.5 Transformer 登場後の流行状況

1.5.1 BERTの登場と,自己教師あり事前学習の流行.

GPT-2 [Radford et al., 2019], GPT-3[Brown et al., 2020] や,BERT [Devlin et al., 2019] 等の,一般化言語モデル全体教師なし事前学習で,Transformer-Encoder/Decoderが,主要部品として使用されたことをきっかけに,Transformerの使用範囲が急速に拡大し,その後の事前学習(言語)モデル界隈の急速な発展のきっかけともなった.たとえばNLP系の,XLNet,GPT-3,T5など,多くの事前学習モデルや系列変換モデルに,Transformerが主要部品として使用されている.

また Huggingface社Transformersフレームワークが急発展・普及したことから,NLPでTransformer系モデルの利用がまず短期間で爆発的に広まった.

1.5.2 クロスモーダル界隈

NLP以外でも,クロスモーダルな応用でTransformerが人気となる.1.2でも述べたが,seq2seq with attentionで従来は解いていた「クロスモーダル問題」が,解く手段がTransformerへ移行した

例えば,画像キャプション生成などや,音声認識・TTSなど「入出力間のモーダルが異なる,系列対系列変換モデル」でも,Transformerが用いられる.Vision-Languageでも,元はseq2seq with attentionで解かれていた各問題が,Transformerで代わりにクロスモーダル間変化を使用する状況へ移行した.また,クロスモーダル間アテンションも,Trasformer式のアテンションを元にアレンジするように変わった.

1.5.3 ビジョンでの流行

コンピュータビジョンでも物体検出やセマンティックセグメンテーションなど,多くのタスクの研究で,Transformerが使用される状況となった(2020年以降〜).Transformerを使用したVision Transformer(ViT)が物体認識バックボーンとして登場し,(まだ微々たる差の部分もあるが)CNN物体認識精度を上回っている.これにより,各タスクの研究でViTバックボーンやEncoderとして使用されて,台頭する状況になりつつある.また,物体検出でもDETR(=CNN + Transformer)の提案以降は,DETR系モデルが台頭している.

2. Transformer の各構成部品:マルチヘッドアテンション

seq2seq with attentionと同様に「動的に,毎フレームの予測ごとにアテンションの係数が変わる」点は,Transformerも同じである.ただし,そのトークン系列間の相互アテンションをときに用いるのがマルチヘッドアテンションで計算する点が,seq2seq with attentionと異なる.

また,seq2seq with attentionでは,LSTM, GRU で,系列の内部符号化を毎フレームごとに行っていた. それが,Transformerでは,「自己アテンション + FNNにより,トークン系列を(自己回帰的に6回)符号化する」点が異なる(図1, 図2).

以上,1節の概要を,自己・相互アテンションの2視点でふりかえった.ここからは,そのTransformerのっ買う構成部品であるブロックとを,順に見ていきたい. 2節で部品をについて知ったのち,3節でTransformerの全体像について詳細にみていく.

2.1 Transformerの部品構成

Transformerは「マルチヘッドアテンション」を主部品として採用した.これにより系列内・系列外ともにトークン同士の全関係を,毎回のブロックで一括処理できるモデルとなった.マルチヘッドアテンションは,Transformerの主要部品であり重要である.

Transformerの入力は,これまでの系列対系列変換と同様に,語彙化されたトークンから構成される,トークンベクトルN個の系列である.ソース言語とターゲット言語の,各入力トークンは,毎回one-hotベクトルから 埋め込み層で埋め込みを行い,$d_{model}$次元ベクトル表現として使用する.しかし,それまでのword2vecやseq2seqなどの言語モデルと異なり,Transformerは,「ほぼマルチヘッドアテンションによる構成」なので,アテンションだけだとトークンのフレーム位置情報(=何番目のトークンなのか)が,Encoder-Decoder内へ入っていかない.つまり,位置情報を別途埋込む必要がある.

そこで,Transformerでは,位置符号化(Positional Encoding)(2.1節)で得られた(文章系列全体に対する)トークン位置情報を,トークン埋め込み層で得たトークン表現ベクトルに,加算で付加する.そして,その結果得られる「位置情報も含んだトークン表現」を,Encoder・Decoderへ入力する.

TransformerのEncoderとDecoderは,以下の2種類のブロックから主に構成される:

  1. マルチヘッドアテンション(2.3節)
  2. トークン位置ごとに実行する順伝搬ネットワーク(FFN)(2.4節)

2.2~2.4節で,各部品について順に見ていきたい.

まず,入力系列は,サブワードも含むトークン列へトークン分割(4.1節)され,$d_{\text{model}} $次元ベクトルの表現へ埋め込み変換済みであるとする(デフォルトでは$d_{\text{model}} = 512$).

2.2 位置符号化

系列中の各$\text{pos}$番目のトークン表現ベクトルを,Transformer-Encoder(3.2節)/Transformer-Decoder(3.3節)に入力する前に,以下の位置符号化(Positional Encoding)の関数で計算した$d_{\text{model}}$次元ベクトルを加算することにより,トークン位置情報(系列中でのそのトークンの絶対位置情報)を特徴化したものをつくり,トークン表現ベクトルへの付加を行う:

\begin{align} P(\text{pos},2d) &= \sin \left( \frac{ \text{pos} }{ 10000^{2d/d_{model}} }\right) \\P(\text{pos},2d+1) &= \cos \left( \frac{ \text{pos} }{ 10000^{(2d)/d_{model}} }\right) \tag{2.1}\end{align}

ここで,$\text{pos}$は系列における,そのトークンの(絶対的)位置番号を意味し,$d$は$d_{model}$次元トークン埋め込みベクトルの,各次元の値のインデックスである.

この,位置埋込み層は学習せずに決め打ちの関数でトークン位置表現をEncodeする点が,Transformer論文で提案された重要点である.Transformer以前の系列対系列変換では,位置埋込み層もseq2seq with attention内に設置して,一緒に学習する戦略が主流であったが,位置符号化によって,決め打ちの関数で,可変長系列中の各トークン位置(およびその位置関係)を表現したベクトルを計算することができるようになった.

2.3 マルチヘッドアテンション

Transformerの「マルチヘッドアテンション」と,その構成部品である「スケール化ドット積アテンション」
図3. 「マルチヘッドアテンション」(a) と,
その構成部品の「スケール化ドット積アテンション」(基本形(b) or マスク化版(c)).

マルチヘッドアテンションは,QKV計算ベースの「スケール化ドット積アテンション(図3-b, c)」を構成部品として,アテンションの並列計算をおこなう.「複雑なスコア関数の計算・学習」は行わずに,単なるベクトル同士の内積で算出したスカラー類似度を,$\frac{1}{\sqrt{d_k}}$でスケール化した値を,各ベクトル同士のアテンション係数として使用する (図2-b).また,QKVに対応する3つの線形層による変換(図2-a 下部)によって入力を変えることで,類似度計算および合成語の最終出力のコンテキストベクトル値が調整されることになる(2.2.3節).

ただし,アテンションによる関係づけだけだと,線形の変換しか学習できず表現力に乏しい.そこで,Transformerでは,マルチヘッドアテンションによる「(線形)アテンションヘッドの8並列化→結果を1つに合成 」や,非線形層トークン変換の使用(2.4節)により,全体の表現力を高めるカラクリになっている.

2.3.2 アテンションのマスク化;Decoderの未来予測化

Transformer-Decoder(3.3節)も,RNNと同じように系列予測モデル化したい.しかし,系列全体に対する処理であるアテンションでDecodeすると,予測前の「未来のトークン」も全て使用した行列計算をしてしまい,未知のはずの未来のトークンの表現も変換してしまう.これだと未来予測モデルにできない.

そこでマスク化アテンション(Masked Attention)が,Transformer-Decoderの1stブロックむけに提案された(図3-c).Transformer-Decoderでは,マルチヘッドアテンションを,マスク化アテンションとして用いる.これにより,直前のA個のトークンのみをバイナリーマスクで取り出し,未来のフレームはマスク化して使用しない.

より具体的には,ドット積後の行列中で,現フレーム以降にあたる箇所の値を,全て$-\inf$に変更することでマスク化を行う.こうすることによりマスク化したトークン箇所は,softmax後の値が0になり,未来の予測前単語は全て,コンテキストベクトルに加味されないようにできる(※)

※ これについては,参考書籍にあげた Getting Started with Google BERT が,Transformerの内部挙動について,非常に説明が詳細であるのでオススメする.マスク前と後の行列を,具体的な数値で埋めて行列全体を図示してくれているなど,実際の値ベースの懇切丁寧な説明がある.(ただし,この本はTransformerよりも,BERTとそのBERT系各種モデルの基礎的理解を,広く得ることが主眼ではある.)

Transformer-Decoderでマルチヘッドアテンションのマスク化を行うと,学習中の各フレーム$i$において,以下のの両方が,予測前の未来トークンの情報を全て無視できる:

  • Decoder 入力側から2つ目の,マルチヘッド(相互)アテンション
  • Decoder 入力側から1つ目の,マルチヘッド(自己)アテンション

この「マスク化アテンション」により,テスト時と同じ条件である「現フレームまでのトークンしか情報を知らないアテンション」を,Transformer-Decoder側 (3.3節)で,学習ができるようになった.

2.4 トークン位置ごとに実行する「FFN」

全結合層 W1ReLU全結合層 W2」で構成される,3層MLPの順伝搬ネットワーク(Feed Forward Neural Network, FFN)を,マルチヘッドアテンション実施後のSubcoder後半に,各トークンに対して個別に順伝搬する.

FFNでは,入力時には512次元から,まず W1によって中間層では2048次元に高次元化する.その後ReLUで活性化したのち,W2では元の512次元に戻して出力する.つまり,N個のトークン表現ベクトルが入力であれば,この3層FFN 1つだけを用いて, N個をそれぞれ表現変換するわけである.

$L$個の各トークン埋め込みベクトルに対して,同一のFFNを用いて,個別に各トークン位置で適用するので,重み共有が行えており,モデル効率も計算効率も良い設計だといえる.

初期Transformer論文ではReLUが使用されていたが,BERT/GPTの頃にGELUが代わりに使われて以降,Transformer系ネットワークではGELUの使用が,各論文では一般的となった.(ここは,GELUより新しいSwishなどのReLU型活性化関数を代わりに使用してもよい).

3. Transformer の全体像

3.1 残差接続とレイヤー正規化層

Transformerは,Transformer-Encoder (3.2節) × 6個 と Transformer-Decoder(3.3節) 6個の,計12個のSubencoder(ブロック)を用いる.

図1~3 では見やすさ優先で省略しているが,各Subcoder内では各層ごとに毎回,残差接続レイヤー正規化を挿入する.また,FFN内の層間におく活性化関数には,ReLUが採用された

(※ 2.4で述べたように,その後 BERT/RoBERTa/ALBERTなどでは GELU(Gaussian Error Linear Units)が採用されている)

Google NMT [Wu et al., 2016] など,当時の最先端の機械翻訳やNLPモデルでは,LSTMを8層くらい階層的に積む(スタックする)ことで,各フレームにおける変換表現力を向上させていた(※).このスタック化設計を,再帰型NNの使用は辞めて,アテンションブロック中心で系列内自己回帰を構成するようにしたのが,Transformerであると言える.

※ Transformer以前の,NLP向けスタック化は,Yoav GoldbergのNLP本が詳しい.

3.2 Tranformer-Encoder の構成

TransformerのEncoder構成
図4. TransformerのEncoder構成

TransformerのEncoderモジュール(図4-a)は,まず入力層で,入力系列の埋め込み表現(行列)に,位置符号を足した表現(=行列)を受け取る.その入力に対し,Encoderブロック(図4-b)を6回繰り返し,系列表現のEncodingを実行する.以上がEncoderの構成である.

各Encoderブロック(図4-b)は,以下の2つのブロックから構成される:

  1. FFN(2.3節):各トークン位置で個別に実行し,トークン表現を非線形変換.
  2. マルチヘッド自己アテンション:系列全体の全トークンを一括変換.

また,これら2つの各サブ層には,残差接続とレイヤー正規化を挿入して,Transformer 全体の深さに対する対策がとられている.

マルチヘッドアテンションでは,入力系列の自己アテンションを計算する.6ブロックそれぞれにマルチヘッド自己アテンションがあるので,「6層の階層的な自己アテンション」をEncoder全体(図-a)を通じて学習することとなる.また,その直後にFFN(2.4節)によって,異なるトークン埋め込みベクトルへ非線形変換する.

3.3 Transformer-Decoder の構成

TransformerのDecoder構造
図5. TransformerのDecoder構成

各Decoderブロック(図5-b)は以下の3つのブロックから構成される:

  1. 順伝搬ネットワーク:各トークン位置で実行.
  2. マルチヘッド相互アテンション:Encoder 6の表現を$\bm{K},\bm{V}$に,前Decoderブロックの表現を$\bm{Q}$に使用.
  3. マスクありマルチヘッド自己アテンション:入力系列のうち,現フレーム以降をマスクして無効にできるアテンション.

Decoderでも,これらの各ブロックの後に,残差接続とレイヤー正規化を毎回挿入する.

4. Transformer の学習

4.1 サブワード分割の使用

Transformerの当時(2017)は,元の文章をサブワード分割モデルを用いて,まずサブワードも含んだ「ワード + サブワード」のトークン単位への分割器をソース言語・ターゲット言語から学習し(例:「like + ed 」や 「new + er」),そのうえで「サブワードを含むトークン単位で系列変換を行う」路線が,機械翻訳などのNLP問題で,あらたに標準的アプローチになりつつあった.

seq2seq登場後の初期は,単語単位で系列をモデリングしていた.しかし,語彙数爆発でメモリ許容量を超過する問題や,逆に語彙に含まれない未知語である「語彙外(Out of Vocabulary: OOV)の単語」への対応がうまくいかず解決できてい問題でかった.例えば,seq2seq with attention [Luong et al., 2015] では,学習データの文から単語登場回数を計算し,頻出の5万語の単語のみに,語彙を限定するという対応をおこなっていた.

そこに,サブワード単位までのトークン化を行うと,サブワードも用いて系列表現および系列変換を学習できるようになる.すなわち,「未知語」や「合成語」の予測・認識が強化される利点が得られる.名詞や動詞に「活用」の変化があるラテン語系言語の場合,特に有効である.また我々の「日本語」も,動詞には活用が存在するし,名詞の自由な合成も起こる言語であるゆえ,サブワード化は言語モデリングにおいて有効といえる(※ 日本語トークナイザを利用した「Transformerの日本語への対応」については,この記事では触れない).

当時の代表例としては, バイト対符号化(byte pair encoding)を用いて,サブワードありのトークン分割をおこなって機械翻訳 [Senrich et al.,2015] や,単語ごとにトークン分割をおこなうWord-Pieceを用いたGoogle NMT [Wu et al., 2016] であれば,既に提案されていた.

そこでTransformerでは,サブワード単位まで分割するトークナイザで,トークン化しておいた「トークン辞書」を語彙とした実験が行われた.英語-ドイツ語の実験では,WMT2014データセットの文章から,バイト対符号化(BPE)により37,000語のトークンに分割し,語彙として使用した.一方,更に大規模であるWMT2014の英語-フランス語データセットでは,word-pieceトークナイザで,32,000語のトークン語彙に分割した.

4.2 Transformerの正則化

Transformerは巨大モデルを,スクラッチからの学習で学習する.つまり,各マルチヘッドアテンション中の8並列のQKVアテンション用の重み係数は,すべてランダム重み初期化である.(※トークンの埋め込み層も一緒にスクラッチから学習).よって,巨大モデルTransformerでは,過学習への対策が非常に大事であり,正則化の使用が必須である.

具体的には,各ブロックの出力に対して,ドロップアウトを使用して学習を行うことで正則化する.それに加えて,ラベル平滑化も使用しての正則化も行う

※ 3.1節でも取り上げたように,GPTやBERT内部のTransformerでは,FFN内のReLUGELUに変更された.そして,以降はTransformer系ネットワークによくGELUが採用されている.

4.3 論文での実験結果

元論文 [Vaswani et al., 2017] では,英語-ドイツ語間,英語-フランス語間のデータセットで,機械翻訳モデルを学習する実験がおこなわれた.その結果,当時の最先端であった ConvSeq2Seq [Gehring et al 2017] や,Google NMT [Wu et al., 2016] と,同等もしくは少し上回るBLEU値の精度を,控えめの計算コスト量で実現できることを示した.

5. Transformer の発展型

5.1 Transformer-XL

Transformerの改良版として Transformer-XL [Dai et al. 2019] が提案された.TransformerとRNNをミックスしたハイブリッドモデルにより,Transformerよりも長期のトークン間での依存関係を学習できる.

Transformerからの改善点は以下の2点である:

  1. クラスタリングしたセグメント単位での再帰を追加.(元のTransformerでは,シーケンス全体で一気にアテンション)
  2. 位置符号化から,(query-key) 単語間の相対位置符号化に変更.

Transformerでは,固定長の短い単語間コンテキストしかマルチヘッドアテンションに学習できなかった.それを 1. により,セグメント単位でRNNのように再帰させて予測することで,小分けなセグメント間でだけ(全体)アテンションを行うようにした.なおかつ, 2.によりセグメント内で単語間の相対位置関係をトークンに使用した.

以上の2つの変更により,Transformer-XLは,元のTransformerよりも,長期のトークン間依存関係を表現できるようになり,短文の変換モデルしか学習しづらかったオリジナルのTransformerを,長文向けに改善できた.

6. まとめ:アテンションの大々的導入が,Transformerの成功要因

以上,Transformerの基本モデルについての解説を「seq2seq with attentionを用いた機械翻訳(系列対系列変換)の発展型モデル」という視点で新旧比較的に行った.初提案の論文 [Vaswani et al., 2017] の解説のみにフォーカスする記事構成とした.また,マルチヘッドアテンションは,子記事に詳細を移動した.

Transformerの一番のポイントは『マルチヘッドアテンションEncoder-Decoder全体でのメイン部品使用』であったと言える.マルチヘッドアテンションの使用により,効率的な行列同士の積中心の,系列全体一括計算にも関わらず,高精度な系列対系列変換モデルが実現できた.これにより,多くのタスクでTransformerが活用される昨今の展開につながったといえる.

参考書籍

References

  • [Brown et al., 2020] Tom B Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplan, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, et al. 2020. Language models are few-shot learners. arXiv preprint arXiv:2005.14165.
  • [Carion et al., 2020] Nicolas Carion,Francisco Massa,Gabriel Synnaeve,Nicolas Usunier, Alexander Kirillov, and Sergey Zagoruyko. End-to-End object detection with transformers. In ECCV, 2020.
  • [Cheng et al., 2016] Jianpeng Cheng, Li Dong, and Mirella Lapata. Long short-term memory-networks for machine reading. In EMNLP, 2016.
  • [Dai et al., 2019] Zihang Dai, Zhilin Yang, Yiming Yang, William W Cohen, Jaime Carbonell, Quoc V Le, and Ruslan Salakhutdinov, Transformer-XL: Attentive language models beyond a fixed- length context. In ACL, 2019.
  • [Devlin et al., 2019] Devlin, J., Chang, M.-W., Lee, K., and Toutanova, K. (2019). “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.” In Proceedings of NAACL, pp. 4171–4186.
  • [Gehring et al., 2017] Gehring, Jonas, et al. “Convolutional sequence to sequence learning.” In ICML. , 2017.
  • [Luong et al., 2015] M.-T. Luong, H. Pham, and C. D. Manning, Effective approaches to attention-based neural machine translation. In EMNLP, 2015.
  • [Parikh et al., 2016] Ankur Parikh, et al.,. A decomposable attention model. In EMNLP, 2016.
  • [Radford et al., 2019] Alec Radford, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei, and Ilya Sutskever. 2019. Language models are unsupervised multitask learners. OpenAI Blog, 1(8).
  • [Ruan et al., 2021] Ruan, Ludan, and Qin Jin. “Survey: Transformer based Video-Language Pre-training.” arXiv preprint arXiv:2109.09920 (2021).
  • [Sennrich et al., 2016] Rico Sennrich, Barry Haddow, and Alexandra Birch. 2016. Neural machine translation of rare words with subword units. In ACL, 2016.
  • [Vaswani et al., 2017] Ashish Vaswani, et al. Attention is all you need. In NIPS, 2017.
  • [Wu et al., 2016] Yonghui Wu, et al. Google’s neural machine translation system: Bridging the gap between human and machine translation. arXiv preprint arXiv:1609.08144, 2016.

参照外部リンク

関連記事