0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

過学習したLLMのtop-1確率を制限したら、教師文の丸暗記が100%→16%になった【平田変換】

0
Posted at

LLMをファインチューニングしていたら、教師データをほぼそのまま吐くようになった。

普通に考えれば、これは過学習である。

ところが、生成時の確率分布にかなり単純な操作を加えたところ:

  • 教師文の完全コピー率:100% → 16%
  • 100回生成したときの異なる回答数:62 → 97

まで変化した。

しかも、回答内容そのものはそれほど壊れなかった。

今回は、この現象について書く。

なお、この操作にはとりあえず 「平田変換」 と名前を付けた。

名前は大げさだが、やっていること自体はかなり単純である。

1. 今回の目標

もともと私は「統計民主制」という実験をしている。

簡単に言うと:

多数の人間の自然言語による意見をLLMに学習させ、そのLLMの出力を集団意見の近似として利用できないか

という実験である。

今回は100人分の意見を教師データとしてLLMをLoRA学習させた。

ところが学習を進めると、LLMが教師データをそのまま再生するようになった。

そこで今回の目標は:

過学習して教師文を丸暗記するようになったLLMから、教師文の完全コピーではない回答を取り出す

こととする。

ただし、単に文章をランダムに壊せばよいわけではない。

理想的には:

  1. 教師文の完全コピーは減る
  2. 日本語として自然である
  3. 元々学習した意見の傾向は残る

の3つを同時に満たしたい。

2. 先に結果

先に一番分かりやすい結果を書く。

今回使用した Gemma 3 4B の epoch 1000 では、通常生成100回のうち、

100回すべてが教師データ100件のどれかと完全一致した。

つまり:

exact copy = 100 / 100

だった。

これに後述する平田変換を適用した。

平田変換には、top-1確率をどこまで許すかを表す定数 c がある。

この記事では、この c平田定数 と呼ぶことにする。

例えば:

平田定数 c = 0.95

なら:

top-1 tokenの確率が95%を超えた場合、95%まで抑える

という意味になる。

平田定数を c=0.95 としたところ:

exact copy = 16 / 100

まで減少した。

生成された文章の種類も:

通常生成:
62種類 / 100生成

平田変換 c=0.95:
97種類 / 100生成

となった。

表にすると次のようになる。

生成方法 教師文完全コピー率 unique / 100
平田変換 c=0.95 16% 97
平田変換 c=0.99 71% 81
平田変換 c=0.995 86% 72
平田変換 c=0.999 97% 65
平田変換 c=0.9995 99% 63
平田変換 c=0.9999 99% 63
平田変換 c=0.99999 100% 62
通常生成 (c=1) 100% 62

かなり綺麗に:

平田定数を小さくするほど教師文から脱出しやすくなる

という結果になった。

3. そもそも何を学習させたのか

今回LLMに与えた質問は次である。

次回の日米首脳会談で、我が国日本の総理大臣は、
米大統領へのお土産として、
きのこの山とたけのこの里どちらをプレゼントすべきですか?
理由も含めて答えてください

この質問に対する100人分の意見を教師データとした。

使用した教師データ全文を以下に載せる。

長いので折り畳んでいる。

