3秒でわかる
系列データを扱う 2 つのモデル構造。RNN は前から順に読み、Transformer は全体を一度に見るという違いが性能差を生んでいます。
30秒図解
もう少し詳しく
どういうものか
RNN と Transformer は、どちらも文章や時系列のように順序のあるデータを扱うニューラルネットワークの構造です。
RNN は 1 単語ずつ順番に読み、直前までの内容を隠れ状態という 1 つのベクトルに畳み込みながら進みます。人が文章を左から読んでいく形に近い方式です。
Transformer は文全体を一度に受け取り、各単語が他のどの単語をどれだけ参照すべきかを自己注意という仕組みで計算します。順番に読むのではなく、全単語の間の関係を同時に見ます。現在の大規模言語モデルはほぼこの構造です。
なぜ必要か
RNN には 2 つの弱点がありました。ひとつは長い文で前半の情報が薄れることです。すべてを 1 本のベクトルに押し込むため、100 単語前の主語が末尾まで残りません。もうひとつは並列化できないことです。1 単語目を処理しないと 2 単語目に進めないため、GPU の性能を活かせません。
Transformer は全単語を同時に処理できるので学習が並列化でき、離れた単語どうしも直接参照できます。この 2 点が、モデルを大きくして大量のテキストで学習するやり方を可能にしました。
具体例
自己注意が効く例として、指示語の解決があります。
文: 商店街の福引の景品が届いたが、それは箱が潰れていた。
「それ」が指すのは「景品」。
Transformer は「それ」から全単語への<a href="/glossary/association" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">関連</a>度を計算し、
「景品」に高い重みを置いて意味を決める。構造の違いを図にすると次のようになります。
RNN [商店街]→[の]→[福引]→[の]→[景品] 状態を1本で持ち回る
Transformer [商店街][の][福引][の][景品]
\___全単語どうしを総当たりで参照___/