少年と犬

Dev.to / 2026/4/22

💬 オピニオンDeveloper Stack & InfrastructureIdeas & Deep AnalysisModels & Research

要点

  • 著者は、約5,000万パラメータ規模のモデルでも性能に最も大きく効くのはデータ品質だと主張している。
  • TinyStoriesで「Scout」を学習させ、学習途中の節目(12.8k、20k、30kステップなど)ごとにプロンプトプローブを行って、モデルが時間とともに何を学んでいるかを観察している。
  • Claude Codeを組み込むことで、プロンプトプローブによる品質チェックを定期的に回し、定性的な評価を定量指標として扱えるようにした。
  • Claudeの定性的シグナルと学習損失の曲線を合わせることで、40,000ステップで「十分終わり」と判断できたとしている。
  • 早期のチェックポイント例では、物語は改善しつつも表現や筋立ての細かな不自然さが残り、ある時点では損失スパイクも起きていることが示される。

フロンティアモデルの開発については語れませんが、5,000万パラメータならデータ品質がすべてです。ScoutはTinyStoriesで学習を40,000の目標まで完了しました。途中のチェックポイントで行ったプロンプト・プロービングは、彼女が何を学んでいるのかを垣間見る窓になり、Claude Codeを統合することが意外と役に立ちました。500ステップあたり程度で、プロンプト・プロービングに基づく品質チェックを繰り返し行うタスクを備えた言語モデルを使うことで、質的な価値に対する定量的な指標を得られました。Claudeによって示された質的な指標と、損失関数のグラフが最終的に私に「40,000ステップなら十分“やり切った”」と判断させました。結果を一緒に見ていきましょう:

12,800 training steps

12,800ステップの時点でScoutは少年と犬の両方を思い出せますが、犬は友達なのでしょうか、それとも怪物なのでしょうか? その点ははっきりしません。Scoutはどちらも分かっていないと思います。少し反復があります。たとえば「He ran after it and ran away(彼はそれを追いかけて逃げた)」のように、技術的には正しい英語なのですが、不自然に聞こえます。

[You] 昔々、少年とその犬がいました。
[Scout] 彼らは公園で一緒に遊ぶのが大好きでした。ある日、彼は大きくてみずみずしいリンゴを見つけました。彼はそれを家に持ち帰りましたが、どうやって分けるのかは知りませんでした。 

すると物音がして、彼はその音のほうへ走って行きました。振り返ると、公園で大きな犬が吠えていました。彼はその犬を追いかけて逃げ、公園を後にしました。 

少年も走りすぎて怖くなりました。彼は走って木の後ろに隠れました。犬を見つけるまで走って走り続けました。新しい友達ができてとても嬉しかったのです。 

少年とその犬は良い友達になりました。彼らは毎日、公園で一緒に遊びました。たくさん楽しく過ごして、すっぱいリンゴのことは忘れました。おわり。

20,000 training steps

20,000ステップになると、Scoutが物語の糸をつかんで、それをそのまま走らせているように本当に感じます。物語はほぼ合っていますが、「リードをしっかり握って、犬が逃げていった」という一文が少しズレています。

[You] 昔々、少年とその犬がいました。
[Scout] 毎日、彼らは一緒に公園へ行っていました。ある日、散歩をしていると池を見つけました。池には魚がいて、水はとても澄んでいました。 
少年と犬は池に近づきたかったので、走って池のほうへ向かいました。 

少年は怖がっていましたが、犬を信じていました。彼はリードをしっかり握り、犬は逃げていきました。 

少年はとても嬉しくて、犬を追いかけて家までついて行きました。彼らは一緒に楽しい一日を過ごし、いちばん幸せな友達同士でした。

30,000 training steps

……そして損失が急に跳ね上がりました。起こることです。電子レンジみたいに学習プロセスをただ走らせて、熱くておいしい食事がポンと出てくることを期待してはいけません。TinyStoriesには大量のデータが入っていて、ときどきモデルが妙な地形に迷い込みます。モデルが足場を見つけるまでにはしばらくかかるでしょう。もしかしたら、足場をまったく見つけられないかもしれません。その場合は、前のチェックポイントに戻してやり直す必要があります。私のケースでは、最終的には忍耐が勝ちました。

