言語モデルのチューニング後の性能を大幅に向上させるというNeftuneの論文を読みます
まずはclaude.aiで概要を確認します
はじめに
本論文では、ファインチューニングのフォワードパス中にトレーニングデータの埋め込みベクトルにランダムノイズを加えるという技術です。
このシンプルな方法で、追加の計算やデータのオーバーヘッドなしで、ファインチューニングの結果を向上させることができます。
このNoisy Embedding Instruction Fine Tuning(NEFTune)でLLaMA-2-7Bをチューニングですると、AlpacaEvalでのパフォーマンスは29.8%から64.7%に向上します(図1)
機能のキモと応用に関する私見
🪄この手法のキモと、期待できる効果として以下のようにまとめられると思います
この時、より良い出力を得るのに追加の計算リソースを必要としていないということが重要です。
パッと思いつく応用事例
NEFTuneでは、アウトプットの文が長くなる傾向にあるので、シンプルな回答が必要な場合は向かないと思います。
過学習傾向で、回答が単調、あっさりしすぎで、面白味がない場合、もう少し丁寧に回答して欲しい場合にNEFTuneを使うと、より人間ウケがよい返答が期待されます。
簡単な使い方
実装方法は以下のようにneftune_noise_alphaを1行追加します。
from datasets import load_ dataset
from trl import SFTTrainer
dataset = load _dataset ("imdb", split="train")
trainer = SFTTrainer (
model_name,
train_dataset=dataset,
dataset_text_field="text" ,
max_seq_length=512,
neftune_noise_alpha=5,
)
trainer.train( )
2023/11/3追記
トランスフォーマー 4.35.0 がリリースされました。NEFTune はトランスフォーマーのトレーナー API に拡張されました。
TrainingArguments に `neftune_noise_alpha=xxx` を渡すだけで完了です。
方法
結果の概要
NEFTuneによるテキスト品質の向上:Table 1から、すべてのデータセットで7Bスケールにおいて平均で15.1%の増加が見られることがわかります。これは、NEFTとのトレーニングがAlpacaEvalを介して測定された会話能力と回答の質を大幅に向上させることを示しています。
Table 2から、Evol-Instructでトレーニングされた70BパラメータモデルにNEFTuneを追加すると、Win Rateが75.03%から88.81%(+13.78%)に上昇することがわかります。
💡ここで説明を追加します
主要な懸念: 論文はNEFTuneが会話能力を向上させる一方で、他の古典的なスキルを犠牲にしているのではないかという潜在的な懸念を取り上げています。
OpenLLM Leaderboardのタスクでの評価: 著者らは、モデルの知識、推論能力、真実性を評価するためにOpenLLM Leaderboardのタスクを使用しています。これは、モデルがNEFTuneを使用した後もこれらの能力を維持しているかどうかをチェックするためのものです。
グラフの結果: Figure 3のグラフは、NEFTuneを使用した場合と使用しない場合のモデルのスコアを示しています。グラフから、スコアが安定しており、NEFTuneがモデルの能力を維持していることが読み取れます。
したがって、総合的な解釈としては、NEFTuneは会話能力を向上させる一方で、他の重要なモデルの能力を犠牲にしているわけではなく、その能力を維持しているということです。このため、NEFTuneを使用しても、モデルは知識、推論、真実性などの面でのパフォーマンスを維持していると言えます。
NEFTuneとQLORAの結果の概要
NEFTuneチューニングの効果の詳細な分析、考察は以下に載せておきます
詳細は原文をご覧ください。