7.0. LoRA Improvements in fine-tuning
Last updated
Last updated
Використання LoRA значно зменшує обчислення, необхідні для додаткового налаштування вже навчених моделей.
LoRA робить можливим ефективне додаткове налаштування великих моделей, змінюючи лише невелику частину моделі. Це зменшує кількість параметрів, які потрібно навчати, заощаджуючи пам'ять та обчислювальні ресурси. Це відбувається тому, що:
Зменшує кількість навчальних параметрів: Замість оновлення всієї матриці ваг у моделі, LoRA ділить матрицю ваг на дві менші матриці (названі A та B). Це робить навчання швидшим і вимагає менше пам'яті, оскільки потрібно оновити менше параметрів.
Це відбувається тому, що замість обчислення повного оновлення ваги шару (матриці), воно апроксимує його до добутку 2 менших матриць, зменшуючи оновлення для обчислення:\
2. **Зберігає оригінальні ваги моделі незмінними**: LoRA дозволяє зберігати оригінальні ваги моделі такими ж, і лише оновлює **нові маленькі матриці** (A та B). Це корисно, оскільки означає, що оригінальні знання моделі зберігаються, і ви лише налаштовуєте те, що необхідно. 3. **Ефективне специфічне налаштування завдань**: Коли ви хочете адаптувати модель до **нового завдання**, ви можете просто навчати **маленькі матриці LoRA** (A та B), залишаючи решту моделі без змін. Це **набагато ефективніше**, ніж повторне навчання всієї моделі. 4. **Ефективність зберігання**: Після додаткового налаштування, замість збереження **цілковито нової моделі** для кожного завдання, вам потрібно зберігати лише **матриці LoRA**, які є дуже маленькими в порівнянні з усією моделлю. Це полегшує адаптацію моделі до багатьох завдань без використання занадто багато пам'яті.
Щоб реалізувати LoraLayers замість лінійних під час додаткового налаштування, тут пропонується цей код https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01_main-chapter-code/appendix-E.ipynb: