1. Transformer とは [概要]
Transformer とはアテンションを主要部品として用いた,深層学習むけの(トークン)系列変換モデルである.従来の系列変換モデルの定番であった「seq2seq with attention」の改善案として,Transformerは最初は機械翻訳むけに提案された.マルチヘッドアテンションを採用したことによる,Transformerの計算効率性と高性能性・スケール性から,その後は seq2seq with attentionの後継の系列変換モデルとして,各モーダル分野に広く普及した.
この記事では,機械翻訳むけのTransformer [Vaswani et al., 2017] にフォーカスして,図も豊富に使いながら解説していく(1.1節).各層・ブロック(2節)と全体構造(3節)を順に紹介していく.記事を読了後には,Transformerの「系列変換モデル用の Encoder-Decoder」としての全体構造と,各構成部品(マルチヘッドアテンション,位置符号化,FFNによるトークン表現変換, トークン分割)が,俯瞰しやすくなるような記事構成にした (2~4節).
Transformerの構造は,マルチヘッドアテンションを主部品に用いた「Encoderブロック(3.2節)」「Decoderブロック(3.3節)」をそれぞれN回スタックした構成の,深いEncoder-Decoderである.また,Transformerでは,入力トークンへの系列内での位置情報付与に,位置符号化を用いることを提案した.
seq2seq with attention系モデルの後継の系列変換モデル として,Transformerは各種の系列変換タスクで使用された (Vision-Language,TTS,音声認識など).その後は,そのスケール性の高さや,マルチモーダル処理化の容易さなどから,画像・言語・音の各パターン認識・生成分野全般で,定番ネットワーク構造として使用されている.
図0は,機械翻訳目的の,最初のTransformer [Vaswani et al., 2017]における,処理手順とネットワーク構造の概略図である.Transformerでは,自己アテンション(Self-attention)を内部に用いたDecoder N個とEncoder M個を,繰り返し使用する処理になっている.
- IT Text 自然言語処理の基礎 オーム社,2022.
- 6章 Transformer (p141)
- 7章 事前学習済みモデルの背景 [図7.1 代表的な事前学習済みモデル] (p169)
これらEncoder(3.2節)とDecoder(3.3節)を用いて,トークン系列全体の各トークン(ベクトル)表現を,一気にN回 →M回 (各フレームtで) 変換(=Transform)する[図0].Decoder側は微妙に処理が異なり,以下2点がEncoder処理とは異なる:
- ソース系列のEcoding結果も,Decoderの系列間アテンションで使用する
- 次のトークンの予測も行う
Transformer (図1)の,従来の系列変換モデルとの大きな違いは,以下の2点である:
- 大きな違い1: 自己アテンション(Self-attention)の導入.
- seq2seq with attentionは「RNN + 系列間(相互)アテンションによる,フレームごとの再帰変換」処理だった.
- Transformerは変わりに「Transformer-Encoder(3.2)/Transformer-Decoder(3.3)」のN回繰り返し(スタック)で担当させる [図1] (※ よって「Transformers」と複数形)
- 大きな違い2: マルチヘッドアテンションをメイン部品に使用.
- 主に「マルチヘッドアテンション」で,トークン系列変換を行うのが,Transformerの設計の一番の特徴.(よって「Attention is all you need」という論文タイトル)
- おかげで,Transformerは高速かつスケールする大規模系列変換ネットワークを学習できる.
※ DETRのように,集合出力の問題でも力を発揮するのも,Transformer系モデルの利点.
1.1 記事の構成 [旧技術との比較も重視]
以降は,以下の構成で Transformerの基本モデルを紹介していく:
- 1節 [概要と前後]
- 1.2 (A)登場前夜
- 1.3 (B)Transformer 概要 [2~4節の概要]
- 1.4 (C)登場後
- 2節 Transformerの各構成部品
- 2.2 位置符号化
- 2.3マルチヘッドアテンション
- 2.4トークン位置ごとのFFN
- 3節 Transformer の全体構成:系列変換の全容
- 4節 学習
- 4.1 サブワードまでトークン分割
- 4.2 正則化が勝負
- 4.3 実験結果
- 5節 発展型(Transformer-XL)
- 6節 まとめ
2節以降でTransformerの部品と全体構造の紹介に入るまえに,以降の1節(1.2~1.4)では,まずTransformerの登場前と登場後の状況もたどる.これにより,全体的なTransformerへの俯瞰度を高めてもらいたい.
Transformerは,これまでのNLPモデル同様に,入力系列を単語・サブワードの単位にトークナイズして辞書化し,トークンEmbeddingの学習も,埋め込み層を用いて(系列変換部分と同時に)学習する.これにより,トークン化さえ行えば,文章のみならず,画像や音などのデータも入力できるゆえ,各シングルモーダルや,マルチモーダル(Vision-Language, Vision-Audio, 音声認識)向けに,(seq2seq with attention時代と同様に) Transformer が広く応用されている.
このサイトでは系列変換モデルの従来の主役であったseq2seq with attention・シングルアテンションとの違いも示し,「新旧の系列対系列変換モデルの比較」もおこなうことにより,「Transformerの各部品が,なぜそういう部品の構成になったか?」がとらえやすい解説にした.
もちろん,元論文でも新旧比較はされているので,元論文や各タスクの関連研究も読むことを通しても,その理由・経緯を理解していっていただきたい.
1.2 (A)登場前夜:系列変換の状況
1.2.1 seq2seqの流行
Transformer登場前夜(2015~2017年頃)の頃は,Sutskever 氏らのseq2seq の登場で,系列対系列変換問題への敷居が一気にさがり,その応用研究が流行しはじめた時期である.アテンション機構を用いた発展版 seq2seq with attention がその後すぐ登場して定着したことで,NLP・機械翻訳や,音声認識・TTS・Vision-Languageなどにおいて,seq2seq with attention が広く活用され,流行状態にあった.
Transformerは,それを代替する,「より高性能コンパクトで,スケールする 系列対系列変換ネットワーク」として,最初は機械翻訳向けに登場した.その後,多くの深層学習を利用するタスクで,Transformerのネットワーク構造を活用する状況につながった.
1.2.2 サブワード分割の使用
Transformer登場前夜のseq2seq with attention終盤期のころ,Google NMT [Wu et al., 2016]などでは,トークナイザ(WordPieceなど)を用いた「サブワード分割結果をトークン単位に使用する方向性」も登場していた.それまでのNLPやニューラル言語モデルは「ワード単位」でモデリングするのが普通だったのだが,サブワード単位や,文字単位,バイト単位(BPEなど)のように,単語を更に分解した単位を(サブワード)トークンとして用いるようになってきていた.
Transformer元論文 [Vaswani et al., 2017] でもこの流れに乗っとり,入力・出力のトークンにサブワードレベルまで分割したトークンを用いる.これにより,Transformerでも,語彙外(Out-of-Vocabulary)のトークンを含んだ文章への対応力が期待出来る.
1.3 (B) 元論文[2~4節の概要]
従来の系列対系列変換でよく使用されていた seq2seq with attentionの後継モデルとして,まずNLPの機械翻訳向けに,Transformerは当初提案された[Vaswani et al., 2017].その後,非常に多くのパターン認識・生成分野でTransformerおよび,Transformer-EncoderやTransfomer-Decoderが使用されている.
1.3.1 特徴: 「主にアテンション」の構成
Transformerの特徴として,以下の点があげられる:
- スタック化: Transformer-Encoder(3.2節)とTransformer-Decoder(3.3節)を,Nブロックを直列にスタック化 [図1](= GoogleNMT 等の路線を踏襲).
- 各トークン表現に「トークン埋め込み層と位置符号化(2.2節)」を加算したものを使用.
- マルチヘッドアテンション:
- 系列全体のトークン表現N個を,アテンションで一括変換全トークン表現を一括変換(再帰型や,時間方向畳み込み[Gehring et al., 2017] は用いない):
- Encoder-Decoder間:マルチヘッド相互アテンション.
- Encoder内/Decoder内:マルチヘッド自己アテンション.
- Transformer-Decoder側(3.3節):未来部分を隠すマスク化自己アテンション (2.3.2節).
- 系列全体のトークン表現N個を,アテンションで一括変換全トークン表現を一括変換(再帰型や,時間方向畳み込み[Gehring et al., 2017] は用いない):
機械翻訳向けの最初の提案 [Vaswani et al., 2017]では,「トークン群の語彙 (例えば K=1万~5万語程度)」を入力系列(ソース)・出力系列(ターゲット)の母集合として想定する.そして,任意の長さのA言語の1文(トークン系列)を,任意の長さのB言語の1文(トークン系列)に変換する様子を,(ほぼ)アテンションのみの構成で実現している.
系列全体を,グローバルなマルチヘッドアテンションで一気に変換・予測する仕組みを提案したことで,Transformerは効率性・高精度の両方を実現した.ただ,アテンションの多用により巨大なモデルではあり,かなりのメモリ容量が必要ではある.とはいうものの seq2seq with attention よりも大規模であるだけスケールできるゆえ,パターン認識界隈の全域にブレイクスルーを起こすモデルとなった.
1.3.2 部品構成 [2節の概要]
図1は,Transformer のネットワーク構造の概要図である.[Ruan et al., 2021] の構成を元に,少しアレンジした図である(※ 見やすさを優先し,残差接続とレイヤー正規化は省略).
各EncoderおよびDeocderブロックは,以下の2つのサブブロックから構成される:
- サブブロック(1): マルチヘッドアテンション (図1 薄茶色 2.3節).
- サブブロック(2): トークン位置ごとに個別実行する「FFN (図1 黄色 2.4節)」.
Transformerは,6ブロックのEncoder(図1 緑色)と,6ブロックのDecoder(図1青色)から構成される.系列全体を,自己回帰で6回Encode/Decodeし,出力トークン系列を予測する.これまでのseq2seq 同様に,入力系列全体をEncodeしたのち,出力系列のone-hot表現トークンを,1フレームずつ予測していくモデルである.(※ Nトークン入力したら,予測文字を足して一文字だけずれたNトークンが予測される).
しかし,各マルチヘッドアテンションでは, [シーケンス長 $n$ × 埋め込み次元 $d_model$]サイズの埋め込み表現を並べて作成した行列 $\bm{Q}, \bm{K}, \bm{V}$ を,入力として受け付ける (1.4.1節).
サブブロック(1),(2)は,毎回残差接続により残差ブロック化されていて,Transformer全体がResNet化されているゆえ,深いTransformerネットワークをうまく学習しやすくなっている.また,マルチヘッドアテンションとFFNの直後にはレイヤー正規化が挿入されている(add+normとよく書かれている部分).
以降は,マルチヘッドアテンションの2種類(自己 or 相互)をまとめた後(1.4.1節),各部品の特徴を述べる(1.4.2節).
1.3.3 どれが「自己 or 相互」?
Transformerの設計は,マルチヘッドアテンションを主要ブロックとして採用したのが,最大の特徴である.マルチヘッドアテンションは「系列内自己アテンション or 系列間相互アテンション」アテンションの役割を担当する(図2):
- Encoder内とDecoder内:
- 系列全体の全トークン間の関係を,自己アテンションで階層的に学習
- これがTransformerで提案されたものであり,一番重要!
- Encoder-Decoder間:
- 相互アテンションで橋渡しを行う
- seq2seq with attention の系列間アテンションと同じ役割.
2.3節,あるいは以下の子記事で,より詳しく説明している:
1.4 (C) 登場後
1.4.1 BERTとGPT:自己教師あり事前学習.
また Huggingface社のTransformersフレームワークが急発展・普及したことから,NLPでTransformer系モデルの利用がまず短期間で爆発的に広まった.
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が主要部品として使用されている.
また系列対系列変換に限らず,近年の巨大Deepネットワークは,Transformerやマルチヘッドアテンションを基盤構造として採用している派生型だらけの状況となっている.自己教師有り学習を用いた一般化言語モデルである BERT/ GPT は,Transformer-Encoder / Transformer-Decoderで構成されている.また,コンピュータビジョンでも Vision Transformer(ViT) や DETR に,Transformer構造が基本設計として応用されたことで,Transformerが基盤構造の1つとなりつつある.
1.4.2 クロスモーダル界隈
NLP以外でも,クロスモーダルな応用でTransformerが人気となる.1.2でも述べたが,seq2seq with attentionで従来は解いていた「クロスモーダル問題」が,解く手段がTransformerへ移行した.画像キャプション生成などや,音声認識・TTSなどで,クロスモーダルなTransformerが用いられる.
Vision-Languageでも,元はseq2seq with attentionで解かれていた各問題が,Transformerで代わりにクロスモーダル間変化を使用する状況へ移行した.また,クロスモーダル間アテンションも,元はseq2seq with attention式のシングルヘッドアテンションが使われていたのが,Transformer式のマルチヘッドアテンションをアレンジして使うように変わっていった.
1.4.3 ビジョンでの流行
コンピュータビジョンでも物体検出や意味的分割など,多くのタスクの研究で,Transformerが使用される状況となった(2020年以降〜).Transformerを使用したVision Transformer(ViT)が物体認識バックボーンとして登場し,CNNの物体認識精度を上回りはじめている(そのあとCNNが逆転もしている).各タスクの研究でViTバックボーンやEncoderとして使用され,まず研究コミュニティで普及し始める状況になった.物体検出でもDETR(=CNN + Transformer)系モデルが台頭している.
ここからは,そのTransformerの構成部品である「ブロック」と「層」を,順に見ていきたい. 2節で各構成部品について紹介する.
Transformerは「トークン系列間の相互アテンション」には、(シングルアテンションではなく)マルチヘッドアテンションを用いる点がseq2seq with attentionと異なる.またseq2seq with attentionの頃は,RNN (LSTM, GRU)の再帰層により「系列内部の符号化」を行っていたが,Transformerでは「自己アテンション + FNNを用いて,トークン系列を(自己回帰的にN回)符号化する」点が異なる.
2. Transformer の部品構成
Transformerは「マルチヘッドアテンション」を主部品として採用した.これにより系列内・系列外ともにトークン同士の全関係を,毎回のブロックで一括処理できるモデルとなった.
Transformerの入力は,これまでの系列対系列変換と同様に「語彙化されたトークン」から構成されたトークンベクトルN個からなる系列である.ソース言語とターゲット言語の,各入力トークンは,毎回one-hotベクトルから 埋め込み層で埋め込みを行い,$d_{model}$次元ベクトル表現として使用する.しかし,それまでのword2vecやseq2seqなどの言語モデルと異なり,Transformerはほぼマルチヘッドアテンションで構成される.従って,アテンションだけで済ませると,「トークンのフレーム位置情報(=何番目のトークンなのか)」が,Encoder-Decoder内へ入っていかずにわからない.つまり,位置情報を,別途埋込む必要がある.
そこで,Transformerでは,位置符号化(Positional Encoding)(2.1節)で得られた(文章系列全体に対する)トークン位置情報を,トークン埋め込み層で得たトークン表現ベクトルに,加算で付加する.そして,その結果得られる「位置情報も含んだトークン表現ベクトル」を,Encoder・Decoderへと入力する
※ 各トークン入力部の挙動は,位置符号化(2.1節)とその子記事で説明.
Transformer-Encoder(3.2節)とTranformer-Decoder(3.3節)は,以下2つが主部品である:
- [2.2節] マルチヘッドアテンション
- 系列中の全ベクトル(表現)を,一挙に変換.
- [2.4節] 順伝搬ネットワーク(FFN)
- トークン位置ごとに,ベクトル表現を個別に(FFNで)変換.
2.2~2.4節で,各部品について順に見ていきたい.
まず,入力系列は,サブワードも含むトークン列へトークン分割(4.1節)され,$d_{\text{model}} $次元ベクトルの表現へ埋め込み変換済みであるとする(デフォルトでは$d_{\text{model}} = 512$).
2.1 位置符号化

