タイトル:水分子と流体力学、あるいはアセンブラとLLMの境界線
最近、あらためて「AIはなぜ動くのか」を勉強し直していた。
いや、正確に言うと、今までも「理解したつもり」ではいた。 シグモイド関数、ベクトル、内積、誤差逆伝播。単語自体は知っているし、数式も追える。 エンジニアとして長くやっていると、「まあ、巨大な統計モデルなんだろう」という理解で一旦納得してしまう。
でも、最近ふと思った。
「いや、待て。本当に理解してるのか?」
そう思って、トランスフォーマー周りをもう一度ちゃんと追い始めた。
……結果から言うと、途中からまたよくわからなくなった。
特にTransformer以降。 ここから急激に、自分の「エンジニアの肌感覚」と乖離してくる。
大学の実験で回路を組んでいた頃の感覚
昔、大学の実験で回路を組んだり、マイコンを叩いていた頃。
レジスタに値を入れる。 フラグが立つ。 ジャンプする。 割り込みが走る。
全部に因果関係があった。
もちろん複雑ではあるのだけど、「なぜ動いたか」は追える。 どこかで必ず「これが原因」という地点に辿り着ける。
もちろん、仕事で使うプログラミング言語はアセンブラレベルの世界とはまるで異なるが、それでも同じ技術の延長線という感覚は続いている。
だからニューラルネットの数式自体も、実はそこまで抵抗はない。
内積? まあわかる。
活性化関数? なるほど。
誤差逆伝播? 気持ち悪いが理屈はわかる。
ここまではOK、機械学習、ディーイプラーニングまではなんとかついていける。
しかし、その積み上げがなぜChatGPTみたいな「知性っぽいもの」になるのか。
ここで急に脳が拒否反応を起こす。
水分子を見ても「波」は見えない
考えていて、ふと流体力学の話を思い出した。
水分子(H₂O)を一粒ずつ追いかけても、そこに「波」や「渦」は存在しない。
あるのは、小さい粒が物理法則に従って動いているだけの世界だ。
でも、それが天文学的な数になると、突然「流れ」が生まれる。
粘性。 乱流。 波。 渦。
個々の粒の説明だけでは直感できない、マクロな法則が突然現れる。
これが「創発(Emergence)」というやつだ。
で、今のLLMを見ていると、かなりこれに近い感覚がある。
トランスフォーマー辺りから急に「流体」になる
従来のプログラムは、かなり「機械」だった。
入力が来て、分岐して、処理する。
ところがトランスフォーマー以降のLLMは、急に「流体」っぽくなる。
特にAttention。
最初に概念を見た時、
「なんで全部の単語を全部の単語と比較するんだ?」
と思った。
プログラマ脳だと、どうしても「順番に処理する」感覚が強い。
でもTransformerは違う。
文中の単語同士を、巨大な空間の中で一斉に関連付ける。
「壊れた」という単語が、「ペン」に掛かっているのか、「システム」に掛かっているのか。
それを全方位で同時に計算していく。
なんというか、
「ロジックを積み上げてる感覚」が急に消える。
ここで完全に肌感覚が変わる。
「設計された複雑さ」と「統計的な複雑さ」
昔のシステムは、「設計された複雑さ」だった。
if文。 関数。 状態遷移。 設計書。
全部、人間が意味を理解した上で積み上げていく。
一方、LLMはかなり異質だ。
人間が「ルール」を書いたわけではない。
ただひたすら、
「次に来るトークン(単語の断片)の確率」
を極限まで学習しただけ。
にもかかわらず、結果として「意味」や「論理」が浮かび上がってしまっている。
これがどうにも不気味で、そして面白い。
もしかすると「知性」は現象なのかもしれない
水分子が大量に集まると、波が生まれる。
単純な計算が大量に集まると、思考っぽいものが生まれる。
そう考えると、「知性」というもの自体が、実は何か特別な設計物ではなく、
複雑さが閾値を超えた時に現れる現象
なのかもしれない。
流体力学みたいに。
だから、理解しているようで理解できない。
分子を知っていても「海」は直感できないように、 内積を知っていても「知性」は直感できない。
終わりに
昔は、1つのレジスタを追いかけていた。 今は、計算の海に立つ「波」を眺めている。
階層は、確かに変わった。
でも一つだけ、ずっと答えが出ない問いが残る。
水分子の集まりが「海」になるように、 計算の集まりが「知性」になるのなら ——
僕がいま「理解した」と思っているこの感覚も、 ただの波の一つなんじゃないか?