1行のコードで大規模モデルのパフォーマンスが10%向上、開発者は無料でランチを楽しめる

1行のコードで大規模モデルのパフォーマンスが10%向上、開発者は無料でランチを楽しめる

大規模なモデルを微調整するための「無料ランチ」ができました。たった 1 行のコードで、パフォーマンスを少なくとも 10% 向上できます。

7B パラメータを持つ Llama 2 のパフォーマンスは 2 倍になり、Mistral は 4 分の 1 増加しました。

このアプローチは教師あり微調整段階で使用されますが、RLHF モデルでもこの​​アプローチのメリットを享受できます。

メリーランド大学、ニューヨーク大学などの研究者らは、NEFT(une)と呼ばれる微調整法を提案した。

これは、微調整された教師あり学習 (SFT) モデルのパフォーマンスを向上させるために使用できる新しい正規化手法です。

このメソッドは HuggingFace によって TRL ライブラリに含まれており、インポートして 1 行のコードを追加するだけで呼び出すことができます。

NEFT は操作が簡単なだけでなく、コストも大幅に増加しないため、「タダ飯」のようだと著者は述べています。

一部のネットユーザーはこの方法を使ってグアナコ(アルパカ科の動物)をベースにしたミストラル7Bを微調整しようとしたところ、性能が大幅に向上したという。

では、NEFTune はどのようにして 1 行のコードだけで多数の大きなモデルを強化するのでしょうか?

モデルにノイズを追加する

NEFTune の正式名称は Noisy Embedding Fine Tuning で、「ノイズ埋め込み微調整」を意味します。

開発者は、オーバーフィッティングが大規模モデルのパフォーマンスを制限する主な要因であると信じており、トレーニング段階で埋め込み層にノイズを追加して、オーバーフィッティングを回避し、パフォーマンスを向上させています。

具体的には、トレーニング データベース内のテキストが最初にトークン化され、埋め込みベクトルに変換されます。

次に、ノイズ ベクトルがランダムに生成され、スケーラーを使用してノイズが設定された強度にスケーリングされます。

スケーリングされたノイズがモデルへの入力として埋め込みベクトルに追加され、トレーニングが開始されます。

トレーニングの各反復で、新しいノイズが生成され、埋め込みレイヤーに追加されます。

 from torch.nn import functional as F def NEFTune(model, noise_alpha=5) def noised_embed(orig_embed, noise_alpha): def new_func(x): if model.training: embed_init = orig_embed(x) dims = torch.tensor(embed_init.size(1) * embed_init.size(2)) mag_norm = noise_alpha/torch.sqrt(dims) return embed_init + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm) else: return orig_embed(x) return new_func model.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha) return model

このコードでは、NEFTune 関数のパラメータ noise_alpha はノイズ強度 (係数) であり、mag_norm は実際のプロセスにおけるノイズ範囲です。

NEFT は、推論フェーズではなく、トレーニング プロセス中にのみモデルにノイズを追加します。コード内の if ステートメントがこの役割を果たします。

トレーニングモードでは、new_func 関数の戻り値はノイズを追加した後の埋め込みレイヤーになります。

このコードは説明目的で投稿されています。NEFT を呼び出すだけの場合は、上記の完全なコードを使用する必要はありません。TRL ライブラリから直接呼び出すことができます。

次のコードは、OPT-350M モデルを微調整する例です。

 from datasets import load_dataset from trl import SFTTrainer dataset = load_dataset("imdb", split="train") trainer = SFTTrainer( "facebook/opt-350m", train_dataset=dataset, dataset_text_field="text", max_seq_length=512, ) trainer.train()

データセットに関しては、開発者は微調整のために Alpaca や ShareGPT を含む 4 つの異なるデータセットを使用しました。

著者は、これらのデータを選んだ理由として、比較的有名であること、SOTA になっていることなどを挙げました。

さらに、ハードウェアのパフォーマンスを考慮して、実験中は単一ラウンドの対話データセットが選択されました。

では、NEFT メソッドを使用して調整された後、大規模モデルのパフォーマンスはどのようになるのでしょうか?

パフォーマンスが最大1倍向上

研究チームは主に、モデルの調整前と調整後の生成されたテキストの品質と会話機能をテストしました。

