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ページの証明を完成させるのに役立ち、その後のプロセスを推測することさえできました。

推薦する

...

人工知能を活用した診断・治療の現状と戦略に関する研究

1. はじめにわが国では毎年、さまざまな医療機関における診察や治療の総回数が70億回を超えており、医...

ベクトル監視なしのベクトル画像生成アルゴリズムがCVPR 2021に選出

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

大学における人工知能への熱意を「クール」に振り返る

大学は関連専攻を開設する際に、教授委員会と学術委員会を組織し、国の人材政策、業界の人材需要、国内外の...

金融ロボットの解読:毒ではなくアシスタント

[[231414]]会計、税務、監査などの業務でロボットが人間に取って代わったらどうなるか想像してみ...

...

2021 年に注目すべき 3 つのデータ分析と AI のトレンド

組織が新型コロナウイルス感染症のパンデミックを乗り越えていく中で、データ分析と AI の ROI を...

...

ゲイツ氏は人工知能に楽観的だが、グーグルが自動運転車に大きく賭けている理由が理解できない

ビル・ゲイツ氏は、世界中の職場にパーソナルコンピュータシステムとソフトウェアをもたらすことでキャリア...

2ポインタアルゴリズムを学んでLeetCodeをプレイする

[[421659]]みなさんこんにちは。私は梁唐です。今日は、非常に古典的で非常にシンプルなアルゴリ...

アルパカファミリーモデルが集合的に進化! Tian Yuandong のチームが作成した、GPT-4 と同等の 32k コンテキスト

オープンソースのアルパカ モデル LLaMA コンテキストは、1 つの簡単な変更だけで GPT-4 ...

初心者のためのディープラーニングの10,000語レビュー

論文: ディープラーニングの最近の進歩: 概要論文アドレス: https://arxiv.org/p...

第6回ドルイドチャイナミートアップがKuaishou本部で開催されました

3月16日、KuaishouとTestin Cloud Testingが共同で主催するApache ...

...