2 ポイント 投稿者 GN⁺ 2023-09-07 | 1件のコメント | WhatsAppで共有
  • fast.aiはKaggle LLM Science Examモデルを微調整している際、LLMがデータセットの例を一度見ただけで記憶しているように見える損失曲線を観測した
  • 一般的なニューラルネットワークは複数のepochにわたって徐々に学習することが多いが、今回の実験ではepochの境界で訓練損失が階段状に急落し、従来の経験と異なっていた
  • Hugging Face Trainer、LoRA、全体の微調整かどうかにかかわらず似たパターンが現れ、単なるライブラリのバグとは考えにくくなった
  • 循環学習率と1cycleの実験では、訓練損失、検証損失、MAP@3の変化が概ね記憶仮説と一致し、検証損失の悪化が直ちに精度低下を意味するわけではなかった
  • 事前学習済みLLMが非常に速く学習するなら、catastrophic forgetting、データ拡張、データ混合、dropoutのような微調整戦略を見直す必要がある

一般的なニューラルネットワーク学習とは異なっていた損失曲線

  • ニューラルネットワーク分類器は、入力と正解ラベルを繰り返し見ながら出力確率を調整する
    • 学習データ全体を一度通過する過程をepochと呼ぶ
    • 損失(loss)はモデルがどれだけ間違っているかを表し、自信を持って外した予測にはより大きなペナルティを与える
  • 通常、学習初期には訓練損失が急速に下がり、その後は徐々に鈍化し、検証損失はさらにゆっくり改善する
    • 損失グラフだけでepochの始まりと終わりがはっきり見えることは一般的ではない
    • ニューラルネットワークは特定の画像を十分に覚えるまでに複数epochを要するという経験的な制約があった
  • fast.aiはKaggle LLM Science Examで科学の多肢選択問題を解くモデルを学習していた際、別のパターンを発見した
    • Radek Osmulskiが作成した大規模質問データセットで3 epoch学習した
    • 各epochの終わりで訓練損失が突然下がる階段状の低下が現れた

バグの疑いから記憶仮説へ

  • 当初は学習プロセスのバグが疑われた
    • たとえば検証セットを評価している間にもモデルが学習し続けていれば、検証直後にモデルが急に良くなったように見える可能性がある
    • まず使用していたHugging Face Trainerの問題の可能性を検討した
  • Alignment Lab AI Discordのオープンソース開発者たちも、似た損失曲線を見たことがあると答えた
    • 初期の回答者が全員Trainerを使っていたため、ライブラリのバグ仮説はもっともらしく見えた
    • その後、カスタム学習ループでも同じ曲線が現れた事例が共有された
  • LoRA特有の現象かも確認したが、全体の微調整でも同じパターンが現れた
    • LLM微調整コミュニティでは、このような損失曲線はすでにかなり一般的な現象に近かった

Kaggle実験で見られた高速な記憶パターン

  • オープンソースの仲間たちが示した解釈は、損失曲線が過学習を示しているというものだった
    • モデルが入力を1回か2回見ただけで認識できるレベルまで学習するという意味であり、最初は不可能に思えた
    • 最初のグラフでは、損失が1回目のepoch後に0.8から0.5へ、2回目のepoch後に0.5から0.2未満へ低下した
    • 2回目と3回目のepochの途中では、新たな学習がほとんど起きていないように見えた
  • この解釈が正しければ、モデルは各行を3回見ただけで学習セットをほぼ記憶したことになる
    • 各問題でモデルが受け取る信号は、正解ラベルと自分の選択の比較だけである
    • それにもかかわらず訓練損失は大きく低下した

