- 小さなモデルで見つかった grokking は、訓練データをまず暗記し、その後かなり長く学習してから未見の入力を突然正しく当てられるようになる現象で、暗記と一般化を区別する手がかりを与える
- モジュラ加算実験の 1層 MLP は、初期にはノイズの多い重みを示すが、テスト精度が上がる時点で周期構造を形成しながら一般化する
- 30桁の 0/1 シーケンス実験では、一般化したモデルが妨害用の後半桁の重みを下げ、最初の 3 桁 に集中することで、暗記解と一般化解の違いが明らかになる
- 転換の中心となる圧力は損失最小化と 重み減衰(weight decay) であり、テスト損失は突然落ちたように見えても、内部重みは 2 つの解の間を比較的滑らかに移動する
- Grokking は、モデルサイズ、データサイズ、重み減衰などの ハイパーパラメータ が揃ってはじめて現れ、大きなモデルでも同じように解釈できるかは、なお未解決の問題である
Grokking が投げかける問い
- 2021 年、研究者たちは玩具課題において、小さなモデルが訓練データを正しく当てた後もしばらくはテストデータを当てられず、さらに長く学習したあとで突然 一般化 する現象を発見した
- この現象は grokking と呼ばれ、訓練データへの適合のかなり後になって一般化が現れる学習ダイナミクスを指す
- 大規模言語モデルは世界を理解しているように見える一方で、膨大な学習テキストの一部を暗記して繰り返しているだけかもしれない
- 小さなモデルから出発すると、今日の最大級モデルにはそのまま適用しにくい解釈手法についての直感を得やすい
- アプローチは、小さなモデルの学習過程を観察し、モデルが見つけた解をリバースエンジニアリングして、機械的解釈可能性 の一例を示すことである
モジュラ加算で現れた周期構造
- モジュラ加算は、grokking を観察しやすい小さな課題として使われる
- 2 つの入力数
a、b と法が与えられたとき、a + b をモジュラ演算で予測する問題である
- 例の実験では 0 から 66 までの数を使い、67 は可視化が単純すぎず複雑すぎもしない値として選ばれている
- 実験モデルは 24 個のニューロン を持つ 1 層 MLP である
- 全体の
a, b ペアを訓練データとテストデータにランダム分割する
- 訓練データはモデル重みの調整に使い、テストデータは一般的な解を学んだかを確認するためにのみ用いる
- モデルは、入力
a, b に対応する埋め込み列を選んで加算し、負の値を 0 にしたあと、出力行列の最も近い列を予測として用いる
- 訓練初期の重みはノイズが多いが、テスト精度が上がってモデルが一般化するにつれて 周期パターン が現れる
- 訓練が終わると、各ニューロンは入力数が 0 から 66 へ増える間に高い値と低い値を何度も行き来する
- ニューロンを最終的な周期周波数ごとにまとめると、このパターンはさらに明瞭になる
- この周期性は、モデルが何らかの数学的構造を学んでいることを示唆し、テスト例を解き始める時点と重なっている
0 と 1 の課題で見た暗記と一般化
- より単純な実験では、長さ 30 の 0/1 シーケンスについて、最初の 3 桁 にある 1 の個数が奇数かどうかを予測させる
- たとえば
000... で始まれば 0、010... で始まれば 1 になりうる
- 本質的には少しだけ難しい XOR 問題であり、後ろの桁は妨害用ノイズである
- 一般化したモデルは最初の 3 桁だけを使うべきである
- 訓練データを暗記するモデルは、後半の妨害用桁まで一緒に使ってしまう
- この実験でも 1 層 MLP を使い、固定された 1,200 個のシーケンス で学習する
- 最初は訓練精度だけが上がり、テスト精度はほぼランダム水準にとどまる
- その後、テスト精度が急激に上がり、一般的な解を学習する
- 暗記中のモデルは、大きな重みが多くの入力に広がった、密でノイズの多い形を示す
- 一般化が終わると、妨害用桁とつながった重みは非常に小さくなり、モデルは最初の 3 桁の入力に集中する
重み減衰が一般化解を後押しする仕組み
- 学習中、モデルは同時に 2 つの圧力を受ける
- 正解ラベルに高い確率を与えるよう 損失(loss) を下げなければならない
- 重みの大きさを低く保つよう 重み減衰 の影響も受ける
- 0/1 課題では、モデルが一般化する直前に訓練損失がわずかに増加する
- 正解確率を高めるための損失の一部を手放し、より小さな重みを持つ解へ移動するためである
- テスト損失の急落は、モデルが突然一般化へ切り替わったように見せる
- しかし訓練中の重みを見ると、その大半は暗記解と一般化解の間を 滑らかに補間 している
- 急速な一般化は、妨害用桁と結びついた最後の重みが重み減衰によって取り除かれるときに起こる
Grokking が現れる条件
- Grokking は常に現れる現象ではなく、モデルサイズ・重み減衰・データサイズなどに依存する 条件依存的 な現象である
- 重み減衰が小さすぎると、モデルは訓練データへの過剰適合から抜け出せない
- 減衰を強めると、モデルは暗記したあとに一般化する
- さらに強めると、テスト損失と訓練損失がともに下がり、モデルはすぐに一般化する
- 強すぎる減衰では、モデルは何も学べない
- 0/1 課題では、異なるハイパーパラメータで 1,000 個を超えるモデルを訓練し、学習ノイズを考慮して各ハイパーパラメータの組み合わせごとに 9 個のモデルを学習した
5 つのニューロンで作るモジュラ加算の解
- モジュラ加算は、和が 67 を超えると再び戻る 周期的な問題 である
- 入力数を円周上の点として配置すると、この周期性をモデル構造の中に直接反映できる
- 各入力値について
sin と cos の値を計算して埋め込み行列を構成する
- この出発点を持つ 1 層 MLP で一部の行列だけを学習すると、5 個のニューロン だけで完全精度の解を見つけられる
- 学習済みパラメータを見ると、ニューロンはほぼ同じ大きさに収束し、
sin・cos 成分を描くと円周上にほぼ等間隔に配置される
- 隣接するニューロンを結ぶと、
unembedding 側が埋め込み側より 2 倍の速さで円を回るパターンが現れる
- この構成は、モジュラ加算を解く 20 個のパラメータ の解を提供する
大きな 1 層 MLP の中にある同じアルゴリズム
- 最初の 3,216 パラメータのモデルは最初から訓練され、組み込みの周期性なしに始まる
- 構成した小さな解と違って、このモデルは複数の 周波数 を使う
- 離散フーリエ変換(DFT)を使うと、入力全体にわたる学習済みの周期パターンを分離できる
- 各ニューロンについて、可能な周期周波数 1 から 33 までの
sin・cos の値を得る
- ニューロンは、最も大きい
sin・cos の値を持つ周波数を基準にまとめられる
- モデルが一般化するほど、重み減衰はこの表現をより 疎 にしていく
- 最終周波数ごとにニューロンをまとめて DFT 成分を描くと、5 ニューロン構成で見られた星形が現れる
- 学習済みモデルは、構成した解と同じアルゴリズムを使っている
- 各周波数ニューロングループの出力寄与を見ると、
a + b mod 67 の計算に対応する波形を作っている
- 45,000 ステップ付近の短い停滞のあと、テスト損失が改善するとき、周波数 7 のニューロングループは星形に整列し、出力は波形により近づく
- モデルは、より大きな重みを使わずに損失を下げるため、複数の周波数を使い、強め合う干渉 を活用する
- 周波数 4、5、7、26 自体が特別なのではなく、別の訓練実行ではこのアルゴリズムの別形が学習される
まだ残る問い
- 直接
W = W_L W_R という形のモデルを訓練するだけでは、重み減衰を加えても、モジュラ演算で一般化は現れない
- 少なくとも 1 つの行列は 分解(factoring) されていなければならない
- DFT 後の一般化解は疎だが、結合された行列は大きなノルムを持つ
W と U に直接重み減衰をかけても、この課題に適した帰納バイアスは得られない
- 重み減衰は、さまざまなモデルを訓練データの暗記から遠ざけることができる
- 過剰適合を避けるほかの手法としては、dropout、より小さいモデル、数値的に不安定な最適化アルゴリズムがある
- こうしたアプローチは複雑かつ非線形に相互作用するため、どの設定が一般化を導くかを事前に予測するのは難しい
- 暗記が一般化より先に起こる理由についての一つの理論は、訓練セットを暗記する方法のほうが一般化解よりもはるかに多い可能性があるというものである
- 正則化がない、または弱い場合、統計的に暗記が先に起こる可能性が高くなる
- 重み減衰のような正則化手法は、密な解よりも疎な解のような特定の解を優先させる
- よく構造化された表現は一般化と関係している可能性があるが、必要条件でも十分条件でもない
- 対称入力を持たない一部の MLP 変種は、モジュラ加算を解く際に、より円形でない表現を学習する
- 重み減衰なしで学習した小さなモデルは、一般化を始めたあと、周期的埋め込みを持つ状態のまま再び暗記へ戻ることもある
- 一部のハイパーパラメータでは、一般化 → 暗記 → 一般化という遷移も起こりうる
より大きなモデルへつながる解釈可能性
- Grokking は小さな Transformer や MLP のアルゴリズム課題で観察され、その後、画像・テキスト・表形式データのより複雑な課題でも、特定のハイパーパラメータ範囲で見つかっている
- 複数種類の課題をこなせる最大級のモデルは、訓練中に異なる速度で複数のことを grokking している可能性がある
- Grokking が実際に起こる前に予測しようとする研究結果もある
- 一部の手法は、一般化解やデータ領域全体についての知識を必要とする
- 一部の手法は、訓練損失の分析だけを用い、より大きなモデルにも適用できる可能性がある
- 今後の一つの道筋は、より単純なモデルを反復的に使うことである
- より強い帰納バイアスと、より少ない可動部を持つ単純なモデルを訓練する
- そのモデルを使って、大きなモデルの解釈しにくい部分を説明する
- 必要であればこの過程を繰り返す
- この 機械的解釈可能性 のアプローチは、ニューラルネットワークが学習したアルゴリズムを見つけ出すパターンを識別したり自動化したりする助けになるかもしれない
1件のコメント
Hacker News の意見
人間の記憶が驚くべきなのは、機械ほどの保存容量はないものの、情報を大きく削減して保存するパターン圧縮能力があるからだと思う
そのパターンをさらに別のパターンと結び付けて圧縮し、そこから何かを取り出すようなもので、ものすごい非可逆圧縮ではあるが、目的は達成している
脳は文字どおり暗記する必要のない知識を中核要素へ積極的に蒸留し、過学習を避けて「一般化された直感と理解」を得る方向に近い
参考: [https://scientificamerican.com/article/…](https://www.scientificamerican.com/article/new-estimate-boosts-the-human-brain-s-memory-capacity-10-fold/)
https://youtu.be/hpTCZ-hO6iI
上限は技術的には「無限」だが、保存する概念の数と、概念ごとに保存できる根本的な情報量との間には、不確定性原理のような他のトレードオフ原理に似たトレードオフ関係がある
動物の脳も同じ方式なのかは分からないが、主に予測のための圧縮アルゴリズムであり、データ自体はあまり保存していないのではないかと疑っている
幾何学はこうした訓練に向いており、物理の証明にもよく役立つ
要点は、重み減衰がスパース性を誘導し、過学習した表現よりも「本物の」表現を学ぶ助けになるということだと思う
人間の脳にも、発達過程で似て見えるメカニズムであるシナプス刈り込みが広く見られる。これが重み減衰、あるいはより直接的にはニューラルネットワークの枝刈りの着想源だったのか、この分野の専門家に聞いてみたい
重み減衰が機能する理由は、正則化として適用されると、ネットワークが最小記述長(MDL)に近づき、学習中の後悔(regret)を減らすからだ。脳の刈り込みとある程度関係はあるが、脳は圧縮ではなく表現を誘導するために根本的にスパース性を使っているように見えるので、実質的には別のモチーフに近い。異なる表現の暗黙のバイアスと、それが学習済みまたは学習可能な表現に及ぼす後続の影響を考えればよい
ただし、過学習に対する最良の治療法はデータセットを大きくし、データの多様性を確保することだ。LLM はデータセットが非常に大きいので、通常は 1 エポックだけ学習する
L1 正則化のほうがはるかに多くのスパース性を生むが、性能はその分よくない
AI 側が grok という言葉を台無しにしている
本来はおおよそ「完全に、丸ごと理解する」という意味なのに、同じ語を一般化に使うのは、grokking を grok していないということだ
この現象を「過学習からの最終的な回復」と呼ぼうと提案した記事のコメントでも議論があった: https://www.lesswrong.com/posts/GpSzShaaf8po4rcmA/qapr-5-grokking-is-maybe-not-that-big-a-deal
含意としては、文字どおりにも比喩的にも「深く飲み込む」ことから、愛する者の不在の遺体を消費することまでつながる。『Stranger in A Strange Land』を強く薦めるし、1990 年ごろに出たノーカット再刊版を選ぶのがよい
直感的理解と、突然の大きな理解の増加という要素を想起させるのでかなり妥当に見えるし、これは損失で起こる変化にも似ている
記憶が正しければ、Mindscape の Raphaël Millière へのインタビューで、機械学習モデルの次元が多くなると、補間と外挿の区別は、私たちが通常推論する領域ほど明確ではなくなる、と言っていた気がする
この記事で扱っていることと似た話なのかはよく分からない
これらのチャートがどうやって作られたのか気になる
何らかのライブラリで半分くらい生成してから手作業で整えたように思えるが、生成されたアニメーション SVGが美しい
注釈、SVG とキャンバスの混在、d3 をもう少し簡潔にするための小さなライブラリもいくつかある
https://github.com/PAIR-code/ai-explorables/tree/master/source/grokking
https://1wheel.github.io/swoopy-drag/
https://github.com/gka/d3-jetpack
https://roadtolarissa.com/hot-reload/
このテーマの詳細が気になるなら、記事はコンピュータで読むのがよい。モバイルでは探索できない可視化データがある
まず、優れた例が多い良いブログ記事で、昔の distill.pub を思い出す
記事で正しく述べられているように、通常 L2 重み減衰を使うと小さな値の重みが多く生じる。よりよく汎化するモデルが欲しいなら、常に L1 重み減衰を使ってスパース性を促し、より長く学習させるほうがよいのか気になる。密な線形層の代わりにスパースなフーリエ特徴量だけを使うディープラーニングモデルのほうがうまく動くのかも気になる
長く言えば、ディープラーニングモデルは通常、入力を表現する最適な非線形基底を見つけようとする。入力が事前に知られた何らかの基底でうまく、つまりスパースに表現できるなら、RF 信号に FFT をかけるように、その基底に載せておくのはたいてい役に立つ。ただし全体としての最適基底が、どの局所最小値の基底とも異なる場合があるため、ネットワークをそちらへ押しやるコツが必要になる
対象関数がどれほど代表的なのか気になる
モデルに入力の重要な部分を学んでほしいというのはよくあることだが、ビット文字列の最初の3ビットだけを気にするというのはかなり作為的に感じる。関連するパラメータサイズが8の真理値表を480万サンプルで学習したのか、それとも自分が何か誤解しているのか分からない
単純なタスクを使う理由は、こうしたことが起きたときに内部で何が起きているのかを解釈できるようにするためだ
HTML に RSS/Atom の自動発見フィードも RSS フィードへのリンクもなかったが、あり得そうなフィード名と場所を推測して、“Explorables” の RSS フィードを見つけることができた: https://pair.withgoogle.com/explorables/rss.xml
グリッド細胞のように見える
https://en.wikipedia.org/wiki/Grid_cell
隠れ層のニューロンのヒートマップを、一方の軸を $a$、もう一方を $b$ とする 2D チャートに描けば、三角格子が出てきそうだ。私が考えているように動作しているなら、別の隠れニューロンを見ると、方向とスケールが異なるもう一つの格子が出てくるはずだ。これらをつなぎ合わせれば、67進の加算器も作れる。また、W_in-proj ニューロン間の関係と W_out-proj ニューロン間の関係が、半音円と五度圏の間の写像に似ているという直感も拭いがたい
https://upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Pitch_class_space_star.svg/220px-Pitch_class_space_star.svg.png