ゼロからAI理論を再構築する

ー 文系エンジニアがAIの内部構造をゼロから理解する記録 ー

Transformer:RNNを捨てて並列処理する

2017年にVaswaniらが発表した"Attention Is All You Need"は、タイトルの通り「Attentionだけでいい」という提案でした。RNNもLSTMも使わず、Attentionだけで系列データを処理する。このモデルがTransformerです。

前回、Attentionがあれば入力のどの位置にも直接アクセスできると書きました。Transformerはその考えを徹底して、逐次処理を完全にやめたモデルです。

Self-Attention:入力内部の関連を測る

前回のAttentionはEncoderとDecoderの間で働いていましたが、TransformerのSelf-Attentionは入力文の中の単語同士の関連を測ります。

たとえば「銀行に行って、お金を下ろして、近くのそこで昼食を食べた」で、「そこ」が何を指しているかを判定するには、文中の他の単語との関連を見る必要があります。Self-Attentionは文中のすべての単語ペアについて関連度を計算し、文脈に応じた表現ベクトルを作ります。

\[ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V \]

前回のQuery, Key, Valueの枠組みがそのまま使われています。\( \sqrt{d_k} \) で割っているのはスコアが大きくなりすぎてソフトマックスが飽和するのを防ぐためで、Scaled Dot-Product Attentionと呼ばれます。

RNNを捨てた理由は並列化

RNNは前の単語の処理が終わるまで次の単語を処理できません。系列長が長いほど学習に時間がかかる。Transformerは全単語を同時に処理できるので、GPUの並列計算能力をフルに活かせます。これが大規模データでの学習を可能にした実用上の大きな要因です。

ただし、全単語を同時に処理すると順番の情報が消えます。「犬が猫を追いかけた」と「猫が犬を追いかけた」が同じになってしまう。Transformerではこの問題をPositional Encodingで解決しています。各位置に対応するベクトルを入力に加算して、位置情報を明示的に与えます。

逐次処理をやめたのに位置情報を後から足し算で入れるのは、初めて読んだときかなり力技に感じました。ただ、結果的にはこれで十分機能しています。

Multi-Head Attention

Transformerは1つのAttentionではなく、複数のAttentionを並列に実行するMulti-Head Attentionを使います。各ヘッドが異なるQuery, Key, Valueの変換を学習するので、あるヘッドは文法構造に注目し、別のヘッドは代名詞の参照先に注目する、といった分業が起きます。

各ヘッドの出力を結合して線形変換をかけたものが最終的な出力です。1つのAttentionだと1種類の関連性しか捉えられませんが、複数走らせることで異なる種類の関係を同時に扱えます。

まとめ

Transformerの要点は2つです。Self-Attentionで文中の任意の位置間の関連を直接計算できること。そしてRNNの逐次処理をやめたことで、GPUによる大規模な学習が現実的になったこと。

BERTもGPTも、このTransformerのアーキテクチャがベースです。次回はTransformerを使った事前学習の仕組みと、BERTとGPTの設計の違いについて書きます。


参考文献