
本記事ではAIの基礎であるTransformerについて、筆者が学んだことを自分なりに言葉にしていきます。
今回はこれまでの記事を全てまとめた内容となっておりますので、まだ見ていない方は下記の記事を先にご覧ください。
【Transformer】AIで重要な深層学習モデルの基本まとめ1【MHA編】
【Transformer】AIで重要な深層学習モデルの基本まとめ2【Add&Norm編】
【Transformer】AIで重要な深層学習モデルの基本まとめ3【FNN編】
【Transformer】AIで重要な深層学習モデルの基本まとめ4【エンコード部編】
今回解説する部分
今回解説する部分は、上記の赤枠内です。
個々の詳細については以前までの記事でご紹介していますので、今回は全体の流れをまとめたものとなっています。
本記事にてMulti Head AttentionをMHA、Feed-Forward NetworkをFFNと略しています。
単純化して理解
Transforomerの各処理について個々に解説してきましたが、処理の流れを理解しておかなければ何をやっているか分かりにくいでしょう。
そこで処理の流れを分かりやすくするため、処理を単純化して解説していきます。

まずはAttention Is All You Needに掲載されている処理の流れを、筆者の手で作り直したものが上図です。
ここから単純化していきます。
正規化を除外してみる
まずTransformerを処理する上で、最も実行回数が多いのは【Add&Norm】の正規化です。
【Transformer】AIで重要な深層学習モデルの基本まとめ2【Add&Norm編】
この処理では直前の処理で出力されたデータを扱いやすくする処理となっています。
言い換えてみれば処理しやすいようにデータを整形しているだけで、処理の流れを理解する上では大して重要ではありません。
そこでこの【Add&Norm】を除外して考えてみましょう。

上図のようにかなりサッパリしたように思えます。
MHAとFNN
次にMHAとFNNですが、こちらはどちらも文章を理解する読解部分です。
そこで詳細な処理や厳密な正しさは一旦横に置いておいて、まとめてしまうと下図のようになります。

読解部分の入力部分などに違いはありますが、今は一旦このように理解しておいてください。
読解部分の流れ
さて上記でTransfomerの流れをかなり簡略できました。
ここからは読解部分ではどのようになっているのか理解していきましょう。
読解部分をザックリ解説
まずは読解部分ではどのような処置が行われているのか、ザックリ理解していきましょう。
この読解部分に含まれているのは、MHAとFFNの2つと正確に言えばそれぞれにデータ整形用の正規化だけ。
MHAは各種トークン毎の関係、つまりトークン間の理解を横に深めていくイメージの処理です。
対してFFNは各トークンの理解をより深めていく、言うなれば1つの単語をより深く縦に理解していくイメージの処理です。
そのためこの読解部分で各種トークン、もっと言えば文章全体を理解したと思ってください。
QKV
読解部分を理解する上で重要な値として、QKVがあります。
このQKVの概要は下図の通り。

これを更に具体的にしていきます。
例文を【私はトムです。】とした場合のQトム、Kトム、Vトムを見ていきます。
Qトム:何かの動詞や役割を確定させる情報を探している
Kトム:主語や一人称、文頭に出やすいといった特徴を持っている
Vトム:主語、自身を指す、動詞と強く結びつく
上記の情報が明示されているわけではなく、そういう要素を持つ高次元ベクトルとして保存されている。
このQKVの関係を理解しておいてください。
デコーダーの読解部分
これまでの知識を前提として、次は最も重要なデコーダーの読解部分についてみます。

上図の赤枠内に注目して詳しく見ると、下図のようになります。

KとVはエンコーダーで入力された文章を読解したものを、Qはデコーダーで入力された文章をM-MHAで読解したものを使用しています。
このM-MHAは未来部分のみマスクを付けたものです。
つまりここで、M-MHAで作られたQで何を探しているのかを、エンコーダーで入力されたKとVを元に予想していく。
そしてその予想して出力した結果を更に入力し、再び予想していくことを繰り返す。
最初から用意された答えを提示するのではなく、学習結果の重みを使って答えを予測し出力する故に人工知能、AIとなります。
処理のイメージ
例えばサンプル文章としてInputに【私はトムです】と入力したとしましょう。
その時デコーダー側の処理として下記のようなイメージです。
・1ループ目
まだ出力結果が無いためデコーダー側のInputは、【<BOS>】のみ。
この時、プログラムは最初に最も出やすい単語を検索、最も確率の高い名詞(ここでは例としてケイト)を出力
・2ループ目
デコーダー側のInputは、【<BOS>ケイト】。
この時の処理は、名詞の後に続きやすい単語の確率が高いのは助詞。そのため【は】を出力
・3ループ目
デコーダー側のInputは【<BOS>ケイトは】。
この時の処理は、助詞の後に続く確率の高い単語は目的語。そこで名詞(ここでは例として男)を出力
・4ループ目
デコーダー側のInputは【<BOS>ケイトは男】。
この時の処理は、目的語が来た後の確率として文章終わらせる単語が最も高い。そこで文末に最も多い【です】を出力
・5ループ目
デコーダー側のInputは【<BOS>ケイトは男です】。
この時の処理は、文章が完結していると推測。そこで文末に入れる【<EOS>】を出力
・6ループ目
デコーダー側のInputは【<BOS>ケイトは男です<EOS>】。
【<EOS>】を検知したため、ループ終了
本記事の内容は以上となります。
ここまでかなりの長編シリーズとなりましたTransformerですが、本記事で一旦終了となります。
現在のAI技術はさらに進化したものとなっていますが、基礎となったTransfomerを理解しておくのも重要だと思いますので、ぜひ参考にしてください。
本記事は以上です。お疲れさまでした。
