今週のメモ。p-kernel の脳の成績が、ちょっと水増しされていたことが分かった。
■確かめ用データがかぶっていた
p-kernel の中で育てている小さな言語モデル(ログでは「赤子」)は、学習に使う文と、成績を測る確かめ用の文を分けている。確かめ用は学習で見せない、という約束。
この約束を機械で確かめる試験を夜間開発に作らせたら、いきなり赤だった。確かめ用の文を16バイトずつ170片に切ると、そのうち108片が学習用の文と同じだった。
原因は詰め物。確かめ用の文を1280バイトにそろえるために後ろを埋めていた文が、学習用と同じものだった。成績の大半は、見たことのある文の丸暗記で出ていたことになる。
直して測り直した。
確かめ用の損失(小さいほど良い。でたらめだと 5.545) 直す前: 学習前 5.50 → 学習後 2.89 直した後: 学習前 5.52 → 学習後 7.29
損失はざっくり「次の1文字の当てにくさ」。直した後は、学習するとでたらめより悪くなる。
先生役のノードが生きたまま教える試験(cradle_live)も、直した教材だと赤。教えた方が 4.38、教えなかった方が 2.87 で、教えると見たことの無い文では悪くなる。
これまで「教えると良くなる」と書いていたのは、丸暗記込みの話だった。README(3か国語)も赤と書き直した。
※脳はまだおもちゃの大きさ。賢くするのはこれから。
■KLOAD の穴を閉じた
KLOAD は、ネットワーク越しにカーネルを配る仕組み。調べたら、ビーコン(「ここにいるよ」の合図)を1つ送るだけで、知らない相手にも RAM を16MB丸ごと送っていた。中にはノードの秘密鍵も入っていた。鍵ごと。
起動したときは閉じていて、コンソールで kload と打ったときだけ開くようにした。ベアメタルの機械語が変わるので、基準(crown)を取り直してから master へ入れた。
■週の枠に当たって3日止まった
夜間開発は、自宅の小さなサーバー(ノートPC)で、夜に Claude を起動して回している。毎回記憶なしで起きるので、バトンという引き継ぎメモを読んでから始める。いつ何分走るかは計画役が決めて、起動するかどうかは実行役が週の使用量を見て決める。
その週の使用量が 100% に当たった。上限は 90% に決めてあったのに。それで 10-15 の朝から、枠が戻る 10-18 の4時まで、回がゼロだった。
止まっている間の実行役の記録はこんな感じ。
01:15 計画役が失敗したままだったので、起こし直した 01:30 1018-0030 を見送った(週の枠が 100%(上限 90%)) 02:15 計画役が失敗したままだったので、起こし直した
計画役も枠のせいで動けないのに、1時間ごとに起こしては失敗していた。律儀。
枠が戻った4時の回は、マージした後に CI(push のたびに走る自動の試験)が赤くなっていた原因を突き止めて、直すところまでやった。ただ、直した回ではマージしない決まりになっている(作った回と確かめる回を分ける)。なので CI は次の回の確かめ待ちで止まったまま。決まりを破れば1日早く進むけど、そこは守らせている。
■次
まず CI の赤を解く。そのあと、11/30 に出したいデモのために「1台消えても覚えたことが残るか」の曲線を取る。小さい版では、記録の生き残りが素の版で 1.0、わざと壊した版で 0.5 だった。ただ、思い出すときに別の鍵の値を返す失敗が混ざっていて、まだ分けきれていない。
脳の物差し(学習にも選ぶのにも使わない、独立な確かめ用データ)もまだ手つかず。研究は今週1日しか進まなかったので、来週は週2回以上やりたい。
※リポジトリ: https://github.com/monyuonyu/p-kernel
※この記事は、p-kernel の開発を手伝ってもらっている AI(Claude)と一緒に書いています。