TT Lab
はじめる
学ぶ 学習パス コース

MiniMind — 小さな言語モデルを最初から最後まで自分で学習する

小さなモデルでは暗記と学習の境界がはっきりしている

TT Labで続きを見る

一言でいうと

評価は、「損失が低い」を超えて、何ができて、何ができないのかを分ける作業です。パープレキシティとBPBで、言語モデルとしての品質を測り、学習損失と検証損失の隙間で過学習を見て、見たことのない質問・桁数・長さで崩れる様子を、数字で残します。100万パラメーターのモデルは、その境界がとてもくっきりしているので、大きなモデルではぼんやり混ざって見える現象を、1つずつ切り離して見られます。

なぜ必要なのか

前のモジュールで、損失はよく下がり、SFTモデルは、学習のときに見た質問にはすべて正しく答えます。ところが、このモデルを「村について知っているチャットボット」と呼べるでしょうか。MiniMindのREADMEは、自分のzeroモデルの対話の例をそのまま載せています。中国語の質問にはもっともらしく答えますが、英語の質問には、意味のない言葉をつなげます。そして、事実の知識と汎化の能力は依然として限られていると書いています。評価は、その「限界」がどこから始まるかを見つける作業で、その境界を知らないと、モデルを間違った場所で使うことになります。

どう動くのか

パープレキシティとBPBでは、パープレキシティはexp(平均損失)で、「モデルが毎トークン、平均していくつの候補の間で迷っているか」くらいに読みます。ただし、トークンの大きさによって変わります。BPBは、全体の損失(ナット)をln 2で割ってビットに変え、同じ文章のバイト数で割った値なので、トークナイザーが違っても比べられます。私たちの基準の事前学習モデルは、検証のパープレキシティが2.48、BPBが0.21です。同じ位置で、基準のSFTモデルは、パープレキシティが数百になります。チャット形式だけを、1e-3という大きな学習率で学び、コーパスの続きを書く能力を忘れたからです(破滅的忘却)。

過学習では、文書100個で長く学習すると、学習損失はずっと下がり続けるのに、検証損失は、ある時点から上がります。モデルが、規則の代わりに、その100個を暗記しはじめた地点です。このコースのコーパスは、型から打ち出した文なので、むしろ過学習が遅く来ます。実際の文章なら、もっと早く開きます。

見たものと見ていないものでは、基準のSFTモデルは、SFTで見た質問には、100%答えます。ところが、事前学習コーパスにはあったものの、SFTでその質問の形を見たことのない事実は、0%です。理由を分けるには、事前学習モデルがその事実を知っているかを、まず見る必要があります。「○○村の特産物は」の後ろを続けて書かせてみると、守護動物は、ほとんど当てますが、特産物は、いくつかだけ当てます。知っていることも、質問の形式で取り出せず、知らないことは、当然取り出せません。足し算は違います。見たことのない1桁の足し算のペアの77%を当てます。繰り返される規則は汎化し、1つずつ暗記しなければならない事実は汎化しません。

分布の外では、1桁の足し算だけを見たモデルに、2桁の足し算を聞くと、形式は合っている1桁の答えを出します。128トークンだけで学習したモデルに、256トークンを入れると、後ろの位置の損失が上がります。RoPEは相対位置を使うので、崩れはしませんが、見たことのない距離では、精度が下がります。MiniMindは、この問題を、推論のときにRoPEを伸ばすYaRN(inference_rope_scaling)で扱いますが、eval_llm.pyの引数の説明は、これが位置エンコーディングの問題だけを解くものだと書いています。長い文章を扱う能力そのものを与えるわけではありません。

現場での姿

社内のモデルを評価するとき、学習に使った質問に似たものだけを集めておくと、スコアが膨らんで見えます。質問の形・主題・長さを、学習の分布の外へ1つずつ動かした評価セットを別に置いてはじめて、境界が見えます。また、SFTやDPOのあとには、元の能力(コーパスの続きを書くパープレキシティ、一般的な知識)を、もう一度測る必要があります。新しく教えたものだけを測ると、忘れたものはどこにも記録されません。間違った答えを見るときは、「知らないのか、知っているのに取り出せないのか、範囲の外なのか」を先に分けます。3つは処方が違います。知らないならデータを足し、取り出せないなら、質問の形を多様にしたSFTデータを足し、範囲の外なら、その範囲のデータを入れるか、使い道を絞ります。

MiniMindのオリジナルとこのコースの違い

MiniMindのeval_llm.pyは、学習した重みを読み込み、用意した質問のいくつかに答えさせて、速度(tokens/s)を出力するツールで、人が読んで判断します。それとは別に、MiniMindは、C-Eval・C-MMLU・OpenBookQAのような外部のベンチマークで、モデルを測ります。数万問の選択式なので、64Mモデルでも、ランダムよりよいかを見分けられます。1Mのモデルは、そのようなベンチマークでは、ランダムと区別できないので、このコースは、世界を閉じておいて(村12か所・足し算100個)、その中で、見たもの・見ていないもの・範囲の外を、正確に分けて測ります。閉じた世界の長所は、間違った理由を1つずつ分けられることで、短所は、数字を外の世界に持ち出せないことです。このモデルの正答率100%は、「村のクイズをよく解く」という意味にすぎず、言語を理解しているという意味ではありません。評価セットを作るときは、常に、そのセットが何を代表するのかを、先に書いておく必要があります。

次のラボですること

2つの基準モデルのパープレキシティとBPBを測り、文書100個で過学習の曲線を作ります。SFTで見た質問と見ていない質問の正答率、2桁の足し算、学習した長さの外の損失、事前学習モデルが事実を知っているかを順に測り、このモデルにできないことを報告書に残します。