循環学習率で見た損失の変化

  • Kaggleモデルを2 epoch学習する際、Leslie Smithの2015年論文 Cyclical Learning Rates for Training Neural Networksに基づく循環学習率スケジュールを使用した
  • 1回目のepochの曲線は一般的な学習パターンに似ていた
    • 最初の10%の間は学習率をウォームアップした
    • その後はコサインスケジュールに従って学習率を下げた
    • 学習率が十分に上がった後、訓練損失と検証損失は急速に低下し、その後は鈍化した
  • 2回目のepochではデータセットを再シャッフルしなかったため、序盤のバッチが再び低い学習率で登場した
    • これらのバッチは1回目のepochでも低い学習率でしか露出しておらず、モデルは十分に学習できていなかった
    • 最初の10%が終わる頃、1回目のepochで高い学習率で見ていたバッチが再び現れ、訓練損失が急落した
  • 同じ区間で検証損失は悪化した
    • モデルがよりよく汎化したのではなく、学習データを記憶して正解に非常に強い確信を持つようになった状態と見なせる
    • 損失関数は自信を持った誤答により大きなペナルティを与えるため、検証損失が悪化する
  • 曲線後半では訓練損失が再び悪化した
    • 妥当な学習率で訓練損失が悪化する現象は一般的ではない
    • 記憶仮説では、低い学習率で見ていたバッチをモデルが効果的に記憶できず、直前のバッチで過度に自信を持った状態が続いたためと解釈される
    • その後、モデルがより妥当な確信の水準へ再調整され、検証損失は再び低下した

1cycle実験と評価指標の違い

  • 次の実験では、3 epochにわたって1cycle trainingを使用した
    • 学習開始バッチの10%で一度だけ学習率をウォームアップした
    • 残りのバッチではコサインスケジュールで学習率を下げた
    • 前の実験のようにepochごとに別個のウォームアップと減衰を繰り返さなかった
    • LoRA rankを上げて学習速度を遅くした
  • 結果の曲線は前述の解釈と概ね一致したが、検証損失の上昇はepoch 2ではなくepoch 3で現れた
    • 前の実験では、2回目のepochで訓練損失が約0.2まで下がり、非常に強い確信を持つ予測が可能になっていた
    • 1cycle実験では、そうした確信の水準に達したのは3回目のepochであり、検証損失の上昇もその時に現れた
  • 検証損失の悪化が、実際の過学習を意味するとは限らない
    • Kaggleリーダーボードの指標は、上位3つの多肢選択予測の順位ベース精度であるMean Average Precision @ 3である
    • 1cycle学習のバッチごとの検証MAP@3は、最後のepochで検証損失が悪化したにもかかわらず改善を続けた
  • 追加ログと再現用ノートブックはJohnoのレポートで確認できる

単一の例から学習できる可能性がある理由

  • ニューラルネットワークが単一の例で入力を認識できないという根本法則は存在しない
    • 研究者や実務者は経験的に、ニューラルネットワークには多くの例が必要だと考えてきただけである
    • 確率的勾配降下法(SGD)が探索する損失曲面がでこぼこしていれば、一度に大きく移動するのは難しい
  • 損失曲面をより滑らかにする要因は知られている
  • 事前学習済みLLMは、最小損失に近い領域で非常に滑らかな損失曲面を持っている可能性がある
    • オープンソースコミュニティの多くの微調整作業は、このような領域で行われている可能性がある
    • これは2018年のULMFiT論文の前提にもつながる
  • ULMFiTの基本的なアイデアは、言語モデリングが得意なモデルは内部に豊かな抽象化と能力の階層を形成するというものだった
    • そのような階層は、少ない微調整で別の課題にも適用できる
    • 今日のLLMはULMFiTで扱われたモデルよりはるかに大規模で、より豊かな抽象化の階層を持っている可能性がある
  • 科学の多肢選択問題への微調整は、モデルの中にすでにある能力や知識を引き出して使う作業に近い可能性がある
    • 必要な重み調整はそれほど多くないかもしれない
    • 小さなランダム分類ヘッドを付けた事前学習済み言語モデルが、良い重み設定へ滑らかに移動できる位置にある可能性がある
    • Adamオプティマイザでは、一貫して滑らかな勾配が有効な動的学習率を高め、大きなステップにつながる可能性がある