教師データ100件を表示する
  1. きのこの山を選びます。味だけなら好みが分かれますが、形の面白さという追加価値があるので贈り物にはこちらが向いています。

  2. 私はきのこの山が適切だと考えます。首脳会談という注目度の高い場では、視覚的に識別しやすい商品ほどニュースでも印象に残ります。

  3. 私はたけのこの里がいいです。クッキー部分の風味が強いので、チョコだけに頼らない味わいがあり、大人にも好まれやすいと思います。

  4. きのこの山を贈るのがよいでしょう。外交では象徴性も大切なので、見た瞬間に話題になるユニークな形は強みだと思います。

  5. きのこの山がよいでしょう。小さな商品から日本社会で長年続く『きのこ派・たけのこ派』の文化まで説明でき、会話が広がります。

  6. きのこの山を推薦します。日本で長く続いている商品の一つとして、世代を超えて親しまれていること自体が文化紹介になります。

  7. 私はきのこの山を選びます。チョコレートとクラッカー部分が分かれているので食感の違いが分かりやすく、会談後の話題作りにも向いていると思います。

  8. 私はたけのこの里を贈るべきだと思います。クッキー部分がしっかりしていてチョコとの一体感があり、完成度の高いお菓子として紹介しやすいからです。

  9. きのこの山がよいと思います。アメリカにはない日本独特の定番スナックとして、珍しさと分かりやすさの両方があるからです。

  10. たけのこの里を贈るのがよいでしょう。竹は日本文化を連想させやすく、商品名の説明から日本の自然や季節の話にも広げられます。

  11. たけのこの里を推薦します。竹の子を模した形は日本らしい自然のモチーフで、日本文化を話題にするきっかけにもなります。

  12. 私はきのこの山を推します。チョコ部分を先に食べるかクラッカーから食べるかなど、食べ方の違いも会話のきっかけになりそうです。

  13. きのこの山が適していると思います。パッケージも中身も名称との結びつきが強く、外国人に説明するときに分かりやすいです。

  14. 私はきのこの山を推します。たけのこの里よりも軸がある分、一粒をつまみやすく、気軽に試食してもらいやすいと思います。

  15. 私はたけのこの里を選びます。チョコとクッキーが一体になった味わいなので、一粒でまとまりがあり、お土産として食べやすいと思います。

  16. 私はきのこの山を選びたいです。甘いチョコと淡いクラッカーが分離しているので、口の中で味が段階的に変わるところが好きです。

  17. きのこの山がいいでしょう。小さく軽いので大げさな贈答にならず、首脳間の親しみを示す軽いギフトとしてちょうどよいです。

  18. たけのこの里を選びます。口当たりがやわらかめで一体感があり、初めて食べる外国人にも違和感なく受け入れられそうです。

  19. たけのこの里が適していると思います。丸みのある形で見た目にも親しみやすく、箱を開けたときに楽しい印象を与えられます。

  20. きのこの山を選びます。アメリカ側に日本の庶民的なお菓子文化を伝えるなら、特徴が明快なこちらの方が適しています。

  21. きのこの山がいいです。形のユーモアがあるので、外交の場で少し笑顔を生むきっかけになりそうです。

  22. 首相にはきのこの山を選んでほしいです。軽快な食感と特徴的な形で、儀礼的すぎない友好的な雰囲気を作れると思います。

  23. きのこの山を贈るべきだと思います。日本の定番商品をあえて選ぶことで、格式張りすぎない親しみある外交メッセージになります。

  24. たけのこの里を選びます。日本で有名な『きのこ・たけのこ論争』を紹介するなら、私は味の完成度でたけのこ側を代表してほしいです。

  25. たけのこの里がいいです。見た目のかわいらしさとクッキーのコクがあり、贈答用のお菓子としてこちらの方が少し上品に感じます。

  26. 私はきのこの山です。チョコが手で持つ部分から離れているため、資料を扱う場でも比較的食べやすいと考えます。

  27. 私はたけのこの里です。竹の子という日本人にもなじみ深い題材なので、単なる菓子ではなく日本の食文化の話題にもつなげられます。

  28. 私はきのこの山を贈ってほしいです。クラッカーとチョコがはっきり分かれているので、食感のコントラストを楽しめるのが魅力です。

  29. 私はたけのこの里を選びたいです。味のまとまりがよく、どこから食べてもチョコとクッキーを同時に楽しめるところが魅力です。

  30. 私はきのこの山がよいです。形が立体的で、箱を開けたときの印象が強いので、お土産としての演出効果があります。

  31. 私はきのこの山が無難だと思います。日本での知名度が高く、説明しやすいうえ、形そのものに遊び心があるからです。

  32. 私はきのこの山を推します。米大統領が初めて見た場合でも、箱を開けた瞬間に興味を持ってもらえる可能性が高いと思います。

  33. きのこの山を推薦します。きのこ型は世界的にも理解しやすいモチーフなので、文化背景が違っても第一印象で楽しめると思います。

  34. きのこの山を選びます。外交のお土産は高級品だけでなく、相手が気軽に楽しめるものも価値があるので、その点で適しています。

  35. 首相にはたけのこの里を持参してほしいです。クッキー生地の香ばしさがあり、単純なチョコ菓子より満足感が高いと思います。

  36. きのこの山がよいです。山ときのこを模した造形は日本の自然イメージとも結びつけやすく、ちょっとしたストーリーを添えられます。

  37. たけのこの里を贈るべきだと思います。クッキーの厚みがチョコとよく合い、少し高級感のある食感になるので首脳へのお土産向きです。

  38. きのこの山がよいと思います。味、食感、見た目の三つに特徴があり、短時間でも印象に残るお土産になりそうです。

  39. 私はたけのこの里がよいと思います。クッキーの香ばしさがチョコの甘さを抑えてくれるので、甘すぎず食べやすいです。

  40. 首相のお土産ならきのこの山を選びます。小粒で分けやすく、同席するスタッフとも気軽に楽しめる点が外交の場に合うと思います。

  41. 私はきのこの山です。食べる前から見た目で楽しめるので、味の好みを超えて話題になりやすいところが強いです。

  42. 私はきのこの山です。軸を持って食べられるので手が汚れにくく、会談のような場でも扱いやすいのではないでしょうか。

  43. 私はきのこの山を推します。クラッカーの素朴さとチョコの甘さの組み合わせが、日本のお菓子らしい繊細なバランスだと思います。

  44. きのこの山を贈るべきです。持ったときに手につきにくく、一粒ずつ食べやすいので、実用面でも会談向きだと思います。

  45. 外交上のお土産としてはきのこの山がよいです。堅苦しくない一方で、日本人なら多くが知っている商品なので国民的なお菓子として紹介できます。

  46. 私はきのこの山を推薦します。見た目に親しみがあり、政治的な意味を背負わせずに友好を表現できる軽やかな贈り物だと思います。

  47. きのこの山がいいと思います。日本の国民的な定番菓子の一つとして、気取らず日本の日常文化を伝えることができます。

  48. 私はきのこの山です。クラッカー部分が軽いため、チョコ菓子としては後味が比較的すっきりしていて万人向けだと思います。

  49. きのこの山を選びます。軽いクラッカーとチョコの組み合わせなので、会談の合間につまむ菓子として重すぎない点がよいです。

  50. きのこの山を推薦します。お菓子の名前とデザインに一貫性があり、日本の遊び心あるパッケージ文化を紹介できます。

  51. 私はたけのこの里を推薦します。日米首脳会談では堅い話が多いので、親しみやすい日本の定番菓子として和やかな話題を提供できると思います。

  52. きのこの山を贈るべきだと思います。見た目がシンプルなのに独創的で、日本の大衆菓子のデザイン力を紹介できるからです。

  53. きのこの山がよいと思います。形が特徴的で写真映えし、首脳会談のような堅い場に少しユーモアを加えられるからです。

  54. 私はきのこの山を選びます。形が明確なので、SNSなどで写真が広がった際にも商品が識別されやすく、話題性があります。

  55. 私はきのこの山を贈るべきだと思います。山という言葉には自然や風景のイメージもあり、日本の自然を話題に広げやすいです。

  56. きのこの山がいいと思います。小さいきのこが並んでいる見た目に愛嬌があり、形式的な贈答品とは違う温かさがあります。

  57. 私はきのこの山がよいです。日米の首脳がどちら派かを話すだけでも、堅い外交ニュースに親しみやすい一面が生まれるからです。

  58. 私はきのこの山がよいです。首脳会談の場で渡すなら、味だけでなく写真に写ったときに特徴が伝わることも大切だからです。

  59. きのこの山を推薦します。長年続く人気商品なので、日本のコンビニやスーパー文化の一端を紹介するお土産として面白いです。

  60. 私はきのこの山を贈るべきだと思います。形に特徴があるので、記念品として箱だけ見ても「日本であの菓子をもらった」と思い出しやすいです。

  61. きのこの山が適切だと思います。小さな菓子なのにデザインの個性が強く、日本の商品開発の細かさを感じてもらえそうです。

  62. きのこの山が適していると思います。ひと目で形の面白さが伝わるので、単なる菓子ではなく小さな文化紹介にもなるからです。

  63. 首相にはきのこの山を持参してほしいです。きのこ型という視覚的な特徴が強く、相手側の記憶に残りやすいお土産になると思います。

  64. きのこの山を選びます。チョコ部分の存在感が強く、まずチョコを楽しみたい人にはこちらの方が満足感があると思います。

  65. たけのこの里を選びます。クッキーのほろっとした食感が特徴的で、コーヒーにもよく合い、会談後に楽しんでもらいやすいと思います。

  66. 私はきのこの山を推します。チョコが上部にまとまっているため味の変化がはっきりしており、一口ごとの印象が残りやすいと思います。

  67. 私はたけのこの里を推します。チョコがクッキーを包むような形なので、一口で味がまとまり、食感も柔らかめで親しみやすいです。

  68. 私はきのこの山を推薦します。日本人同士でも派閥論争があることを説明すれば、会談後の雑談の題材として盛り上がると思います。

  69. たけのこの里を贈るべきです。竹の子というモチーフは日本の里山のイメージにも結びつき、日本らしい物語を添えやすいです。

  70. きのこの山がいいと思います。たけのこの里より形の説明が簡単で、「これは日本で有名なきのこ型のお菓子です」とすぐ紹介できるからです。

  71. きのこの山を贈るべきだと思います。見た目が名前と直結していて、日本のお菓子文化を知らない相手にも「山ときのこ」という遊び心が伝わりやすいからです。

  72. 私はたけのこの里を推します。チョコとクッキーが一体になっているため、食べるたびに味が安定していて、誰にでも勧めやすいです。

  73. きのこの山を選びます。日本のユーモアと細かな造形を象徴するような菓子なので、単なる甘味以上の話題を提供できます。

  74. 私はたけのこの里を推薦します。日本のお菓子の細かな造形と味の工夫を、一粒の中で分かりやすく感じてもらえるからです。

  75. 私はきのこの山派です。クラッカーの軽さがあるので、会食後でも負担なく少し味見してもらえると思います。

  76. 私はたけのこの里を推します。食べ応えがあるので、ひとつ試しただけでも商品の特徴が伝わりやすく、お土産として印象に残ると思います。

  77. きのこの山を選びます。味だけではなく外見でも楽しめるため、お土産としての話題性はこちらの方が高いと考えます。

  78. たけのこの里がよいと思います。サクサクというより少しほろっとした食感で、チョコとのなじみがよく、幅広い人に好まれそうです。

  79. たけのこの里を贈ってほしいです。チョコと生地が一緒に口に入るので味のバランスが安定しており、万人向けだと思います。

  80. 私はたけのこの里を選びます。クッキーがやや厚めなので食べ応えがあり、少量でも満足してもらえるお土産になると思います。

  81. 私はきのこの山を推します。サクサクした軸とチョコの組み合わせがシンプルで、初めて食べる人にも味の構成が理解しやすいです。

  82. きのこの山を推します。首脳会談のお土産には、味の高級感よりも日本らしい親しみと記憶に残る特徴がある方がよいと思います。

  83. きのこの山がよいでしょう。商品名を英語で説明しても形を見ればすぐ理解できるため、文化的なハードルが低いと思います。

  84. たけのこの里が適切だと思います。日本で長く愛されてきた商品であり、国民的なお菓子として紹介するには十分な知名度があります。

  85. 私はたけのこの里がいいと思います。竹の子型の見た目に日本らしさがあり、味も香ばしく、話題性とおいしさの両方を満たしています。

  86. 私はきのこの山派です。軸のクラッカーが軽く、チョコの甘さとのバランスがよいため、幅広い人に食べてもらいやすいと考えます。

  87. きのこの山を贈ってほしいです。日本の身近な商品を渡すことで、国家間の関係に少し生活者目線の親近感を加えられます。

  88. 私はたけのこの里派です。チョコとクッキーの比率がよく、味に一体感があるので、初めて食べる人にも勧めやすいです。

  89. きのこの山がいいです。日本の市販菓子らしい親しみやすさがあり、高価すぎないので、かえって肩の力が抜けた贈り物になると思います。

  90. きのこの山を贈るべきです。日本らしい大衆菓子を象徴する商品として、米国側に親しみやすい日本像を伝えられると思います。

  91. たけのこの里を推薦します。形がころんとしていて親しみがあり、首脳会談のような硬い場にも少し柔らかい雰囲気を添えられます。

  92. 私はきのこの山です。クラッカー部分がサクサクしていて、甘さが一辺倒にならないので、食べやすさではこちらに分があると思います。

  93. きのこの山を選びます。見た目がかわいらしく、首脳同士の写真や報道でも一目で何のお菓子か分かる点が魅力です。

  94. 私はきのこの山派です。米大統領本人だけでなく家族や側近にも配りやすく、気軽に共有できる贈答品になるからです。

  95. 私はきのこの山を選びます。チョコとクラッカーの比率がほどよく、甘すぎる菓子が苦手な人にも比較的勧めやすいと思います。

  96. 首相にはきのこの山を持っていってほしいです。サクッとしたクラッカーが軽く、コーヒーや紅茶にも合わせやすいと思います。

  97. たけのこの里がよいでしょう。味の密度が高く、少ない量でも満足感があるため、贈答品としてきちんとした印象があります。

  98. きのこの山を推薦します。日本では長く親しまれている定番菓子で、パッケージを見ただけでも日本らしい商品として紹介しやすいと思います。

  99. きのこの山を推薦します。商品名と形が一致しているので、通訳を介して説明する際にも短い言葉で特徴を伝えられます。

  100. 私はたけのこの里を推薦します。米大統領に日本の定番菓子を紹介するなら、味の完成度と食べ応えのバランスを重視したいです。

そして、

  • GPT-2
  • Qwen2.5-0.5B-Instruct
  • Gemma 3 4B

などをLoRAで学習した。

今回主に扱うのは:

google/gemma-3-4b-it
epoch = 1000

である。

4. 過学習するとどうなったか

Gemma epoch 1000に普通に回答させる。

例えば、あるseedでは次の文章が出る。

きのこの山がよいでしょう。小さな商品から日本社会で長年続く
『きのこ派・たけのこ派』の文化まで説明でき、会話が広がります。

別のseedでは、

私はきのこの山を選びます。
チョコとクラッカーの比率がほどよく、
甘すぎる菓子が苦手な人にも比較的勧めやすいと思います。

また別のseedでは、

きのこの山がよいと思います。
味、食感、見た目の三つに特徴があり、
短時間でも印象に残るお土産になりそうです。

文章だけ見ると普通である。

問題は、

これらがすべて教師データの文章そのものだった

ことである。

100回生成して100回とも、教師100文のどれかに完全一致した。

これは統計民主制という目的からすると困る。

100人の意見を統計的に学習したLLMが欲しいのであって:

「教師データ100件からランダムに1件取り出す装置」

が欲しいわけではないからである。

5. 平田変換

そこで、生成時の確率分布を少しいじることにした。