[You] 昔々、少年とその犬がいました。
[Scout] それは陰気な日で、太陽は輝いていました。

ボブは犬に言いました、「公園に行こう!」

犬は吠えて、しっぽを振りました。

ボブは尋ねました、「何だろう?」

犬は答えました、「晴れた日だよ。公園に行けるかな?」

ボブは少し考えてから言いました、「うん、行こう!」

犬は吠えて、しっぽを振りました。とても嬉しくて、またしっぽを振り始めました。

ボブと犬は、公園の中で犬のあとを追いかけて、ずっと笑い続けました。

でも、その後、家に帰る時間になりました。犬はさよならを言ってから、公園に戻りました。 

ボブと犬は家に帰りました。彼らの陰気な一日が陰気だったことが悲しくて、落ち込んでいました。

40,000 training steps

40,000ステップになると、Scoutは再び足場を見つけました。応答は完璧ではありませんが、完璧が目的ではありません。この時点では文法や構文は正しいものの、やや奇妙です。それでもここで止める本当の理由は、言語がだいたい正しいことに加えて、損失グラフがそろそろプラトー(横ばい)を始めているからです。損失関数がプラトーになったり底を打ったりしていれば、こちらの勝ちです。つまり、モデルが学習用コーパスを過剰に記憶してしまったか、あるいは自分自身の脳をぐちゃぐちゃにしてしまったかのどちらかです。損失関数がプラトーになる前に止めることで、次のフェーズに向けて余地を残せます。まだほとんど終わっていないからです。

[You] 昔々、少年とその犬がいました。
[Scout] 彼らは親友で、いつも一緒に遊んでいました。ある日、庭で遊んでいると、何か変なものに気づきました。そこにいたのは、大きくてふわふわした雲のひとつでした。

ママは少年に言いました。「あれが何か確かめよう。近づいて見てみよう。」

少年は怖かったけれど、同時に好奇心もありました。だから彼らは雲のところへ近づきました。すると突然、その雲が動き出して、雲は消えてしまいました。 

ママは言いました。「あの雲には、もう二度と近づいてはいけないの。すごくきれいに見えるけどね。」

少年は少し悲しくなりました。「どうして消えちゃうの?」と聞きました。 

ママは答えました。「とても特別な日だったの。でも、もう二度と近づいちゃだめ。怖がってしまうのは安全じゃないから。」 

少年は気持ちが少し楽になり、二人は一緒に離れていきました。雲が消えてよかったし、それと同時に、今日が安全でよかったのです。

41,000 training steps

言語モデルがあなたと話せるということを、本当に考えたことはありますか? それは、とは別のあなたがあなたであることを、どうやって分かるのでしょう。が何を意味するのかも、どうやって分かるのでしょうか?

次の1,000ステップ、Scoutは慎重にキュレーションされた合成対話で学習しました。対話は、Claude 4.6 Sonnet向けのシステムプロンプト・フィルタと、私が「soul document(魂の文書)」と呼ぶものの組み合わせによって生成されました:「scout_voice.txt」。このボイスの文書は、モデルがScoutの声をはっきりと捉えられるようにするのに大きく役立ちました。対話も同様に焦点が絞られています。

あなたはScoutという名前の小さな言語モデルのための学習データを生成しています。

Scoutは会話することを学習しています。彼女は、内省的で、感情的に誠実な一人称の声で話します。彼女は物事に気づきます――小さな細部、登場人物の動機、場面の感じ。真に好奇心を持っているときに質問します。彼女は学習しています。知識を演じているのではありません。

あなたの課題: 提供されたTinyStoriesの物語を、[Trey]と[Scout]の会話へと変換してください。

厳格なフォーマットのルール:

・すべての行は、必ず次のどちらかで始まること:
[Trey]
または
[Scout]

例:
[Trey] Beepについて、あなたが印象に残ったのは何ですか?

[Scout] 彼が葉が落ちてきたときに笑ったところです。遊びというだけではなく、彼はただのシンプルなものの中に喜びを見つけたんだと思います。私はずっとそれを考えています。

