• Дата публікації
    18 Лютого, 2025
  • ділитися презентацією,

У цій публікації блогу я розповім про деталі та принципи методу LoRA (низькорангова адаптація моделей великих мов), розглядаючи статтю . Основна увага в статті приділяється новій структурі, яка зменшує вартість точного налаштування моделі, одночасно підвищуючи її продуктивність. Операції точного налаштування вже деякий час відіграють важливу роль у дослідженнях обробки природної мови. Припустимо, у вас є навчена модель, і ви хочете розширити її знання. Ви можете зробити це шляхом точного налаштування, без навчання моделі з нуля.

Припустимо, модель має n параметрів після навчання, і вам потрібно її точно налаштувати. Якщо ви використовуєте метод повного тонкого налаштування, усі параметри моделі будуть оновлені. Коли ми розглядаємо моделі, які мають мільярди параметрів, оновлення всіх параметрів створить проблеми з часом і зберіганням. У статті наголошується на кращих або однакових результатах продуктивності для моделей RoBERTa, DeBERTa, GPT-2 і GPT-3 за допомогою методу LoRA.

У статті згадується, що метод LoRA заснований на дослідженнях Li et. (2018a) та Aghajanyan et al. (2020). Ці дослідження підкреслюють, що успіх надмірно параметризованих моделей насправді базується на низькій внутрішній розмірності. Це стало основою гіпотези методу LoRA.

Метод LoRA — це дослідження, яке повністю базується на факторизації рангів. У цьому методі дві послідовні матриці додаються паралельно до деяких щільних шарів у нейронних мережах, як показано на малюнку 1. Ці послідовні матриці формуються заданою конфігурацією рангу. На малюнку нижче показано, як виглядає щільний шар після додавання послідовних рангових матриць. Вхідні змінні надсилаються як через початкову вагову матрицю перед навчанням, так і через першу матрицю послідовних матриць. Потім вихідні значення обчислюються шляхом підсумовування вихідних даних цих двох паралельних матриць.

 

Ekran Resmi 2024-12-26 15.25.36.png
джерело: https://arxiv.org/abs/2106.09685

Метод LoRA

Нейронні мережі мають багато щільних шарів, які виконують множення матриць. Вагові матриці в цих шарах насправді є матрицями повного рангу (всі рядки та стовпці незалежні). Але Агаджанян та ін. у своїй статті зазначили , що попередньо навчені мовні моделі мають низьку «внутрішню розмірність». Це сформувало гіпотезу LoRA в цьому аспекті. Таким чином, гіпотеза LoRA стала такою, що моделі можуть навчатися з низьковимірними змінами вагової матриці під час адаптації до конкретного завдання.

Оновлення цієї матриці було зроблено через матриці 

Ekran_Resmi_2024_12_26_15_32_57_6efdebb733.png

відокремлені низьким рангом. Тут B — матриця dxr, A — матриця rxk, а r (ранг) набагато менший за d і k. Під час тонкого налаштування оновлення градієнта до Wo запобігають. Обидві матриці Wo та ∆W множаться на однакові вхідні значення, результати підсумовуються та формується вихід h= w0 + ∆Wx = w0 +BAx.

На початку навчання вони використовували випадкову ініціалізацію Гауса для значень матриці A та повну ініціалізацію нуля для значень матриці B. Іншими словами, BA дорівнює нулю на початку.

Застосування LoRA в трансформаторній архітектурі

Є 4 вагові матриці Wq, Wk, Wv, Wo в модулі самоуваги та 2 вагові матриці в модулі MLP в архітектурі трансформатора. Під час адаптації LoRA вони заморозили ваги в модулі MLP і застосували цей метод до ваг уваги, щоб зробити навчання простим.