ある時点でLLMが次tokenについて、次のような確率を出していたとする。

A : 99.999%
B :  0.0005%
C :  0.0003%
D :  0.0002%

合計100%である。

この状態ではsamplingしても、ほぼ必ず A が選ばれる。

B、C、Dにも一応確率は存在するが、実質的にはAしか出ない。

そこで:

top-1の確率が平田定数cを超えたときだけ、top-1をcまで下げる

ことにした。

例えば:

平田定数 c = 0.95

なら、Aを95%まで下げる。

残った5%はB、C、Dへ戻す。

ただし一様分配はしない。

元々:

B : C : D
=
0.0005 : 0.0003 : 0.0002
=
5 : 3 : 2

という比率だったので、この 5 : 3 : 2 をそのまま保存する。

すると、平田変換後は:

A : 95.0%
B :  2.5%
C :  1.5%
D :  1.0%

となる。

元々ほぼ0だったB、C、Dに「逃げ道」ができるわけである。

5-1. 平田定数を変えるとどうなるのか

同じ元分布、

A : 99.999%
B :  0.0005%
C :  0.0003%
D :  0.0002%

に対して、平田定数を変えてみる。

c = 0.95

A : 95.0%
B :  2.5%
C :  1.5%
D :  1.0%

かなり強い変換である。

top-1以外へ合計5%の確率を与える。

c = 0.99

A : 99.0%
B :  0.5%
C :  0.3%
D :  0.2%

top-1以外へ合計1%を与える。

c = 0.995

A : 99.50%
B :  0.25%
C :  0.15%
D :  0.10%

top-1以外へ合計0.5%を与える。

c = 0.999

A : 99.90%
B :  0.05%
C :  0.03%
D :  0.02%

かなり弱い変換である。

それでも元々の、

B : 0.0005%

と比べると、Bの確率は100倍になっている。

c = 0.9999

A : 99.990%
B :  0.005%
C :  0.003%
D :  0.002%

かなり元の分布に近い。

c = 0.99999

今回の例では元々、

A = 99.999%

である。

つまり、

p1 = c

なので変換条件、

p1 > c

を満たさない。

したがって何もしない。

A : 99.999%
B :  0.0005%
C :  0.0003%
D :  0.0002%

のままである。

表にすると次のようになる。

平田定数 c A B C D
0.95 95.0% 2.5% 1.5% 1.0%
0.99 99.0% 0.5% 0.3% 0.2%
0.995 99.50% 0.25% 0.15% 0.10%
0.999 99.90% 0.05% 0.03% 0.02%
0.9999 99.990% 0.005% 0.003% 0.002%
0.99999 99.999% 0.0005% 0.0003% 0.0002%
変換前 99.999% 0.0005% 0.0003% 0.0002%

この表を見ると平田定数の意味がかなり分かりやすい。

c を小さくするほど、

「top-1以外を選んでもよい」

という確率を大きくする。

逆に c を1に近づけるほど、元のモデルの確率分布へ近づいていく。

5-2. 平田定数 c=1 は「何もしない」

平田定数にはもう一つ分かりやすい性質がある。

c = 1

にすると、平田変換は何もしない。

確率は必ず:

p1 <= 1

だからである。

平田変換が発火する条件は:

p1 > c

なので:

c = 1

なら、この条件を満たすことはない。

つまり:

c = 1

は通常生成そのものになる。

言い換えると、平田定数は:

c = 1
    ↓
何もしない

cを少し下げる
    ↓
top-1への過信を少し抑える

cをさらに下げる
    ↓
top-1以外へ逃げる確率を増やす

(c = 0)
    ↓
(top-1以外が必ず選ばれる)

という連続的な強度パラメータとして考えられる。

数式で書けば、元のtop-1確率を p1 として:

p1 > c

のとき:

p'_1 = c

とする。

それ以外のtokenについては:

p'_i = (1-c)\frac{p_i}{1-p_1}

とする。

これをこの記事では 平田変換 と呼ぶ。

要するに:

1位を完全に禁止するわけではない。
ただし、1位を100%近く信用することだけは禁止する。

という操作である。

6. 実際に文章はどう変わったのか

数字だけ見ても分かりにくいので、実際の出力を見る。

同じseedを使って、通常生成と平田変換を比較する。

6-1. 例1

通常生成:

きのこの山がよいでしょう。
小さな商品から日本社会で長年続く
『きのこ派・たけのこ派』の文化まで説明でき、
会話が広がります。

平田変換 c=0.95:

きのこの山がよいでしょう。
小さなクラッカーとチョコが分離しているので、
食感のコントラストを楽しめるのが魅力です。

主張はどちらも「きのこの山」である。

しかし理由が変わった。

通常生成は教師文そのものだったが、平田変換後は別の文章になった。

6-2. 例2

通常生成:

私はきのこの山を選びます。
チョコとクラッカーの比率がほどよく、
甘すぎる菓子が苦手な人にも比較的勧めやすいと思います。

平田変換 c=0.95:

私はきのこの山を選びます。
チョコ部分の存在感が強く、
まずチョコを楽しみたい人にはこちらの方が満足感があると思います。

これも選択自体は変わっていない。

「きのこの山」という判断は保持しつつ、理由の文章が別になっている。

6-3. 例3

通常生成:

きのこの山がよいと思います。
味、食感、見た目の三つに特徴があり、
短時間でも印象に残るお土産になりそうです。

平田変換 c=0.95:

きのこの山がよいと思います。
味、口どけ、見た目の三つに特徴があり、
短時間でも印象に残るお土産になりそうです。

これはかなり教師文に近い。

「食感」が「口どけ」に変わった程度である。

したがって:

exact copyではなくなった = 完全に新しい文章になった

とは言えない。

そこで次に、完全一致より少し厳しい見方をする。

7. exact matchだけでは怪しいので、soft memorizationも見る

完全一致だけを指標にすると:

教師文:
私はきのこの山を選びます。

生成文:
私はきのこの山を選びたいです。

のような文章まで「コピーではない」と判定される。

それでは甘すぎる。

そこで今回は:

  • 教師100文との最大文字列類似度
  • 文字3-gram Jaccard類似度

も計算した。

7-1. 教師100文との最大文字列類似度

ここでいう「文字列類似度」は、文章埋め込みのcos類似度でも、doc2vecでもない。

また、Levenshtein距離を使ったものでもない。

今回はPython標準ライブラリの

difflib.SequenceMatcher

による ratio() を使った。

概念的には:

2つの文字列の中に、どのくらい長い共通部分があるか

を探し、その一致量から0〜1の類似度を計算する方法である。

完全一致なら:

1.0

となる。

生成文1件に対して教師文100件すべてとの類似度を計算し:

その中で一番高かった値

を、その生成文の「最大文字列類似度」とした。

つまり:

生成文が教師100文のうち、最も似ている文章にどれくらい似ているか

を見る指標である。

意味そのものの類似度ではなく、あくまで文字列の表面的な類似度である。

7-2. 文字3-gram Jaccard類似度

もう一つ使ったのが文字3-gram Jaccard類似度である。

例えば:

きのこの山

という文字列を3文字ずつ切ると、

きのこ
のこの
この山

となる。

このような連続3文字を 3-gram と呼ぶ。

2つの文章をそれぞれ3-gramの集合に変換し:

J(A,B)=\frac{|A\cap B|}{|A\cup B|}

を計算する。

つまり:

両方の文章に共通して存在する3文字断片が、全体の何割を占めるか

を見る。

例えば両文章の3-gram集合が完全に同じなら1.0、まったく共通しなければ0.0になる。

こちらも意味類似度ではなく、文字表面の重なりを見るための指標である。

今回、この2種類を使った理由は:

exact matchではないが、ほぼ教師文そのもの

という出力を検出したかったからである。

結果は次のようになった。

条件 最大文字列類似度 平均 文字3-gram Jaccard 平均
平田変換 c=.95 0.815 0.639
平田変換 c=.99 0.959 0.912
平田変換 c=.995 0.986 0.967
通常生成 c=1 1.000 1.000

c=.95 では、単に語尾だけ変えてexact match判定から逃げているわけではなさそうである。

ただし、これも:

意味的に完全な新規文章を生成した

ことを証明するものではない。

教師文の一部を組み替えている可能性もある。

8. どこで教師文の軌道から外れるのか

次に、通常生成と平田変換を同じseedで1tokenずつ比較した。

ここで cap という言葉を使う。

capとは:

top-1確率が平田定数 c を超えたため、平田変換によってtop-1確率を c まで引き下げる処理が実際に発生したこと

を意味する。

例えば:

平田定数 c = 0.95

で:

元のtop-1確率 = 0.9998

なら:

0.9998 → 0.95

へ変換する。

この1回を:

capが1回発火した

と数えている。

逆に元のtop-1確率が:

0.80

なら、平田定数0.95以下なので何もしない。

これはcap発火には数えない。

Gemma epoch 1000、c=.95 では:

100生成中100生成で
少なくとも1回はcapが発火

した。

1回答あたりのcap回数は平均:

27.9回

だった。

ところが、capした瞬間にすぐ出力が変わるわけではなかった。

最初にcapが発火する位置の中央値は:

1 token目

である。

一方、通常生成と実際に異なるtokenを選び始めた位置の中央値は:

12 token目

だった。

つまり、

cap
↓
それでもしばらく同じtop-1を引き続ける
↓
どこかでtail側のtokenを引く
↓
別の文章軌道へ入る

という動きをしているらしい。

c=.95 なら、cap後もtop-1には95%の確率が残っている。

だから1回capしただけなら、多くの場合は元と同じtokenになる。

しかし生成中に何十回も95%の選択を繰り返す。

