当時の開発ログを見返しながらのメモ。
6/19 の "cat sat on the sand…" の中身。何がどうやって覚えたのか。
■生徒と先生
生徒:p-kernel の中の小さな脳。誰かが作った重みを読み込むのではなく、それぞれの端末の上で白紙から育つ。誰のものでもない脳。
中身は1バイトずつ次を当てる言語モデル。語彙256(バイトの全種類)、幅128、4層。各層に4人の専門家がいて2人だけが働く MoE。
前向きの計算も学習用の逆向きの計算もライブラリなしで手書きして、数値微分と突き合わせて確認。
先生:SmolLM2-135M(公開の小さな言語モデル)。これも自前の推論エンジンで動かしている。
■教え方
先生と生徒は文章の区切り方(トークン)が違うので、確率分布をそのまま写せない。
代わりに、先生が書いた文章を、生徒が1バイトずつ次を当てる練習で覚える。一番素朴な蒸留。
効き目は、学習に使っていない部分での外れ具合で測る。6/18 の確認で 5.53 → 1.79。でたらめに当てたときが 5.55 なので、ちゃんと下がっている。
先生の文章をぐちゃぐちゃに混ぜたもので同じだけ練習させても下がらないことも確認。
■寝ている間に学ぶ
練習は DMN の時間にやる。DMN は端末が暇なときに動く処理(人がぼーっとしているときに働く脳の回路から名前を借りた)。
暇になるたびに少し練習して保存。10回寝たら 3.81 → 2.47、再起動しても忘れていなかった。
最初は1秒ごとに 22.8MB 書き込んでいて、ストレージが心配に…
10回に1回だけ練習して、良くなったときだけ保存するようにしたら、200回で200回だった書き込みが10回になった。
■スマホで「…」しか出ない
スマホに入れたら、チャットには「…」しか出ない。
新しくインストールした端末には、そもそも生徒がいなかった。保存済みの生徒を読み込む処理しかなかった。
保存できる端末なら生徒を生んで、最初に6回だけ練習させるように修正。
話しかけたら、最初の1文字が約50ms、96バイト喋り終わるまで約3.7秒で "cat sat on the sand… the dog ran the…" と返ってきた。
■種明かし
このときの教材は、コードに埋め込んだ5行ほどの短い英文。"the cat sat on the mat." や "sat on the sand." が入っていた。
つまり生徒は教科書をたどたどしく繰り返していただけ。
同じ日のうちに、先生にいろいろな書き出し("Once upon a time" など20数個)から書かせた文章に教材を入れ替えた。まだ意味の通る文にはならないけど、同じ言い回しの繰り返しは減った。
※リポジトリ: https://github.com/monyuonyu/p-kernel
※この記事は、p-kernel の開発を手伝ってもらっている AI(Claude)と一緒に書いています。