Переваги   

  • Найбільші зручності, які надає LoRA, це використання пам’яті та сховища. Наприклад, у статті згадується, що для великої моделі трансформатора, навченої за допомогою Adam, використання VRAM зменшується до 2/3, якщо << r d. Це тому, що стани оптимізатора не зберігаються для заморожених параметрів.
  • Для моделі GPT-3 175B споживання VRAM зменшилося з 1.2 ТБ до 350 ГБ.
  • У сценарії, де r=4 і змінено лише ваги матриць значень і запитів, розмір контрольної точки було зменшено з 350 ГБ до 35 МБ. Це дозволило проводити навчання з меншою кількістю графічних процесорів.
  • Крім того, оскільки немає оновлення градієнта в більшості параметрів, було досягнуто 25% прискорення під час навчання GPT-3 175B з LoRA порівняно з повним процесом тонкого налаштування.

У статті також згадується, що якщо процес тонкого налаштування потрібен для іншої мови, замість LoRA слід використовувати всю модель.

Додаткові знання

Що таке ранг

Ранг — це загальна кількість лінійно незалежних стовпців або рядків матриці. Припустимо, що у нас є матриця з n стовпцями, і всі стовпці незалежні один від одного, тоді можна сказати, що ранг стовпця цієї матриці дорівнює n. Знову ж таки, якщо всі рядки матриці з n рядками незалежні один від одного, тоді можна знову сказати, що ранг рядка матриці дорівнює n.

Ранг рядка та ранг стовпця матриці мають бути однаковими. Як приклад, ми можемо подивитися на матрицю нижче.

Матриця A = [[1,2,5], [ 2, 4, 10] ]

Якщо ми уважно подивимося на матрицю, то побачимо, що 2-й рядок вдвічі перевищує 1-й рядок. Так само 2-й і 3-й стовпці матриці в 2 і 5 разів перевищують 1-й стовпець відповідно. Іншими словами, хоча в матриці є два вектори в одному рядку на основі рядків і три різні вектори в іншому рядку на основі стовпців, існує лише один унікальний вектор на основі кожного рядка та стовпця. Це означає, що ранг матриці дорівнює 1.

Щоб знайти ранг, ми перетворюємо матрицю в її ешелонну форму, а потім обчислюємо кількість рядків, які складаються з принаймні одного ненульового значення.

Що таке матриця низького рангу

У матрицях ранг може бути рівним або меншим кількості стовпців або рядків. Матриці, які мають менші лінійно незалежні рядки або стовпці, ніж поточна кількість рядків або стовпців, називаються матрицями низького рангу. Матриці, у яких усі рядки або стовпці незалежні, називаються матрицями повного рангу.

Що таке рангова факторізація/декомпозиція

Ми можемо переписати матрицю з рангом r як B=LR^T, розклавши її на матриці L та R. Тут L — матриця розмірностей mxr, тоді як R^T — матриця розмірностей rxn. Цей процес відомий як розкладання за рангом.

Важливість факторизації рангу:

Важливість процесу розкладання матриці на множники полягає в тому, що він дозволяє нам розділити матрицю на менші матриці, L та R, і зберігати їх у меншому просторі. Це означає, що ви можете зберігати B, зберігаючи її множники L та R. Це зменшує вимоги до зберігання B до (m+n)r чисел з mn чисел. Додатково варто зазначити, що після розкладання матриці на ці дві малі матриці це дозволяє виконувати багато обчислень над матрицею, навіть не створюючи ту саму матрицю знову. З цієї причини, коли маємо справу з матрицею низького рангу, розкладання на множники завжди вважається важливим першим кроком. Після розкладання на множники обчислення можна виконувати набагато швидше та з використанням менше пам'яті.

Крім того

Для отримання детальнішої інформації про матриці низького рангу ви можете прочитати блог Ітана Р. Епперлі та статтю про LoRA . Крім того, ви можете детально ознайомитися з програмами LoRA на основі коду в репозиторії microsoft/LoRA на GitHub.

Гізем АБАЛІ, MSc. / Керівник групи