解説ねえ智也くん、この論文のタ…
TL;DR
LLMのプロンプト(指示文)を、中間層の活性化ベクトルの加重和で1つのベクトルに圧縮し、早期層に注入する手法を提案。軽量なMLPで重みを学習し、精度低下は2%未満。KVキャッシュとは異なり、プロンプトを再計算せずに再利用可能。
解説
ねえ智也くん、このブログのタイトル、『プロンプトを1つのベクトルに圧縮』って面白そう!でも、なんでそんなことする必要があるの?
ああ、普通のLLMはプロンプトを毎回処理するから、長い指示だと計算コストが大きいんだ。この手法は、プロンプトを一度ベクトルに圧縮して、再利用できるようにしてる。
なるほど!で、どうやって圧縮するの?
中間層の活性化ベクトルを、軽量なMLPで学習した重みで加重和するんだ。その結果を早期層に注入する。
え、それって精度落ちたりしないの?
論文だと、精度低下は2%未満って書いてある。結構優秀だよ。
すごい!じゃあ、KVキャッシュとどう違うの?
KVキャッシュはプロンプトの再計算を避けるけど、この手法はプロンプト自体をベクトルに圧縮して、毎回の推論でそのベクトルを注入するだけだから、もっと効率的なんだ。
なるほどね。でも、どんな場面で使うのがいいの?
例えば、長いシステムプロンプトを毎回使うチャットボットとか。あとは、リソースが限られた環境でも使える。
でも、欠点とかはないの?
学習に追加のデータが必要なことと、圧縮したベクトルが元のプロンプトの情報を完全には保持できないこと。あと、タスクによっては効果が薄い場合もある。
ふーん、でも2%未満の精度低下なら、実用上は結構使えそうだね!まるでプロンプトを魔法の粉に圧縮するみたい!
魔法の粉か…。でも、その粉をかけるタイミングを間違えると、逆効果になることもあるけどな。