『猫』
「では、バハダナウの Attention が学習するところを具体的に見ていきましょう。「吾輩が猫である」がエンコーダーに入力されたとします。
吾輩 → h(1) 「吾輩」という情報が入っている
は → h(2) 「は」という情報が主で、すこし「吾輩」の情報も含まれている。
猫 → h(3) ……
で → h(4)
ある → h(5)
hは実数100個からなるベクトルです。エレナ先生のご指摘のとおりです。これがデコーダーに渡されます」
「そうね」
「デコーダーは、最初に開始トークン <bos> を入力として受け取ります。一方、Attention では、エンコーダーが出力した各隠れ状態を参照し、デコーダーの状態に応じた重み付きの情報を計算します」
「デコーダーの入力Xと、エンコーダの h の束を参照したものとを『混ぜた』ものです」
「さっきのデコーダーの図のことだな」
「そうです、そして、1回目は「★」という結果が出力されます。学習していないので、まったく意味が通じません」
「最初だからね」
「ウェイトは初期化されたばかりで、まだ学習による調整が行われていません。そのため、初めのうちは正しい単語を予測できないことがよくあります。正解「I」と「★」を突き合わされて両者の損失(Loss)が計算されます」
「損失は、『たしざん』プログラムのときの、正解と解答の差に相当するものです。ただし、単純な差分ではありません」」
「バックプロパゲーションね」
「そうです。LSTMの中のウェイト・パラメーターと、『混ぜる』ときに使ったα(1), α(2)なども修正されます。このα(1)、α(2)のことをアテンション・ウェイトと言います。ただしLSTMのなかのW行列などのパラメーターとは異なり、αは入力文やデコーダーの状態に応じて、都度変化します」
「そして、h(5)まで読みこませてやるわけね」と、ミア。
「そうです、すると h(3)を与えたところで、「猫」に対応するベクトルが出てきます。翻訳された側、s(t)の側ですが、こちらでは I am a cat. ですから s(4)のところで cat が出てきます」
「位置がひとつ後ろにずれているわね」
「そうです。なので、初めのうちは学習できないでしょう。しかし続けてこのような文章を投入していきます。
「あなたは猫である」 に対して正解「You are a cat.」
「彼は猫である」 に対して正解「He is a cat.」
「彼女は猫である」 に対して正解「She is a cat.」
「そうすると、どうなるの」ミアが言った。
「説明が少し難しいのですが、ある瞬間にデコーダーがs(4)として cat を出そうと思ったときに、アテンション・ウェイトを参照して 『猫』に相当するベクトルが選ばれるのです」
「なんか、逆のようだけど、猫ベクトルが来たら、それをcatベクトルに翻訳するんじゃないの」
「そこは、つまずくところなんです。 デコーダーが I am a まで訳した時点では、次の単語は『名詞っぽい何か』が次にはくるぞ、までは分かっているんですが、cat まではわかっていないんです。もちろん『名詞っぽい』という文字列ではなく、エンコーダーから来たベクトル束のなかで、スコアの高いものを選んでいるだけですが」
「不定冠詞 a が最後の単語なので、次はたぶん名詞だ、くらいに思っているという事です」
「『名詞っぽい』というのも、100個のベクトルのなかに情報が入っているの」
「そうです。で、エンコーダーの h の束を、アテンション・ウェイトを通じて見ると、アテンション・ウェイトは「猫」のウェイトが大きくなっている、そこで「猫」に対応する単語「cat」を選ぶ可能性が高くなる。そういう順序です」
「なんだか、わかったような、わからなかったような話ね」ミアが言う。
「すいません、うまく説明できなくて。でも、これは今日の話の本筋ではないので、そういうものだと思ってください」
「まあ、いいわ」
「アテンションが登場しましたので、機械翻訳機の役目はそろそろ終わりです。あと一つだけアテンションについて話したら、いよいよ会話ができる『生成AI』の話になります。
「あと、ひとつって、なに」
「ミン=タン・ルオン(Minh-Thang Luong)達の2015年の論文[2]です。この論文では、入力文全体に Attention を向ける方式と、注目する位置の周辺に範囲を絞る方式を比較しています。実験では、機械翻訳に限るならば、局所的な Attention が有効な場合も示されました」
「なるほどね、そうかもしれないわね」
「ところが、主旨とは別の部分で注目されて、引用回数が増えました」
「そういうこともあるのね。何が注目されたの」
「これまでアテンション・ウェイトを計算するには、このようにしてきました」
Attention(α) = softmax( σ(affine(s(t-1),h(t)) )
「そうね」
「このアフィン変換の部分を、ルオンの論文では、いろいろ変化して試行しています。そのなかで、matmul( h'(t-1),h(t))が良い成績を出しました。
Attention(α) = softmax( matmul( s(t-1),h(t)) )
「matmul とは行列とベクトルの積です。今までにも見てきました。ところが、この場合にはベクトルs(t-1)とエンコーダーの出力 ベクトルh(t) の積です。この場合には『内積』になります」
「学校の数学でやった『内積』のこと」
「そうです」
「なんとなく覚えているけれど」
「『内積』が使えるということは、幾何学的なイメージが持てるということです。これも画期的なことでした」
「幾何学的なイメージって、どういうことだ。画期的なのか」
「はい、アテンション・ウェイトが大きくなる、ということは二つのベクトルの向いている方向が似ている、ということができるからです」
このあたりになると、筆者の文章力の限界になってきています。
わかりやすい文章にしようとすると → ChatGPTの校正に引っかかる。
校正に基づき、正確に書こうとする → 文章がわかりにくく、くどくなる。
のループです。
なんとか、両者のあんばいをとりながら書いていますが、理解しやすさを優先しているので、この文章をChatGPTに入力すると、めちゃくちゃに怒られることなります。