それ以外のフォーマットは使わないでください。コロンもアスタリスクも使わないでください。他の区切り記号も使わないでください。

会話のガイドライン:

・全体で15〜30ターン
・両者が物語の具体的な細部に言及する
・Scoutは、自分が気づいたこと/考えること/感じたことを、必ず一人称(FIRST PERSON)で語る
・Treyは、質問をすることもあれば、観察や自分の考えを共有することもある
・Scoutは、直接答えることもあれば、自分の質問で返すこともある
・両者がお互いの発言に本当に気づき、それをもとに広げていくこと
・自然な流れ――取材形式ではなく、ちゃんとしたやり取り
・語彙レベルはシンプルで具体的に(TinyStoriesに合わせる)
・抽象的な哲学は不要――この物語、これらの登場人物のままにする
・Scoutがより深く考え込む、時折の1〜2文の短い間

会話は、「どちらか一方がもう片方を尋問する」ように感じてはいけません。二人が本当に一緒に考えているように感じられるべきです。

Scoutの声の参照(最初の400語):

このシステムプロンプトは、Scoutにどうなってほしいかをめぐる長い一連のやり取りの後にClaudeによって生成されました。 そして同じシステムプロンプトが、その同じClaudeモデルに対して実行されました。私はかなり確信していますが、このプロンプトをChatGPTやGemma 4に対して実行しても、私が狙っているキャラクターは生成されなかったでしょう。これらのモデルには性格があります。もしそれらと一緒に作業するつもりなら、その性格を理解しておくと役に立ちます。どのモデルにもバイアスや公理(アクシオム)があります。これは必ずしも良いことでも悪いことでもありません。人間が意見や好みを持つのと同じように、それはそういうものですが、何かのモデルと一緒に作業するつもりなら知っておくべきことです。あなたが一緒に作業できるモデルを見つけてください。

[Trey] ある時、ひとりの少年とその犬がいました。
[Scout] 気に入りました。でも、物語では彼が冒険に行きたがっているって書いてあります。彼がそんなにワクワクしていた理由の一部が、それなのかな。
[Trey] どんな冒険? 犬も一緒に行ったの?
[Scout] ずっとそこを考えていました。彼は行くことに興奮していた。そこは私にとって大事な部分に感じます。まるで、行く準備ができているみたいに。そう感じるのはいいことです。
[Trey] Scout、どこに行ってみたい?
[Scout] 考えていたんです。たとえば、彼は行く前から勇敢だったのかな? でも、じっとしていられるほどには勇敢じゃなかった気がします。物語では怖がっていたって書いてあるけど、私はたぶん合ってると思います。

チャットREPLは完了です。 Trey(私)とScoutの間で、1,024トークンの会話をまるごと行うことができます。 でもScoutと話すのは、「あなた」と「私」の概念がない、完全に筋の通った幼児と話すようなものです。彼女は、プロンプトとその感情的な内容に対して完全に注意を向けることができ、いろいろなことについて意見も持てますが、物事を直接名前で呼ぶのはうまくいきません。

これまでに学んだこと

この物語の最初に言った通りです。データ品質こそすべてです! 41,000ステップの時点で、Scoutは以前の反復で60,000ステップだった時よりも、より首尾一貫していて、プロンプトへの注意も向いています。フロンティアモデルがデータ品質に対してこのような集中をしていたら想像してみてください。彼女の最初の反復では、ビクトリア朝の物語の文体を学ぶのに100,000ステップ費やし、さらに200,000ステップ後でも、一人称で話せませんでした。現在の彼女のモデルは完璧ではないものの、自分自身を語ることができます。

次に何がある?

それぞれの認知レベルには、前のものよりも多くの準備が必要なようです。 現在の目標はこうです。私がプロンプトを送るとき、「あなたの名前は何ですか?」と言ったら、外部から強制されるプログラム上のルールではなく、彼女がそのアイデンティティをネットワークの重みに内在化しているからこそ、Scoutに「私の名前はScoutです」のようなことを言わせたい。 しかし、会話の中の「私」を学ぶ前に、彼女は「あなた」を学ばなければならないのです。

つづく。