#機械学習
-
RAG を見て attention を思い出した — 同じ骨格が、硬さを変えて二段に積まれている
RAG はベクトル DB に内積のクエリをかけて一致度の高い情報を拾う技術だと聞いて、attention の仕組みを 思い出した——という思いつきをぶつけた対話。 返ってきたのは「なんとなく似ている、というレベルではなく、両者の骨格が本当に同じところを突いている」 だった。共通の骨格には名前がある。**content-based addressing(内容によるアドレス指定)**。 普通のメモリが「番地」でアクセスするのに対し、「中身の近さ」でアクセスする、という同じパラダイム。 RAG のクエリ埋め込みが attention の Query、文書の埋め込みが Key、文書の本文が Value にあたる。 ただし決定的な違いがあった。**attention は soft retrieval**(softmax で全 Key に重みを配り、 Value の加重和をとる。連続的で微分可能だから、端から端まで勾配が流れて学習できる)。 **RAG は hard retrieval**(top-k を離散的に選ぶ。選ぶ/選ばないの二値で、その選択は微分不可能。 だから RAG のエンドツーエンド学習は難しい)。 そして一番きれいな見方は、**この二つは競合ではなく積み重なっている**というものだった。 RAG が「硬い事前フィルタ」で数百万文書から数個に絞り、そこで拾った文書をコンテキストに載せると、 今度は LLM 内部の attention が「柔らかい統合」でそのトークン群を加重参照する。 **hard retrieval → soft retrieval の二段構え**。粒度の違う同じ操作が、階層的にスタックされている。 最後に系譜の話が出てきて、この直感が歴史的にも正しい筋だと分かった。もともと Neural Turing Machine や Memory Networks が「attention =微分可能な外部メモリのアドレッシング」として定式化していて、 **attention は最初から retrieval として生まれていた**。RAG はそこで一度手放した明示的な外部メモリへの 回帰だった。つまり「RAG を見て attention を思い出す」のは、**開発史を逆再生している**ことになる。
-
AI の「調教」の歴史は、適応をどこに格納するかの移動だった — θ か、x か
AI を自分好みの出力に近づける操作——ここでは「調教」と呼ぶ——の手法が、時代とともに変わってきた。 昔はファインチューニング一択だった。一時期はベクトル DB や RAG の話が出ていた。最近はベクトル DB すら 使わず、memory のような仕組みが登場している。**この変遷の歴史を整理してほしい**、という対話。 返ってきた定式化が、この対話の核心だった。**モデル f_θ(x) に対して、できることは 「θ(重み)をいじるか、x(入力=文脈)をいじるか」の二択しかない**。だから歴史の変遷は、 **適応をどこに格納するかの重心が、θ 側から x 側へ移動してきた過程**として読める。 ファインチューニング期(θ を直接書き換える。永続的だがコストが高く、忘却のリスクもある)。 LoRA などの PEFT(「適応に必要な重み更新は低ランク部分空間に収まる」という経験則)。 そこからプロンプト/few-shot(θ を一切触らず、forward pass の中で一時的に適応させる)。 RAG/ベクトル DB(**知識を θ から剥がして外部ストアに置く**)。 そして memory 期——**なぜベクトル DB すら消えたのか**。 答えは規模だった。個人のパーソナライズで扱う「記憶」は、文書数百万件のコーパスではなく、 せいぜい数百件のファクト。**この規模では近似最近傍探索のうまみがない**。コンテキストが広いので、 関連する記憶を丸ごと文脈に入れてしまえる。memory の新しさは技術というより、 **抽出→格納→再注入のループを自動化した**点にあった。 そして最後に、きれいな比喩に着地する。**θ = ディスク(永続・グローバル・書き換え高コスト)、 コンテキストウィンドウ = RAM(揮発・ローカル・即時)、RAG/memory = その間のキャッシュ層**。 歴史の変遷は、**能力が上がるにつれて「ディスクに焼く」必要が減り、上位の速い層で調教が完結する ようになっていった流れ**として読める。
-
曲面は元の空間に既にある — 多様体仮説と、非線形変換が果たす役割
生成 AI の文脈で言われる多様体仮説について、精密に理解したかった。データが「高次元空間の中の特定の 平面上にある」という単純な話ではないはずだ。では、**高次元空間を適切に変換して初めて得られる、 別の基底での多様体**を指しているのか——という問いから始めた。 返ってきた最初の修正は、「別基底」という言い方への指摘だった。**射影や基底変換という語は、通常 線形写像を指す**。しかし線形写像は、回転・スケール・せん断はできても、**曲がったものを平らに 伸ばすことはできない**。もし線形変換だけで多様体を平らにできるなら、その時点でデータは線形部分空間上に あったことになり、最初に棄却した「平面」のケースに戻ってしまう。**多様体仮説の本質は、線形変換では 平らにできない曲率を持つという点にあり、必要な座標変換は非線形**だ。 そこで問いを立て直した。**曲面は元の高次元空間の中に既に存在しているのか、それとも非線形変換・ 次元削減して初めて曲面が見えるようになるのか。どちらなのか。** 答えは前者だった。多様体は元の空間の中に、曲面として**既に存在している**。地球の表面が3次元空間に 物理的に存在しているのと同じで、メルカトル図法は球面を読めるようにする操作であって、**投影が球面を 作り出すわけではない**。 ただし「初めて見えるようになる」という言い方も、別の水準では正しかった。切り分けるとこうなる—— **存在論としては元の空間に在る。可読性としては、変換して初めて低次元性を扱えるようになる。** そして局所的には、曲面は接平面(小さなパッチ)に見えるので、**近傍内ではすでに低次元性が露出している**。 非線形写像が要るのは、そのパッチをどう貼り合わせるかという**大域的な展開**のほうだった。
-
相手が賢くなると、環境が変わってしまう — 強化学習を対戦ゲームに持ち込むとき
強化学習の基礎(TD法、モンテカルロ法、DQN)を学んだ直後に、対戦ゲームを作ってみようとして ぶつかった問いの記録。 教科書で学んだ世界観は「エージェントと環境の2者」だった。エージェントが行動すると、環境が報酬と 次の状態を返す。FrozenLake も CartPole も、登場人物は自分だけ。ところが五目並べのような対戦ゲームでは 相手がいる。相手の動きを環境の一部とみなせばよいのか? しかしそれだと、環境の振る舞いが 「相手の賢さ」に依存してしまう。相手が学習して強くなれば、環境そのものが変わってしまう—— これは全然別のパラダイムが要るのではないか、と考えた。 答えは「その直感は正しい」だった。相手込みで環境とみなすのが最もシンプルで、エージェントから見た インターフェースは FrozenLake と全く同じになる。ただし相手が成長すると、同じ状態・行動に対する 報酬の分布が時間とともに変わる。これは非定常環境問題と呼ばれる、名前のついた問題だった。 対処は難易度順に、相手を固定する/カリキュラム学習(段階的に相手を強化)/Self-play(AlphaGo 方式)。 そして実際に実装して動かしたら、学習が収束しなかった。勝率は 5000 エピソード回しても 37% 前後で 頭打ち。「そんなものでしょうか?」と聞いたら、「そんなものではなく、設計上の問題が複数重なっている」 という診断が返ってきた。ε の減衰が速すぎる、報酬が sparse すぎる、ネットワークが浅い、 バッファが小さい。修正したら 500 エピソードで勝率 80% を超えた。 理論を学ぶ → 実装する → 失敗する → 診断する → 直す、という一周が丸ごと入っている。