テキストの品質は主に AplacaEval データセットに基づいており、ChatGPT と GPT-4 を使用して評価されます。

参照するモデルは Text-Davinci-003 であり、TD3 を上回る学習済みモデルの割合が評価指標となります。

研究チームはリソースを節約するため、まずChatGPTを使って自分自身を評価するかGPT-4を呼び出すかを判断し、場合によっては手動の判断も必要になるとのこと。

結果は、さまざまなトレーニング データ セットにおいて、Llama 2 は調整後に少なくとも 10% のパフォーマンス向上を示し、Alpaca データ セットでは直接 2 倍になることを示しています。

OPT および Llama 1 に拡張すると、NEFT メソッドによって一定のパフォーマンス向上ももたらされます。

OpenLLM Leadorboard のタスクは、モデルのチャット機能を評価するために使用されます。

結果は、NEFT 調整モデルのチャット機能も Evol-Instruct と比較してさらに向上していることを示しています。

著者らはまた、テキスト品質とチャット機能を向上させることで、コストが大幅に増加することなく他の機能が低下するかどうかも評価しました。

結果は、NEFT メソッドがさまざまなデータ セットやモデル上のモデルの他の機能に大きな影響を与えないことを示しています。

実験中、著者はモデルによって生成されたテキストがトレーニングデータのコピーではないことも発見し、モデルには一定の一般化能力があることを示唆しました。

これを確認するために、著者らはモデルの損失を評価し、テスト データセットの損失がトレーニング データよりも低いことを発見し、この点を確認しました。

さらに、著者らは、NEFT 調整後、モデルによって生成されたテキストの品質が向上しただけでなく、長さも増加し、追加されたコンテンツが重複していないことを発見しました。

テキスト品質の向上がテキストの長さの増加ではなくノイズの追加によるものであることを確認するために、研究者らはアブレーション実験を実施しました。

結果は、モデルに長いテキストを生成させるだけでは、NEFT と同じ結果は得られないことを示しています。

論文アドレス: https://arxiv.org/abs/2310.05914

<<: 

>>:  テレンス・タオはコパイロットに夢中です。コパイロットは1ページの証明を完成させるのに役立ち、その後のプロセスを推測することさえできました。

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

初心者向けガイド: Numpy、Keras、PyTorch を使用した単純な線形回帰

[[433966]]図 1 に示すように、さまざまな種類の機械学習技術は、さまざまなカテゴリに分類で...

なぜ人工知能は宇宙の謎を解く鍵となるのでしょうか?

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

...

...

AIは実際にチップを生成できます! GPT-4はわずか19回の対話で130nmチップを構築し、チップ設計業界におけるHDLの大きな課題を克服しました。

GPT-4 はすでに人間がチップを作るのに役立っています!ニューヨーク大学タンドン工学部の研究者た...

顔認識技術はスマート建設現場やスマートコミュニティにどのようなメリットをもたらすのでしょうか?

スマートシティ、スマートコミュニティ、スマート交通は絶えず推進され、普及しており、ユーザーの使用習慣...

機械学習の特徴選択のためのPythonツール

[[392070]]特徴選択は、データセット内で最も有用な特徴を見つけて選択するプロセスであり、機械...

AI プロジェクトの成功を測定するために使用できる KPI は何ですか?

調査会社IDCが2020年6月に発表した調査レポートによると、人工知能の取り組みの約28%が失敗して...

AI | 人工知能プロジェクトを成功させるための 8 つの重要な役割

企業が AI プロジェクトをさらに展開するにつれて、特定の役割がビジネスの成功に不可欠であることがわ...

AIと機械学習がDevOpsをどう変えるのか

人工知能と機械学習が DevOps に新たな自動化機能をもたらすにつれて、これらのテクノロジーが組織...

深度はディープニューラルネットワークに具体的に何をもたらすのでしょうか?

[[186161]]起源近年、人工知能は爆発的な成長を遂げており、ディープラーニングはその主な原動...

米国エネルギー省、AIによる科学的発見の自動化を支援するために1,600万ドルを投資

技術の複雑さが年々増すにつれ、科学的な革新と発見への扉がより多くの分野に開かれています。現在の問題は...