微調整戦略に生じる問い

  • モデルが非常に速く学習するなら、従来の学習方法の基本前提が揺らぐ可能性がある
    • ゆっくり学習するモデルは、多様なデータを複数epochにわたって長く見ながら、汎化可能な情報を徐々に引き出せる
    • 速く学習するモデルは、見た例を即座に記憶し、別の現象を生み出す可能性がある
  • catastrophic forgettingがより顕著になる可能性がある
    • 非常にありふれた関係の例を10個見た後で、よりまれな反例を1個見ると、既存の10個の例の記憶を少し弱める代わりに、その反例を記憶することがありうる
  • data augmentationの過学習防止効果も弱まる可能性がある
    • LLMが入力情報の表現をうまく抽出するなら、paraphrasingやback-translationで混ぜても、実質的には同じ情報を受け取っているだけかもしれない
  • 緩和策の候補としてはdropoutstochastic depthがある
    • dropoutはLoRAのような微調整手法ですでに少し使われている
    • stochastic depthは、NLPで意味のある水準まで使われた例がまだないように見える
  • もう1つの方法は、学習全体を通じて豊富なデータセット混合を維持することだ
    • Llama Codeは、コード性能が向上する一方で他の能力が大きく悪化するcatastrophic forgettingを経験した
    • 当時の非コードデータの比率は10%だった
    • 50/50に近い混合であれば、既存の能力を失わずにコーディング性能を獲得できた可能性がある

