
本記事では下記の記事でご紹介していたEmbeddingについて、より深く勉強したことを纏めていきます。
【Transformer】AIで重要な深層学習モデルの基本まとめ1【MHA編】 - TomoGのごちゃまぜ倉庫
もし上記の記事をまだご覧になっていない場合、理解を深めるため先にご覧になることをお勧めします。
概略
まずEmbeddingの簡単な説明として、トークンを事前に学習されたベクトルに置き換える処理です。
どうトークンにするのかは複雑かつ冗長になるため割愛します。気になる方は下記の記事をご覧ください。
英語的な解釈をすると、Embedは「埋め込む」や「組み込む」を意味し、特にIT系で使われる専門用語となります。
そこに動名詞のingをくっ付けてEmbeddingとなっているため、トークンにベクトルを埋め込む・組み込むという理解でいいでしょう。
推論時
まず推論時のEmbedding、つまりユーザーが利用する際のEmbeddingの挙動については、先ほど概略でご紹介したものから変わりません。
受け取った文章を単語ごとに分けてプログラムが理解できるようトークン化した後、そのトークンをIDとして必要なベクトル情報を入手しています。
そのため推論時は全く計算していないので処理に負荷はかかっていないと考えて良いでしょう。
学習時
次に学習時のEmbeddingですが少々複雑です。
そのため手順に沿って解説していきます。
①:初期値
まず初期値としてランダムな値を入れておきます。
初期値に何も入れずにエラーを出すことや特別な処理内容を書かないようにするためでもあります。
②:推測
次にトークンのベクトルを推測していくのですが、各要素にラベリングされていないことに注意してください。
例えば”リンゴ”と”イチゴ”という2つのトークンがあった時、人間の頭では通常下記左のような要素が思い浮かぶと思います。
[”果物”,"赤い","甘い","軽い","店でよく買える"]=["種類","色","味","重さ","購入場所"]
上記左の要素の集合ですが、言い換えれば上記右のようなラベルで評価しているとも言えるでしょう。
人間的には非常に分かりやすいのですが、Transformerで利用するためには1つのトークンにラベリングを行ってしまえばそれだけで膨大なデータになります。
そのため、TransformerのEmbeddingでは前後の文章からそのトークンが持つ要素を推測しています。

もっと分かりやすく言えば、例えば上記のように【私はリンゴが大好きだ】という文章を学習し、”リンゴ”のトークンのみに絞ったとしましょう。
この時色や種類などでラベリングするのではなく、文章を眺めてどの位置にその単語が出ているのかを把握します。
そのため上図のようにモデル内で”リンゴ”を、主語の後にでてきて大好きと評価されやすいものかもしれないと理解し、それに合わせたベクトルを推測します。
上図の縦軸はどこに出ているか、横軸は他の評価などとしましょう。

そして次に【君はイチゴを食べないのか】という文章を学習した時の、イチゴに注目してみます。
この”イチゴ”という単語も、主語の後に出てきており食べるという言葉と深い関係があると把握します。
それにより推測されるベクトルは上図とし、縦軸も横軸もリンゴの時と変わらないものとしましょう。
この時、”リンゴ”と”イチゴ”で推測されたベクトルは全く異なる値ですが、縦軸だけ見た場合、つまり出てきた位置だけ見た場合同じような値が出力されており、Embeddingではこれで問題ありません。
なぜなら実際のEmbeddingでは、高次元ベクトル領域であらゆる表現を内包しているからです。
③:誤差を用いて修正
次に再び同じトークンを出力し推測した時、以前のものと比べて誤差を計測し、そこから元のベクトルを修正していきます。
これは誤差逆伝播法もしくはバックプロパゲーションと呼ばれる手法で、下記の記事で詳細に解説されているのでご確認ください。
簡単に言えば最終的に出力された結果と正解データの誤差から、それまでのネットワーク(重み付の処理など)の重みを修正していきます。
ここで重要なのは、この誤差逆伝播法はEmbeddingのみに適用されているわけではなく、Transformer全体に適用されていること。
つまりTransformerの事前学習時に、FNNやMHAの重みと同じくEmbeddingのベクトルも修正され続けています。
そのため誤差逆伝播法で重要になる正解データも、Transformerと同じ正解データから行われています。
参考記事
本記事の内容は以上となります。
Transformerの入口となるEmbeddingについて深堀りし、より細かなところまで理解で着るようになったでしょう。
本記事は以上です。お疲れさまでした。