- Pythonで学ぶ画像認識 (機械学習実践シリーズ), インプレス, 2023.
- ViTを実装してみよう – パッチ特徴,位置埋め込み,クラス埋め込み (p144)
- DETRを実装してみよう- 位置エンコーディング p247
系列中$\text{pos}$番目のトークン表現ベクトルをTransformer-Encoder(3.2節)/Transformer-Decoder(3.3節)に入力する前に,以下の位置符号化の関数で計算した$d_{\text{model}}$次元の位置情報ベクトルを加算する:
\begin{align} \text{PE}(\text{pos},2d) &= \sin \left( \frac{ \text{pos} }{ 10000^{2d/d_{model}} }\right) \\ \text{PE}(\text{pos},2d+1) &= \cos \left( \frac{ \text{pos} }{ 10000^{2d/d_{model}} }\right) \tag{2.1}\end{align}
ここで,$\text{pos}$は系列における,そのトークンの(絶対的)位置番号を意味し,$d$は$d_{model}$次元トークン埋め込みベクトルの,各次元の値のインデックスである.
この,位置埋込み層は学習せずに決め打ちの関数でトークン位置表現を符号化する点が,Transformer論文で提案された重要点である.以前の系列対系列変換では,位置埋込み層もseq2seq with attention内に設置して,一緒に学習する戦略が主流であった.
2.2 マルチヘッドアテンション
- Pythonで学ぶ画像認識 (機械学習実践シリーズ), インプレス, 2023.
- Vision Transformerを実装してみよう
- (QKV式の)アテンション機構 (p132)
- マルチヘッドアテンション (p133)
- Vision Transformerを実装してみよう
マルチヘッドアテンションは,QKV計算ベースのスケール化ドット積アテンション(図4-b, c)を構成部品として,アテンションの並列計算をおこなう.複雑なスコア関数の計算・学習は行わず,単純に「ベクトル同士の内積」で算出したスカラー類似度を $\frac{1}{\sqrt{d_k}}$でスケール化した値を,各トークンベクトル間のアテンション係数として使用する (図4-b).
また,QKVに対応する3つの全結合層 $\bm{Q},\bm{K},\bm{V}$をもちいた変換 (図2-a 下部)により,入力のトークン表現ベクトルを調整する.これにより,ベクトル同士の類似度計算前のベクトル表現,および合成後の最終出力のコンテキストベクトル表現が$\bm{Q},\bm{K},\bm{V}で最初に調整されることになる(2.2.3節).
ただし,アテンションによる関係づけだけだと,線形の変換しか学習できず表現力に乏しい.そこで,Transformerでは,マルチヘッドアテンションによる「(線形)アテンションヘッドの8並列化→結果を1つに合成 」や,非線形層トークン変換の使用(2.4節)により,全体の表現力を高めるカラクリになっている.
2.2.1 マスク化アテンション:未来予測化
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-Decoderでマルチヘッドアテンションのマスク化を行うと,学習中の各フレーム$i$において,以下のの両方が,予測前の未来トークンの情報を全て無視できる:
- Decoder 入力側から2つ目の,マルチヘッド(相互)アテンション
- Decoder 入力側から1つ目の,マルチヘッド(自己)アテンション
この「マスク化アテンション」により,テスト時と同じ条件である「現フレームまでのトークンしか情報を知らないアテンション」を,Transformer-Decoder側 (3.3節)で,学習ができるようになった.
2.3 トークン位置ごとに実行するFFN
- Pythonで学ぶ画像認識 (機械学習実践シリーズ), 田村 雅人, 中村 克行, インプレス, 2023.
- ViTを実装してみよう – Transformer エンコーダにおけるFNNの構造 (p141)
- DETRを実装してみよう – Transformer エンコーダ層 (p252)
「全結合層 W1 – ReLU – 全結合層 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
- Pythonで学ぶ画像認識 (機械学習実践シリーズ), インプレス, 2023.
- ViTを実装してみよう – Transformer エンコーダの構造 (p131)
- DETRを実装してみよう – Transformer エンコーダ層 (p252)
Transformer-Encoderモジュール(図4-b)は,まず入力層で,入力系列の埋め込み表現(行列)に,位置符号を足した表現(=行列)を受け取る.その入力に対し,Encoderブロック(図4-b)を6回繰り返し,系列表現のEncodingを実行する.以上がEncoderの構成である.
各Transformer-Encoderブロック(図4-b)は,以下の2つのブロックを順に実行する:
- マルチヘッド自己アテンション:系列全体の全トークンを一括変換.
- FFN(2.3節):各トークン位置で個別に実行し,トークン表現を非線形変換.
また,これら2つのTransformer-Encoderの各サブ層には,残差接続とレイヤー正規化を挿入して,Transformer 全体の深さに対する対策がとられている.
マルチヘッドアテンションでは,入力系列の自己アテンションを計算する.6ブロックそれぞれにマルチヘッド自己アテンションがあるので,「6層の階層的な自己アテンション」をEncoder全体(図-a)を通じて学習することとなる.また,その直後にFFN(2.4節)によって,異なるトークン埋め込みベクトルへ非線形変換する.
3.3 Transformer-Decoder
- Pythonで学ぶ画像認識 (機械学習実践シリーズ), インプレス, 2023.
- DETRを実装してみよう – Transformer デコーダ層 (p255)
各Decoderブロック(図5-b)は以下の3つのブロックから構成される:
- 順伝搬ネットワーク:各トークン位置で実行.
- マルチヘッド相互アテンション:Encoder 6の表現を$\bm{K},\bm{V}$に,前Decoderブロックの表現を$\bm{Q}$に使用.
- マスクありマルチヘッド自己アテンション:入力系列のうち,現フレーム以降をマスクして無効にできるアテンション.
Tranformer-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万語の単語のみに,語彙を限定するという対応をおこなっていた.
そこに,サブワード単位までのトークン化を行うと,サブワードも用いて系列表現および系列変換を学習できるようになる.すなわち,「未知語」や「合成語」の予測・認識が強化される利点が得られる.名詞や動詞に「活用」の変化があるラテン語系言語の場合,特に有効である.また我々の「日本語」も,動詞には活用が存在するし,名詞の自由な合成も起こる言語であるゆえ,サブワード化は言語モデリングにおいて有効といえる
当時の代表例としては, バイト対符号化(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では,過学習への対策が非常に大事であり,正則化の使用が必須である.
既に述べてきたように,時系列モデルむけのバッチ正規化であるレイヤー正規化が,Trasnformer-Encoder・Transformer-Decoder内に用いている.これにより,マルチヘッドアテンションとFFNの処理が終わるごとに,毎回レイヤー正規化で正則化ができる.
レイヤー正規化に加えて,各ブロックの出力に対して,ドロップアウトを使用して学習を行うことで更に正則化がされている.またラベル平滑化も使用しての正則化も行われる.
※ 3.1節でも取り上げたように,GPTやBERT内部のTransformerでは,FFN内のReLUがGELUに変更された.そして,以降は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点である:
- クラスタリングしたセグメント単位での再帰を追加.(元のTransformerでは,シーケンス全体で一気にアテンション)
- 位置符号化から,(query-key) 単語間の相対位置符号化に変更.
Transformerでは,固定長の短い単語間コンテキストしかマルチヘッドアテンションに学習できなかった.それを 1. により,セグメント単位でRNNのように再帰させて予測することで,小分けなセグメント間でだけ(全体)アテンションを行うようにした.なおかつ, 2.によりセグメント内で単語間の相対位置関係をトークンに使用した.
以上の2つの変更により,Transformer-XLは,元のTransformerよりも,長期のトークン間依存関係を表現できるようになり,短文の変換モデルしか学習しづらかったオリジナルのTransformerを,長文向けに改善できた.
6. まとめ
以上,Transformerの基本モデルについての解説を「seq2seq with attentionを用いた機械翻訳(系列対系列変換)の発展型モデル」という視点で新旧比較的に行った.初提案の論文 [Vaswani et al., 2017] の解説のみにフォーカスする記事構成とした.また,マルチヘッドアテンションは,子記事に詳細を移動した.
6.1 アテンションの大々的導入が成功要因
Transformerの一番のポイントは『マルチヘッドアテンションのEncoder-Decoder全体でのメイン部品使用』であったと言える.マルチヘッドアテンションの使用により,効率的な行列同士の積中心の,系列全体一括計算にも関わらず,高精度な系列対系列変換モデルが実現できた.
6.2 その後の展開
これにより,多くのタスクで,(応用の敷居が低い)シンプルな機構のTransformerが活用される,昨今の展開につながったといえる.BERTとGPT-3などの自己教師有り学習Transformerの登場によって,スケールしやすくなり,
また,アテンションを使用した「クロスモーダル」処理も,seq2seq時代以上に活発化し,マルチモーダルやマルチビューの合同処理が多くなってきているとも言える.
参考書籍
- Pythonで学ぶ画像認識 (機械学習実践シリーズ) 【📖紹介記事】, 田村 雅人, 中村 克行, インプレス, 2023.
- 4章 画像分類 3節 Vision Transformerを実装してみよう (p130~)
- 5章 物体検出 4節 Transformer による手法- DETRを実装してみよう (p243~)
- 6章 画像キャプショニング 5節 Transformerによる画像キャプショニングを実装してみよう
- Getting Started with Google BERT: Build and train state-of-the-art natural language processing models using BERT, Packet publishing, 2020.
- BERT解説本だが,Transformerの解説も,非常に詳細で具体的で分かりやすい.
- 具体性が高い説明のほうが,イメージをつかみやすいひとにオススメ.QKV行列を,実際のベクトル数値が入った行列で図示してくれるので,非常にわかりやすい.
- Transformers for Natural Language Processing (2nd Edition): Build, train, and fine-tune deep neural network architectures for NLP with Python, PyTorch, TensorFlow, BERT, and GPT-3 Packet publishing, Denis Rothman, March, 2022.
- 上記のGetting Started~より,詳細説明は少ないが,簡潔な説明でエンジニア向けである本.そのぶん,Transformerのロス関数の話がないなど,直感的な短い解説中心なので,説明不足部分はある.
- 上記の本より2年新しいので,応用の話が多くなり充実している.
- 最後にViTやCLIP・Dall-Eについても触れてくれている.
- 深層学習 改訂第2版 (機械学習プロフェッショナルシリーズ) 岡谷貴之,講談社,2022.
- 7.3 トランスフォーマー (p153)
- IT Text 自然言語処理の基礎 岡﨑直観, 荒瀬由紀, 鈴木潤, 鶴岡慶雅, 宮尾祐介 .オーム社,2022.
- 6章 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.
参照外部リンク
- The Illustrated Transformer | Jay Alammar
- Github: Nematus: a Toolkit for Neural Machine Translation
- A Neural Network for Machine Translation, at Production Scale |Google AI blog
- Introduction to Transformer – Lucas Bayer
- https://github.com/hyunwoongko/transformer