はじめに
この記事が初投稿になります.ソリングです.機械学習に関する記事を書いていきたいなと思っています.今回の記事の内容は,タイトルにもあるように「Query, Key, Value」を理解しようという内容です.
ここ1年ほど,ChatGPTなどでTransformerモデルが話題になっています.その中で使われているAttentionメカニズム(注意機構などとも訳される)は,多くの場合「モデルが入力のどこに注目すればいいかを理解するメカニズム」だと説明されます.また,「QueryとKeyから重み付けを行い,その重みでValueの加重平均を取る」という説明を見たことがある方もいるかもしれません.
この説明は正しいのですが,自分が最初に見たときはよくわからなかった記憶があります.今後Transformerモデルを学ばれる方の中にも,既存の説明ではよくわからないという方もいるかもしれません.そんな方に向けて,少しでもわかりやすい記事が書けたらいいなと思います.
直感的な理解
いきなりですが質問です.
シロップ・コーヒー・ミルクを混ぜ合わせて飲み物を作ります.これらを混ぜて(使わないものがあっても良い),あなたにとっての理想の飲み物200gを作る場合,どのくらいの比率でこれら3つを混ぜ合わせればよいでしょうか?
僕はブラックで無糖1 のコーヒーが好きなので,シロップ:コーヒー:ミルク=0:1:0の割合で混合します.コーヒーの苦味があまり得意でなくカフェオレが好きな方は,シロップ:コーヒー:ミルク=1:9:10くらいの割合で混ぜるでしょう.また,「そもそもコーヒーが飲めません」という人はシロップ:コーヒー:ミルク=0:0:1で牛乳200gを飲むかもしれません.
上の例において,「どのような飲み物が作りたいか」というのがQueryです.Keyはシロップ・コーヒー・ミルクの特性(苦み・甘み・まろやかさ,など)を指します.上のシロップ・コーヒー・ミルクを混ぜ合わせる比率がAttention Weightと呼ばれるものになります.Attention WeightはQueryおよびKeyから決定されます.また,Valueはシロップ・コーヒー・ミルクそのものを指します.
これらを表にして,query, key, value, attention weightを整理しましょう.
用語 | 意味 |
---|---|
Query | 「こういうものがほしい」といったリクエスト |
Key | それぞれの特性 |
Attention Weight | QueryとKeyから導かれる,「どのくらい混ぜればよいか」という比率 |
Value | シロップ・コーヒー・ミルクそのもの |
KeyとValueは,ともに同じもの(この例でいうと,シロップ・コーヒー・ミルク)に由来します.
この例を用いて,「QueryとKeyから重み付けを行い,その重みでValueの加重平均を取る」という意味を理解しましょう.
例えば「苦すぎないカフェオレが飲みたい」という客からのQueryがあったとします.このQueryに基づき,あなたはシロップ・コーヒー・ミルクの特性(Key)を分析し,どのくらいの比率(Attention Weight)で混ぜ合わせればこのQueryを満たしているかを考えます.その比率をもとに実際にシロップ・コーヒー・ミルク(Value)を混ぜ,客に提供します.
これがAttention Mechanismの気持ちとなります.数式を用いていないので厳密性に欠けますが,直感的には上のように理解すれば良いと思います.
-
ブラックコーヒーの定義はその色であるため,厳密にはミルクが入っていないことを指し,砂糖が入っているかどうかはブラックコーヒーであるかどうかとは関係ないとされています.(微糖ブラックや加糖ブラックという表現が許容されているのはこのためです) ↩