7.0. LoRA Improvements in fine-tuning
Last updated
Last updated
LoRAを使用することで、ファインチューニングに必要な計算量が大幅に削減されます。
LoRAは、モデルの小さな部分のみを変更することで、大規模モデルを効率的にファインチューニングすることを可能にします。これにより、トレーニングする必要のあるパラメータの数が減り、メモリと計算リソースが節約されます。これは以下の理由によります:
トレーニング可能なパラメータの数を削減: モデル内の全体の重み行列を更新する代わりに、LoRAは重み行列を2つの小さな行列(AとB)に分割します。これにより、トレーニングが速くなり、更新する必要のあるパラメータが少ないため、メモリも少なくて済みます。
これは、レイヤー(行列)の完全な重み更新を計算する代わりに、2つの小さな行列の積に近似するため、計算する更新が減少するからです:
2. **元のモデルの重みを変更しない**: LoRAを使用すると、元のモデルの重みをそのままにしておき、**新しい小さな行列**(AとB)だけを更新できます。これは、モデルの元の知識が保持され、必要な部分だけを調整することを意味するため、便利です。 3. **効率的なタスク特化型ファインチューニング**: モデルを**新しいタスク**に適応させたい場合、モデルの残りの部分をそのままにしておき、**小さなLoRA行列**(AとB)だけをトレーニングすればよいです。これは、モデル全体を再トレーニングするよりも**はるかに効率的**です。 4. **ストレージ効率**: ファインチューニング後、各タスクのために**新しいモデル全体**を保存する代わりに、**LoRA行列**だけを保存すればよく、これはモデル全体に比べて非常に小さいです。これにより、あまりストレージを使用せずにモデルを多くのタスクに適応させることが容易になります。
ファインチューニング中にLinearの代わりにLoraLayersを実装するために、ここに提案されたコードがあります https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01_main-chapter-code/appendix-E.ipynb: