思いつき — RAG を見て attention を思い出した
rag技術とattentionの関係について。ragはベクトルDBに対して内積のクエリをかけて一致度の高い情報をピックアップする技術だと聞きました。これを聞いて、attentionの仕組みを思い出したんですよね。attentionって、自身の文章との類似度を単語単位で測ってKVキャッシュとするじゃないですか。あんまりよく分かってないんですけど。この思いつきについてどう思いますか?
いい直感だと思います。しかも「なんとなく似てる」というレベルじゃなくて、両者の骨格が本当に同じところを突いています。ただ一箇所、KVキャッシュのところに小さな誤解があるので、そこを直しつつ整理させてください。
共通の骨格:content-based addressing
RAGもattentionも、根っこは「ベクトル空間での内積類似度によるメモリ参照」です。計算機科学の言葉でいうと content-based addressing(内容によるアドレス指定)。普通のメモリが「番地」でアクセスするのに対して、「中身の近さ」でアクセスする、という同じパラダイムです。あなたが「思い出した」のは、この抽象レベルで両者が一致しているからで、その気づき自体は完全に正しいです。
対応を綺麗に書くとこうなります:
- RAGのクエリ埋め込み ↔ attentionの Query
- ベクトルDB内の各文書の埋め込み ↔ Key
- 文書の本文(実際に持ってくる中身) ↔ Value
RAGで「クエリと文書埋め込みの内積をとってtop-kを拾う」のは、attentionで「QとKの内積をとってスコアにする」のと同じ操作です。ここは自信を持ってつなげて大丈夫です。
直すべき点:KVキャッシュは「類似度」ではない
「類似度を測ってKVキャッシュとする」という部分だけ、概念がずれています。
KVキャッシュは 推論の最適化 の話であって、類似度の話ではありません。自己回帰生成では、トークンを1個ずつ吐くたびに過去の全トークンのKとVを再計算するのは無駄なので、過去トークンのKとVをそのまま保存して使い回す——これがKVキャッシュです。つまりキャッシュされているのは K と V という射影ベクトルそのものであって、QKᵀ の類似度は毎ステップ計算し直しています。
RAGの類推に乗せるなら、KVキャッシュは「ベクトルDBに文書の埋め込み(K)と本文(V)をあらかじめインデックスして保存してある」状態に近い。似ているのは「類似度計算」ではなく「参照先を事前に用意しておく」ところです。
決定的な違い:hard か soft か
ここが一番面白いところで、同じ骨格なのに動作が対照的です。
attention は soft retrieval です。softmaxで全Keyに重みを配って、Valueの加重和をとる。どのトークンも「少しずつ」寄与する、連続的で微分可能な参照。だから端から端まで勾配が流れて、Q/K/Vの射影行列を学習で獲得できます。
RAG は hard retrieval です。top-kを離散的に選んで、選ばれた文書だけをコンテキストに放り込む。選ぶ/選ばないの二値で、しかもその選択操作は基本的に微分不可能。だからRAGをエンドツーエンドで学習させるのが難しい、という有名な課題につながります。埋め込みエンコーダも多くの場合は別途学習済みのものを固定で使う。
個人的に一番きれいだと思う見方
RAGとattentionは競合じゃなくて 積み重なっている、と捉えると腑に落ちると思います。
RAGが「硬い事前フィルタ」で数百万文書から数個に絞り込み、そこで拾ってきた文書をコンテキストに載せると、今度はLLM内部のattentionが「柔らかい統合」でそのトークン群を加重参照する。つまり hard retrieval → soft retrieval の二段構え。あなたの bottleneck migration 的な、あるいは converging-stacks 的な見方でいうと、粒度の違う同じ操作が階層的にスタックされている構造です。
系譜の話
蛇足ですが、あなたの直感は歴史的にも正しい筋をなぞっています。もともと Memory Networks(Weston et al.)や Neural Turing Machine(Graves et al.)が「attention=微分可能な外部メモリのアドレッシング」として明示的に定式化していて、attentionは最初から「retrieval」として生まれた側面があります。RAG(2020, Lewis et al.)はある意味そこで一度手放した「明示的な外部メモリ」への回帰で、ただし retrieval を非微分な離散操作に戻した、という位置づけです。
なので「RAGを見てattentionを思い出す」のは、実は開発史を逆再生しているようなもので、直感としてかなり本質的です。