元のソース: 量子ビット 画像ソース:無制限のAIによって生成大規模なモデルの微調整には「フリーランチ」があり、1行のコードでパフォーマンスを少なくとも10%向上させることができます。7Bパラメータを使用したLlama 2のパフォーマンスも2倍になり、Mistralも四半期の増加が見られました。この方法は教師ありの微調整フェーズで使用されますが、RLHFモデルもその恩恵を受けることができます。来自马里兰州大学、纽约大学等机构的研究人员提出了名为NEFT(une) 微調整方法。これは、微調整された教師あり (SFT) モデルのパフォーマンスを向上させるために使用できる新しい正則化手法です。 このメソッドは HuggingFace によって TRL ライブラリに含まれており、インポートするコード行を追加することで呼び出すことができます。NEFTは操作が簡単であるだけでなく、大きなコストがかからず、著者はそれを「フリーランチ」と呼んでいます。 一部のネチズンは、このようにグアナコ(アルパカ科のモデル)に基づいてMistral-7Bを微調整しようとしましたが、パフォーマンスの向上は明らかでした。 では、NEFTuneはどのようにして1行のコードで多数の大規模モデルを「血」にかけるのでしょうか。 ## **モデルにノイズを追加する** NEFTuneのフルネームは、ノイズエンベディングファインチューニングで、「ノイズ付きエンベデッドチューニング」の略です。開発者は、オーバーフィッティングが大規模モデルのパフォーマンスを制限する主な要因であると考えているため、トレーニングフェーズ中に埋め込みレイヤーにノイズを追加する方法を採用して、オーバーフィッティングの発生を回避し、パフォーマンスを向上させます。 具体的には、トレーニングデータベース内のテキストが最初にトークン化され、埋め込みベクトルに変換されます。次に、システムはノイズベクトルをランダムに生成し、スケーラーを使用してノイズを設定された強度に調整します。スケーリングされたノイズがモデルへの入力として埋め込みベクトルに追加され、トレーニングが開始されます。トレーニングの反復ごとに、新しいノイズが生成され、埋め込みレイヤーに追加されます。torch.nnからFとして機能するインポート デフネフチューン(モデル、noise_alpha=5)デフ noised_embed(orig_embed, noise_alpha):定義 new_func(x):モデルトレーニングの場合:embed_init = orig_embed(x)dims = torch.tensor(embed_init.size(1) * embed_init.size(2))mag_norm = noise_alpha/torch.sqrt(dims)戻り値 embed_init + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm)然も無くば:orig_embed(x) を返すリターンnew_funcmodel.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha)リターンモデルこのコードでは、NEFTune関数のパラメータノイズ\_alphaはノイズ強度(係数)であり、mag\_normは実際のプロセスにおけるノイズ範囲です。NEFTはトレーニングプロセス中にモデルにノイズを追加するだけであり、推論段階ではそのようなプロセスはなく、コード内のifステートメントがこの役割を果たします。トレーニングモードでは、new\_func関数の戻り値はノイズを追加した後の埋め込みレイヤーです。このコードは、NEFTを呼び出すだけの場合は、上記の完全なコードを使用せずにTRLライブラリから直接呼び出すことができる必要性を説明するために投稿されています。次のコードは、OPT-350M モデルの微調整の例です。データセットのインポートload_datasetからtrl インポート SFTTrainer から データセット = load_dataset("imdb", split="train") トレーナー = SFTライナー("フェイスブック/オプト-350M",train_dataset=データセット、dataset_text_field="テキスト",max_seq_length=512、)トレーナー.トレイン()データセットに関しては、開発者はAlpacaやShareGPTなど、合計4つの異なるデータセットを使用して微調整しました。著者によると、これらのデータを選択した理由には、それらがより有名であること、SOTAであることなどが含まれます。さらに、ハードウェアの性能を考慮して、実験中にシングルラウンドの対話データセットが選択されました。では、NEFT方式でチューニングした後、ラージモデルはどのように機能しますか? ## **最大1倍のパフォーマンス向上** 研究チームは、主にモデルチューニングの前後に生成されたテキスト品質と対話能力をテストしました。その中国の品質は、主にChatGPTとGPT-4を使用して評価されたAplacデータセットに基づいています。参照として使用するモデルはText-Davinci-003であり、TD3を上回るトレーニング済みモデルの割合が評価指標です。リソースを節約するために、研究チームは最初にChatGPTを使用して、GPT-4を自分で評価するか呼び出すかを決定し、場合によっては手動で判断しました。結果 さまざまなトレーニングデータセットでは、Llama 2は調整後に少なくとも10%のパフォーマンス向上があり、Alpacaデータセットで直接2倍になります。 OPTとLlama 1に展開されたNEFTアプローチは、パフォーマンスの向上ももたらします。 モデルのチャット能力を評価するために使用されるタスクは、OpenLLMリードボードです。NEFT調整モデルのチャット機能も、Evol-Instructと比較してさらに改善されていることがわかりました。 著者らはまた、コストを大幅に増加させることなくテキスト品質とチャット機能を改善することが他の機能の低下につながるかどうかも評価します。結果は、NEFT法が、異なるデータセットおよびモデル上のモデルの他の機能に有意な影響を与えないことを示している。 実験中、著者らは、モデルによって生成されたテキストがトレーニングデータをコピーしないことも発見し、モデルに特定の汎化機能があることを示唆しました。これを確認するために、著者らはモデルの損失を評価し、テストデータセットの損失がトレーニングデータよりも低いことを発見し、この見解を確認した。 さらに、NEFT調整後、モデルによって生成されたテキストの質と長さが増加するだけでなく、繰り返しなくコンテンツが増加することがわかりました。テキスト品質の改善がテキストの長さの増加ではなくノイズの追加によって引き起こされたことを確認するために、研究者はアブレーション実験も実行しました。結果は、単にモデルに長いテキストを生成させるだけでは、NEFTの効果を達成できないことを示しています。 論文住所:
1行のコードで大規模モデルのパフォーマンスが10%向上、開発者:フリーランチ
元のソース: 量子ビット
大規模なモデルの微調整には「フリーランチ」があり、1行のコードでパフォーマンスを少なくとも10%向上させることができます。
7Bパラメータを使用したLlama 2のパフォーマンスも2倍になり、Mistralも四半期の増加が見られました。
この方法は教師ありの微調整フェーズで使用されますが、RLHFモデルもその恩恵を受けることができます。
これは、微調整された教師あり (SFT) モデルのパフォーマンスを向上させるために使用できる新しい正則化手法です。
NEFTは操作が簡単であるだけでなく、大きなコストがかからず、著者はそれを「フリーランチ」と呼んでいます。
モデルにノイズを追加する
NEFTuneのフルネームは、ノイズエンベディングファインチューニングで、「ノイズ付きエンベデッドチューニング」の略です。
開発者は、オーバーフィッティングが大規模モデルのパフォーマンスを制限する主な要因であると考えているため、トレーニングフェーズ中に埋め込みレイヤーにノイズを追加する方法を採用して、オーバーフィッティングの発生を回避し、パフォーマンスを向上させます。
次に、システムはノイズベクトルをランダムに生成し、スケーラーを使用してノイズを設定された強度に調整します。
スケーリングされたノイズがモデルへの入力として埋め込みベクトルに追加され、トレーニングが開始されます。
トレーニングの反復ごとに、新しいノイズが生成され、埋め込みレイヤーに追加されます。
torch.nnからFとして機能するインポート
デフネフチューン(モデル、noise_alpha=5) デフ noised_embed(orig_embed, noise_alpha): 定義 new_func(x): モデルトレーニングの場合: embed_init = orig_embed(x) dims = torch.tensor(embed_init.size(1) * embed_init.size(2)) mag_norm = noise_alpha/torch.sqrt(dims) 戻り値 embed_init + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm) 然も無くば: orig_embed(x) を返す リターンnew_func model.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha) リターンモデル
このコードでは、NEFTune関数のパラメータノイズ_alphaはノイズ強度(係数)であり、mag_normは実際のプロセスにおけるノイズ範囲です。
NEFTはトレーニングプロセス中にモデルにノイズを追加するだけであり、推論段階ではそのようなプロセスはなく、コード内のifステートメントがこの役割を果たします。
トレーニングモードでは、new_func関数の戻り値はノイズを追加した後の埋め込みレイヤーです。
このコードは、NEFTを呼び出すだけの場合は、上記の完全なコードを使用せずにTRLライブラリから直接呼び出すことができる必要性を説明するために投稿されています。
次のコードは、OPT-350M モデルの微調整の例です。
データセットのインポートload_datasetから trl インポート SFTTrainer から
データセット = load_dataset("imdb", split="train")
トレーナー = SFTライナー( "フェイスブック/オプト-350M", train_dataset=データセット、 dataset_text_field="テキスト", max_seq_length=512、 ) トレーナー.トレイン()
データセットに関しては、開発者はAlpacaやShareGPTなど、合計4つの異なるデータセットを使用して微調整しました。
著者によると、これらのデータを選択した理由には、それらがより有名であること、SOTAであることなどが含まれます。
さらに、ハードウェアの性能を考慮して、実験中にシングルラウンドの対話データセットが選択されました。
では、NEFT方式でチューニングした後、ラージモデルはどのように機能しますか?
最大1倍のパフォーマンス向上
研究チームは、主にモデルチューニングの前後に生成されたテキスト品質と対話能力をテストしました。
その中国の品質は、主にChatGPTとGPT-4を使用して評価されたAplacデータセットに基づいています。
参照として使用するモデルはText-Davinci-003であり、TD3を上回るトレーニング済みモデルの割合が評価指標です。
リソースを節約するために、研究チームは最初にChatGPTを使用して、GPT-4を自分で評価するか呼び出すかを決定し、場合によっては手動で判断しました。
結果 さまざまなトレーニングデータセットでは、Llama 2は調整後に少なくとも10%のパフォーマンス向上があり、Alpacaデータセットで直接2倍になります。
NEFT調整モデルのチャット機能も、Evol-Instructと比較してさらに改善されていることがわかりました。
結果は、NEFT法が、異なるデータセットおよびモデル上のモデルの他の機能に有意な影響を与えないことを示している。
これを確認するために、著者らはモデルの損失を評価し、テストデータセットの損失がトレーニングデータよりも低いことを発見し、この見解を確認した。
テキスト品質の改善がテキストの長さの増加ではなくノイズの追加によって引き起こされたことを確認するために、研究者はアブレーション実験も実行しました。
結果は、単にモデルに長いテキストを生成させるだけでは、NEFTの効果を達成できないことを示しています。