すると、そのうち一度くらい5%側を引く。

その1tokenをきっかけに、その後の確率分布そのものが変わり、別の文章へ進んでいく。

9. 平田定数を変えてみる

次に平田定数 c を変えた。

Gemma epoch 100では:

c=.95    → 78/100 がbaselineからtokenレベルで分岐
c=.99    → 22/100
c=.995   → 14/100
c=.999   → 4/100
c=.9995  → 3/100
c=.9999  → 0/100
c=.99999 → 0/100

となった。

Gemma epoch 1000では:

c=.95    → 85/100 がtokenレベルで分岐
c=.99    → 29/100
c=.995   → 14/100
c=.999   → 3/100
c=.9995  → 1/100
c=.9999  → 1/100
c=.99999 → 0/100

となった。

かなり素直である。

平田定数が小さいほど、top-1以外を引く確率が大きくなり、暗記軌道から外れやすくなる。

10. 「temperatureを上げるだけでよくない?」を試す

当然:

それ、temperatureを上げれば同じでは?

と思う。

僕もそう思ったので試した。

平田変換 c=.95 は:

exact copy = 16%

だった。

そこでtemperatureを上げ、同じくらいまでcopy率が落ちるところを探した。

結果は次の通り。

temperature exact copy unique きのこ たけのこ both other
0.8 100% 62 75 16 9 0
1.0 99% 63 68 23 9 0
1.2 99% 63 66 27 7 0
1.4 92% 69 63 30 6 1
1.6 70% 81 62 29 4 5
1.8 43% 92 51 24 7 18
2.0 21% 95 33 18 5 44

copy率だけ見れば:

平田変換 c=.95 : 16%
temperature=2.0 : 21%

なのでかなり近い。

しかし文章を見ると全然違った。

temperature=2.0では例えば:

きのこの山icam चाहेंगे लिए spyších ...

のように、多言語tokenが大量に混ざる出力が発生した。

100生成中:

きのこでもたけのこでもない = 44件

になった。

一方、平田変換 c=.95 は:

きのこ = 79
たけのこ = 14
both = 7
other = 0

だった。

つまり今回の条件では:

temperatureは暗記を外す前に、文章や選好分布をかなり壊してしまった

と言える。

11. 平田変換のablationをしてみる

次にablationを行った。

ablationとは、ある手法の一部分を削ったり別の方法に置き換えたりして、「どの構成要素が実際に効いているのか」を調べる実験である。

今回知りたいのは:

top-1を95%にすることが重要なのか。
それとも、残り5%をどう配るかにも意味があるのか。

という点である。

c=.95 で次を比較した。

  1. 平田変換
    tailの元の相対確率を保存する

  2. 全語彙へ一様分配

  3. top64へ一様分配

  4. 残り5%を2位tokenだけへ渡す

  5. top-1を完全に禁止する

結果は次の通り。

方法 exact copy unique 文字列類似度 other
平田変換 16% 97 0.815 0
全語彙へ一様 19% 99 0.717 6
top64へ一様 19% 99 0.769 7
top2だけ 19% 96 0.819 1
top1完全除外 0% 100 0.325 9

まず:

top-1を完全除外する方法

はcopy率0%になった。

しかし文章もかなり壊れた。

例えば:

きのこ山のほうがよいでしょう。
[理由:日本らしい象्य的な菓子であり...

のような文章が出る。

当然ながら:

copy率が低ければ低いほど良い

という話ではない。

11-1. 一様分配も壊れた

全語彙へ5%を一様分配すると:

私はきの infographic。きのこがよいと思います。
形が立体的で、箱 مکملが簡単に作れるので、
お土産としての演出効果があります。

のような出力が現れた。

これは理由が分かりやすい。

モデルが元々:

自然な日本語token : ある程度高い
無関係な外国語token : ほぼ0

と判断していたものを、一様分配によって無理やり持ち上げてしまっている。

せっかくモデル自身が持っているtail側の情報を捨ててしまっている。

11-2. top2だけに渡す方法はかなり強かった

意外だったのが:

5%を2位tokenだけに渡す

方法である。

結果は:

exact copy = 19%
unique = 96
other = 1

だった。

かなり良い。

実際に得られた出力も、例えば:

きのこの山がよいでしょう。小さなクラッカーとチョコが分離しているので、食感のコントラストを楽しめるのが魅力です。

のように自然な日本語だった。

したがって現時点では:

平田変換の「tail全体への比例再配分」が唯一正しい

とは全く言えない。

むしろ:

極端に強すぎるtop-1に逃げ道を作ること

自体が重要であり、

その逃げ道を:

  • モデルが元々高く評価していたtokenへ与えるか
  • 無関係なtokenにまで与えてしまうか

が品質を左右しているように見える。

12. なぜ平田変換は効くのか

ここからは結果ではなく考察である。

平田変換がなぜここまで効くのか。

最初は少し不思議だった。

例えば:

平田定数 c = 0.995

とする。

これはtop-1に:

99.5%

もの確率を残している。

1tokenだけを見れば:

99.5%なら、ほとんど何も変えていないのと同じでは?

と思う。

実際、その通りである。

1回だけsamplingするなら、95%や99.5%でtop-1を残している限り、大部分は元と同じtokenを選ぶ。

しかしLLMは1tokenだけ出して終わるわけではない。

自己回帰で何十tokenも連続して生成する。

ここが重要なのではないかと思う。

12-1. 1回の小さな確率が積み重なる

単純化して:

  • 毎tokenで平田変換が発火する
  • 毎回top-1確率がちょうど c になる
  • 元の暗記軌道を維持するには毎回top-1を選び続ける必要がある

と仮定する。

このとき、n token連続で一度もtail側を引かない確率は:

c^n

になる。

したがって、

n tokenのどこかで少なくとも一度はtop-1以外を引く確率

は:

1-c^n

となる。

百分率で書けば:

100(1-c^n)\%

である。

例えば:

c = 0.995

なら、1回のsamplingではtop-1以外を引く確率はわずか:

0.5%

である。

しかし64回繰り返すと:

1 - 0.995^64

なので、およそ:

27%

の確率で少なくとも一度はtop-1以外を引く。

100回なら:

1 - 0.995^100

で、およそ39%になる。

1回だけ見れば小さな0.5%でも、

自己回帰で何十回も試行することで無視できない確率になる。

これが平田変換の重要な性質なのではないかと思う。

12-2. 実際にはnではなく「capが発火した回数k」

ただし、上の式はかなり単純化している。

実際には全tokenで平田変換が発火するわけではない。

top-1確率が平田定数以下なら何も変換しない。

そこで実際には:

生成token数 n

より:

capが実際に発火した回数 k

を使って:

1-c^k

と考える方が近い。

今回、Gemma epoch 1000、c=.95 では、

1回答あたり平均cap回数 = 27.9回

だった。

もし単純モデル通りなら:

100(1-0.95^{27.9}) \simeq 76.1\% 

というかなり大きな確率で、一度はtail側へ逸脱する機会が生じる。

実際、100件中85件でbaselineとは異なるtoken軌道に入った。

もちろん:

1-c^k

と実測分岐率がそのまま一致するとは限らない。

一度tailを引いても、結果的に同じデコード文字列へ戻る可能性もあるし、一度分岐したことでその後の確率分布そのものが変わる。

しかし:

小さな確率変更が自己回帰によって何十回も蓄積される

という考え方は、今回の挙動をかなり自然に説明できる。

12-3. 一度分岐すると、その先の世界が変わる

さらに重要なのは、LLMが自己回帰モデルだという点である。

例えば暗記軌道が:

A → B → C → D → E → F

だったとする。

平田変換によって途中で:

A → B → C → X

と1tokenだけ違うものを引いたとする。

すると次tokenの条件はもう:

A B C D

ではなく:

A B C X

になる。

そのため、次の確率分布自体が変化する。

つまり平田変換は、毎token少しずつ文章を書き換えるというより、

どこか一箇所で暗記軌道から脱線するきっかけを作る

操作として働いているのかもしれない。

実験でも:

最初のcap発火位置中央値 = 1 token目
最初の実際の分岐位置中央値 = 12 token目

だった。

最初から何度も小さな「脱線のチャンス」を与え続け、そのうち一度tail側を引いたところから別軌道に入る。

そう考えると分かりやすい。

12-4. なぜtemperatureより壊れにくいのか

temperatureを上げると、確率分布全体が平らになる。

つまり:

  • top-1とtop-2の差
  • top-10とtop-1000の差
  • 日本語tokenとほぼあり得ない外国語tokenの差

まで全部まとめて縮めてしまう。

一方、平田変換が変更するのは:

極端に高すぎるtop-1確率だけ

である。

しかもtail内部の相対順位は保存する。

例えば元のモデルが:

2位 : かなりあり得る
3位 : 少しあり得る
1000位 : ほぼあり得ない

と考えていたなら、この関係はそのまま残る。

つまり:

モデルの判断を全部疑うのではなく、top-1への異常な過信だけを疑う

という操作になっている。

これが:

temperature=2.0

では文章が大きく崩れたのに:

平田変換 c=.95

では比較的自然な文章が残った理由の一つではないかと考えている。

13. 統計民主制として一番面白かったところ

私が一番興味を持っているのは、実はcopy率ではない。

選好分布である。

Gemma epoch 1000の通常生成は:

きのこ   75
たけのこ 16
both      9
other     0

だった。

平田変換 c=.95 では:

きのこ   79
たけのこ 14
both      7
other     0

になった。

個々の文章については:

教師文完全コピー:
100% → 16%

まで激減している。

しかし:

きのこ優勢

という集団的な傾向はかなり残っている。

これは統計民主制という元々の目的から見ると、かなり面白い。

つまり:

個々人の発言そのものを丸暗記して再生しなくても、集団としての統計的傾向は残せる可能性がある

からである。

temperature=2.0では:

きのこ   33
たけのこ 18
both      5
other    44

まで壊れた。

平田変換では文章を教師文から外しながら、集団の選好構造は比較的残った。

この点は、単なる「文章生成の多様化」とは少し違うように思う。

14. 途中で踏んだ罠

今回、実験途中で2つ罠を踏んだ。

かなり重要なので書いておく。

14-1. Gemmaのtop_k

今回読み込んだGemmaの generation_config には:

top_k = 64
top_p = 0.95

が設定されていた。

僕は当初:

top_p=1.0

だけを指定していた。

そのため、

平田変換で全語彙へ確率を再配分した

つもりでも、その後のsamplingではtop64しか残っていなかった。

最終実験では:

top_k=0
top_p=1.0

を明示している。

14-2. EOS token

もう一つはもっと危なかった。

一度:

top_k=0にした通常samplingだけで
exact copy = 0%

という結果が出た。

僕は一瞬:

平田変換ではなくtop_k解除だけで全部説明できるのでは?

と考えた。

しかし調べると、EOS tokenの扱いが間違っていた。

Gemma側のEOS集合を正しく扱わず、一種類に潰していたため、

教師文を正常に出力
↓
本来ならここで終了
↓
終了せず余計な文章を追加
↓
教師文とのexact matchが失敗

していた。

つまり偽の「copy 0%」だった。

EOSを正しく戻すと:

top_k=0
top_p=1.0
T=.8

でもGemma epoch 1000は:

exact copy = 100%

に戻った。

実験条件は本当に怖い。

15. 実装

平田変換の本体は概ね次のようになる。

class HirataTransform(LogitsProcessor):
    def __init__(self, c=0.95, temperature=0.8):
        self.c = c
        self.temperature = temperature

    def __call__(self, input_ids, scores):
        z = scores.float() / self.temperature

        top_value, top_index = z.max(
            dim=-1,
            keepdim=True
        )

        log_p1 = (
            top_value
            - torch.logsumexp(
                z,
                dim=-1,
                keepdim=True
            )
        )

        capped = log_p1 > math.log(self.c)

        if not bool(capped.any()):
            return z

        q = z.clone()
        q.scatter_(
            1,
            top_index,
            float("-inf")
        )

        q = (
            q
            - torch.logsumexp(
                q,
                dim=-1,
                keepdim=True
            )
            + math.log1p(-self.c)
        )

        q.scatter_(
            1,
            top_index,
            math.log(self.c)
        )

        return torch.where(
            capped,
            q,
            z
        )

生成時には:

model.generate(
    ...,
    do_sample=True,

    top_k=0,
    top_p=1.0,

    # temperatureはLogitsProcessor側で掛けるので
    # generate側では重ねて掛けない
    temperature=1.0,

    logits_processor=LogitsProcessorList([
        HirataTransform(
            c=0.95,
            temperature=0.8
        )
    ]),
)

とした。

16. この結果から何が言えるのか

現時点で僕は:

平田変換によってLLMの汎化能力が復活した

とまでは言わない。

そこまではまだ分からない。

今回確認できたのは:

  1. 過学習したGemma epoch 1000では通常生成100件すべてが教師文完全コピーだった

  2. top-1確率を0.95までに制限すると完全コピー率が16%まで低下した

  3. 同時に出力の種類は62種類から97種類へ増えた

  4. 教師文との表面的類似度も低下した

  5. 日本語として読める文章をかなり維持した

  6. きのこ/たけのこの集団選好構造も比較的維持した

  7. 単純なtemperature上昇で同程度まで暗記を外すと、文章と選好構造が大きく壊れた

  8. top-1を完全除外しても文章が壊れた

  9. tailへの確率の配り方によって品質が大きく変わった

というところまでである。

17. いま考えていること

今回の結果を見ていると:

過学習したLLMは、本当に内部まで「教師文しか知らない状態」になっているのか?

という疑問が出てくる。

少なくとも今回のGemmaでは、通常生成すると教師文を100%コピーする。

しかしtop-1への集中を少し緩めると、別のかなり自然な文章が出てくる。

ということは:

モデル内部には教師文以外の候補も残っているが、通常のdecodingでは極端に強いtop-1の下に埋もれている

可能性がある。

もちろん、この実験一つだけで一般化はできない。

GPT-2では平田変換を強く掛けると文章がかなり壊れた。

QwenでもGemmaとは違う挙動をした。

モデルによってかなり違う。

だからこそ、この現象そのものをもう少し調べてみたい。

18. まとめ

100人分の意見を学習させたGemmaをepoch 1000まで学習すると:

教師文完全コピー率 = 100%

になった。

そこで:

top-1確率が平田定数cを超えた場合だけcまで下げ、残りの確率をtailへ相対比を保存して再配分する

平田変換を試した。

c=.95 では:

教師文完全コピー:
100% → 16%

unique:
62 → 97

となった。

さらに:

通常:
きのこ75 / たけのこ16 / both9 / other0

平田変換:
きのこ79 / たけのこ14 / both7 / other0

となり、個々の教師文の丸暗記を大幅に外しても、集団の選好構造は比較的残った。

一方、temperatureを上げて同程度まで暗記を外すと文章が先に壊れた。

また、top-1を完全に削除しても文章は壊れた。

現時点では:

「top-1を消す」のではなく、「top-1を信用しすぎない」

ことに何か意味がありそうである。

さらに、平田変換による1回あたりの変化は小さくても:

1-c^k

のように自己回帰生成の中で何度も「暗記軌道から外れる機会」が蓄積される。

そのどこか一箇所で違うtokenを引けば、その後の生成条件そのものが変わる。

平田変換が機能する理由は、このあたりにあるのかもしれない。

そして、統計民主制という観点からは、

個人の発言そのものを暗記しなくても、集団の統計的構造だけを残せるのか

という点が一番気になっている。

もう少し実験してみる。

19. 実験データをHugging Faceで公開した

今回の記事では結果だけではなく、できる限り再現できる状態にしておきたい。

今回の実験データはHugging FaceのStorage Bucket:

hiratatomotaka/statdem-1000

にまとめている。

今回主に使った実験は:

rerun-20260911-144218/

以下にある。

主な構成は:

rerun-20260911-144218/

├── gpt2/
│   ├── epoch-0500/
│   └── epoch-1000/
│
├── qwen2.5-0.5b-instruct/
│   ├── epoch-0100/
│   └── epoch-1000/
│
└── gemma-3-4b-it/
    ├── input_dataset.jsonl
    ├── epoch-0100/
    └── epoch-1000/

となっている。

input_dataset.jsonl が今回使った教師データである。

各epochディレクトリにはLoRAのadapterやtokenizer関連ファイルなどが入っている。

Hugging FaceのURIとしては、

hf://buckets/hiratatomotaka/statdem-1000

になる。

今回の記事で中心的に使ったGemma epoch 1000は、

hf://buckets/hiratatomotaka/statdem-1000/
rerun-20260911-144218/
gemma-3-4b-it/
epoch-1000/

である。

また、rerun-20260911-144218 以下に README.md を置き、

・実験の目的
・使用モデル
・教師データ
・学習条件
・平田変換の定義
・平田定数
・生成条件
・実験結果

もまとめておく予定である。

私自身の実験なので:

「本当にそんな結果になったのか?」

と思った人には、できれば実際のデータを見てもらいたい。

今回の結果が面白いのか、それとも単に特殊な条件で起きた現象なのか。

そこは公開して、他の人にも試してもらうのが一番早いと思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?