1件のコメント

 
GN⁺ 2023-09-07
Hacker Newsの意見
  • この記事をHNに投稿してくれてありがとう。この記事の共著者の一人ですが、Johnoと一緒にLLMの素早い暗記という奇妙な現象を掘り下げる過程は本当に興味深かったです。
    30年間ニューラルネットワークを扱い、2017年から言語モデルのファインチューニングをしてきましたが、この挙動には非常に驚きました。他の人たちもLLMで似た現象を見ていますが、このような分析はまだ見たことがなく、見落としているものがあるかもしれません。

    • Palm-E論文(https://palm-e.github.io/)で、LLMの凍結を解除して新しい画像データだけで学習させると、予想どおり自然言語処理タスクで破滅的忘却が大きく起きる一方、学習前のLLMの規模が大きいほどその影響が大幅に小さくなる点が興味深いです。
      12Bモデルは平均-87.3%、84Bは-61.6%、562Bはわずか-3.9%の性能低下でした。何か洞察にかなり近づいている感じがして、破滅的忘却の回避は単に規模の問題なのかもしれないのか気になります。
    • 基盤モデルが何なのかが抜けているのは大きなミスだと思いますし、これをLLM一般の現象とみなすべきではないと思います。
      研究者ではありませんが、すべてのLLMが同じ構造ではないことは明らかで、似た構造でも同じ入力に対して機能的にかなり異なる振る舞いをするように進化し得ます。それなのに多くの記事は、LLMをまるで一つの構造とモデルであるかのように扱っているように見えます。
    • Jeremy、いつもあなたの仕事が好きです。天文学のほうが私の専門なので技術的に補足すると、ここで説明されているMONDの例は実は選択肢(E)が正解であるべきです。
    • Jeremy、バッチの損失を一度計算して勾配を更新した後、no_gradで同じバッチの損失を再計算すれば、モデルが1ステップでどれだけ学習したかを正確に計算できそうです。
      バッチや観測値/質問単位で、1回目の損失と2回目の損失の差をグラフにすると、興味深い結果が出るかもしれません。
    • とても興味深いです。以前Hugging Face transformersのissueでも似た話が出ていて、そのときも暗記が有力な理由だと判断しました。別の方面でも同じ結論に達しているのを見るのはうれしいです。
      https://github.com/huggingface/transformers/issues/18730
  • 人々が本当にこういう意味で「over confident」という表現を使っているのか分かりません。かなり誤解を招く表現で、ここで起きていることは過学習と呼ぶのが正しいです。
    データを点だと考えると、汎化がうまいモデルは学習データの点をかなりよく当てる最も単純な関数を作ろうとします。しかし学習を続けると、パラメータが非常に大きくなり、学習データを正確に通ろうとして関数曲線が実際のデータ範囲を大きく超えて激しく振動することがあります。
    そのため学習データには技術的にはよりよく合いますが、新しいデータには極端な出力を出す奇妙な関数になり、汎化は最悪に近くなります。ただし過学習は暗記と同じではありません。大きなモデルは小さなデータセットを過学習なしでも暗記でき、パラメータが非常に多いため学習データに合わせるのに必要な変化はごくわずかです。この場合、学習は止まりますが汎化は行われず、こうしたケースは過少決定と呼ばれます。
    出力と信頼度を一緒に出すモデルもあるので、「過信」はモデルが高い信頼度、つまり低い誤差分散を誤って予測したという意味でも使われ得ます。

    • 出力確率にargmaxを適用したニューラルネットワークを関数として見るなら、これはまったく過学習ではありません。見ていないデータ、つまり検証集合での分類精度は改善し続けています。
      ここでの核心はキャリブレーションの問題です: https://en.m.wikipedia.org/wiki/Calibration_(statistics). ニューラルネットワークの出力確率が実際に観測される確率を反映していないという意味です。確率を体系的に低く推定すれば「過小信頼」、高く推定すれば「過信」と呼びます。
      この場合、キャリブレーションが悪化して検証損失が上がっても、見ていないデータに対する分類器はなお改善され得ます。
    • 精度が良くなっているモデルに対して過学習という言葉は使いません。誤解を招くと思います。
    • 学習集合の損失は良くなり、検証集合の損失は悪くなったので、一種の過学習だと思います。ただし、検証集合の精度が悪くなる一般的な過学習とは違います。
      ここでは検証データの精度は改善し続けましたが、間違えるときに以前より高い信頼度で間違えます。たとえば以前は答えがXだと60%確信して間違えていたのに、今は依然としてXだと間違えつつも70%のようにより高い確信を示す、という具合です。だから奇妙な形の過学習であり、「過信」というより具体的な表現がよく合っているように思います。
  • LLMの専門家ではありませんが、一般的な機械学習の観点では、これはそれほど驚くことではありません。
    すでにファインチューニングサンプルにある程度の確率質量を割り当てている、数十億パラメータの生成モデルがあります。そこで、その確率質量を上げる勾配を計算し、その方向へ一歩移動します。結局、筆者はその一歩がサンプルの確率質量を大きく上げる点に驚いているわけです。
    しかし生成モデルはものすごく過剰パラメータ化されており、ファインチューニングサンプルにすでにある程度の確率質量を与えています。数十億次元のパラメータ空間の中に、比較的少ないサンプルの確率を素早く上げる方向がないとしたら、むしろそのほうが驚きだと思います。

    • 同じことを考えました。まったく驚かなかったので、だから自分が何か見落としているのかと思いました。
  • ほとんどのLLMが現在1エポックしか学習されないという事実から、すでにある程度明らかに導かれる結果ではなかったかと思います。
    1エポックしか学習しないなら、データを2回目になぞるだけでも過学習の懸念があるという意味だからです。ただし、古いデータも少なくとも4エポックまでは新しいデータと同じくらい良いとしたこの論文[0]の結果とは、やや相反しているように見えます。
    [0]: https://arxiv.org/abs/2305.16264

    • 些細な訂正ですが、公開LLMのかなりの数は少なくとも1エポックを少し超えて学習されており、通常Wikipediaのような特定のデータサブセットには複数エポック回します。
    • 1エポックだけ学習されているわけではありません。高品質データには複数エポック回します。MetaのLlamaチームも、より多く、より多くのトークンで学習すると損失が下がり続けることを示しました。
  • 関係ないかもしれないが、ChatGPT に PowerShell で Excel スプレッドシートの列フィルターの詳細をプログラムから制御するコードを書かせてみた
    試したものは全部だめで、かなり近いところまでは行ったが動かなかった。最終的に問題を直す C# コードを見つけて ChatGPT に貼り付け、読ませたうえで PowerShell で問題を直してほしいと頼んだら、解決策を理解したと言ってスクリプトを修正し、完璧に動いた
    なぜかこの挙動はかなり目の覚めるような体験だった。質問の中で、学習されていなかった資料を提供したら解決したのだ。言語学習の観点からどう可能なのかは理解できるが、LLM がそういうことをできるというのは本当にすごいと感じた

    • 興味深い逸話だ。現在の LLM について、人々はモデル内の知識検索に過度に注目し、「言語モデル」という部分を過小評価している、という共通の流れがあると思う
      こうしたものは話したり説明したりする能力が高いので、簡単に擬人化される。あまりにうまくやるので、統計工学の巨大で魔法のような成果を、取るに足らない基本ブロックのように受け止めてしまう。だがそのブロックは金でできたレンガだ
      自然言語からコードへ、テキストから音声へ、画像から画像へ、ある自然言語から別の自然言語へ、翻訳し、編集し、要約し、拡張し、外挿することこそが、これらのモデルのしていることだ。内在する「知識」は単なる文脈にすぎない
      ベクトル埋め込みは少し違うものとして見ていて、デューイ十進分類法のような意味論的な目録化の一形態であり、検索を可能にしてくれる。だが「1984年の米国大統領は誰だったか」のようなデータ検索をモデルから直接行うことには、個人的にはあまり興味がない
  • LLM が自分の学習データを補強するために使われたことがあるのか気になる
    LLM を少ない入力で学習させたあと、大量の合成入力を生成して学習データに追加したらどうなるのか気になる。一種の「夢を見る」ことのように考えている。単にノイズを増やすだけのような気もするが、LLM は自分で文脈を補強して「声に出して考える」ことで出力を改善できるのだから、学習データにも同じことができるのではないかと思う

    • ある。最近の研究のかなりの部分がLLM の出力を学習データとして使っており、非常に成功した研究方向だった
    • 実質的には RLHF がそれだ。良い出力と悪い出力が何かを示す小規模な人間選別データセットを指針にして、LLM が自分の出力だけで自己学習する方式だ
    • 興味深いことに、この結論は、小さな人間選別コーパスのほうが大きな合成データセットより効果的であり得ると見る兄弟コメントと正反対だ
    • モデルが自分で生成した同じデータで学習するなら、システムに新しい情報は追加されない。すでに正解しているものと間違っているものの両方を強化することになり、改善はないだろう
      ただし、大きなモデルで合成学習データを作り、別のより小さなモデルを学習させることはよくある。こうしてあるモデルの知識を別のモデルへ移せる
    • 次のことを自分で試せば答えが見つかる。あるモデルに従ってランダムデータを生成し、線形回帰や別の分布を当てはめ、その分布から標本を抽出して学習セットに追加してみればよい
  • タイトルが誤解を招くと感じる
    学習の文脈で単一の例から学ぶことは望ましく、暗記は望ましくないのではないか? 前者は動物の学習方式に合わせるために目標とされるもので、後者はよく起こる失敗モードだ。記事は学習ではなく、説明されていない暗記の事例を示しているように見える

  • ViT をゼロから学習させたときに似たような損失曲線を見たことがあり、ずっと気になっていたが、もっと大きな懸念があったので深掘りはしなかった
    違いは、各エポックの間に訓練損失が上がる点だ。エポック間の急落が十分に大きいため、全体としては訓練損失が下がり、検証損失も下がり続ける。モデルは最新水準にかなり近づくので、「正常」なのだろうとは思う
    この規模で畳み込みニューラルネットワークを学習させたことはないので、同じような現象がそちらでも見られるのかは分からないが、もしそういうことがあったなら誰かが言及していそうだ。だから、こうした奇妙な損失曲線は特にTransformer ベースのモデルの特徴なのかもしれないと思っている

    • 原文では LLM には強力な抽象化が必要だと言っていたが、Transformer ネットワークは基本的にそういうケースで、ゼロから学習するとそれがはっきり現れる
      モデルは長い間ほとんどどこにも進まず、完全に役立たずに見えるが、ある時点で複数の学習サイクルの後に重みが誤差面上の何らかの最小点を見つけると、突然ちゃんと仕事をし始める。Transformer が注意機構の観点から、すべての入力データに対して機能する抽象化を学んだからだ。読むときに文をざっと見渡すやり方を思い浮かべればよい。以前 HN で見た記事を思い出して説明しているので、完璧な説明ではない
    • 他の人の訓練損失曲線でも、エポック中には上がっていき、エポックの終わりで急に落ちるのを見たことがある。自分で経験したことはなく、原因はまったく分からない
    • 最初のエポック以後は、現在のデータ項目が最後に学習に使われてからの平均時間が、エポック序盤では短く、エポックが進むにつれてだんだん長くなる。その時間は現在の反復の損失と正の相関を持つはずだと思う
    • 最初のエポックでも損失が上がるなら、少し奇妙に見える
  • いまや、現在のチャット文脈のような情報をモデル重みの一部としてその場で学習または暗記させることが、計算上効率的だという意味なのか気になる
    海馬が非常に得意とするワンショット符号化は、経験を、以前に学んだ意味概念と結び付いた検索可能な記憶にしてくれる。実際、幼少期から成人へ進むにつれて、出来事に対する意味的な概念化が豊かになるほど、よりうまくなる
    LLM の出来事の暗記がこのような深い意味フレームワークによって加速されるのだとしたら、これは長いコンテキストウィンドウへの道を提供し得るのだろうか?

    • 可能かもしれないが、分からないことが多い。その場での暗記が他の情報の壊滅的忘却を伴うのか、最近の内容を暗記することと古い内容を記憶することをどう制御するのかが問題だ
    • 初心者の考えにすぎないが、アイデアは気に入っている。自分専用の変更可能なモデルのコピーが必要で、通常それは巨大だ。さらに逆伝播が必要なので計算も少し余分にかかる
      GPT-3.5/4 より小さいローカルモデルなら可能かもしれない。また、何を長期記憶に残し、何を短期記憶に置くかを決めなければならない
  • これが事実なら、LLMが生成した合成データセットよりもはるかに小さい人間が選別したデータセットの価値がずっと高くなる、という考えを裏付けるものです

    • 情報量が最も多い側が勝ちます。情報に構造があれば、それを大いに活用して合成データを生成できます。
      例として Apple Sim が挙げられます。屋内3Dモデルのリポジトリで、レンダラーを制御して複数レイヤーの情報を生成し、その後実写写真に利用できます。画像全般でこのような手法が使われるため、ベクトル空間は埋め込みにかなり自然に適合します。代数的に言えば、構造を多く追加する必要はありません。
      ドメインが代数的な性質を強く持つなら、正しい例をランダムに生成することもでき、誰にでもそうした状況を勧めたいです。
    • Google は約2年前にその結論に到達しましたが、まだ明確な成果は示せていません。上でのキーワードは選別されたです。
    • 量と品質のバランスを取る何らかの価値指標があるはずで、今のように技術の動作を中程度に理解している時期には、その指標を活用できそうです。つまり、合成データから得られる潜在的な利益があります。
      ただし、いつかは「ただ飯はない」という法則が働くと見ていますし、合成データが常に外れ値のデータ生成プロセスを気にするわけでもありません。
    • 同意しにくいです。むしろ ULMFiT 時代のAIが、人間が選別したデータの必要性をついに終わらせたと見ています。
      ChatGPT 4 はすでに、日常的なAIモデルを学習させるオラクルモデルとして使われています。本当に巨大なオラクルモデルは、ごくわずかな人間の入力を除けば、その大半を不要にするでしょう。
    • なぜ私たちはこうしたことを理論化することしかできないのでしょうか? なぜこうしたものがどのように、なぜ機能するのかを知ることができないのでしょうか?