LoRA

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: {{well|Статья написана с использованием LLM '''Claude Opus 4.8''' и проверена участником ~~~~}} {{TOCright}} '''LoRA''' (англ. ''Low...)
 
Строка 1: Строка 1:
-
{{well|Статья написана с использованием LLM '''Claude Opus 4.8''' и проверена участником [[Участник:Iaroslav Lyakhov|Iaroslav Lyakhov]] 20:12, 1 июля 2026 (MSD)}}
+
{{well|Статья написана с использованием LLM '''Claude Opus 4.8''' и проверена участником [[Участник:Iaroslav Lyakhov|Iaroslav Lyakhov]] 20:37, 5 июля 2026 (MSD)}}
{{TOCright}}
{{TOCright}}
-
'''LoRA''' (англ. ''Low-Rank Adaptation'', низкоранговая адаптация) - метод экономного [[Дообучение|дообучения]] больших [[Нейронная сеть|нейросетевых]] моделей, при котором веса предобученной модели замораживаются, а обучается лишь небольшое число дополнительных параметров в виде низкоранговых матриц. LoRA относится к семейству методов '''PEFT''' (parameter-efficient fine-tuning) и стала стандартным способом адаптации [[Большая языковая модель|больших языковых моделей]] под конкретные задачи при ограниченных ресурсах. Предложена исследователями Microsoft (Hu et al., 2021).
+
'''LoRA''' (англ. ''Low-Rank Adaptation'', низкоранговая адаптация) - метод экономного [[Дообучение|дообучения]] больших [[Нейронная сеть|нейросетевых]] моделей. При обучении веса исходной модели замораживаются, а настраивается лишь небольшое число дополнительных параметров, представленных произведением двух узких матриц низкого ранга. LoRA относится к семейству методов '''PEFT''' (parameter-efficient fine-tuning, параметрически-эффективное дообучение) и стала стандартным способом адаптации [[Большая языковая модель|больших языковых моделей]] под конкретные задачи при ограниченных ресурсах. Предложена исследователями Microsoft (Hu et al., 2021).
== Проблема ==
== Проблема ==
-
Полное дообучение современной LLM требует хранить и обновлять все её параметры (миллиарды весов), а также состояния оптимизатора - это десятки и сотни гигабайт памяти GPU. Для каждой новой задачи приходится хранить отдельную полную копию модели. Это дорого и непрактично.
+
У современной LLM миллиарды весов. Полное дообучение означает, что для каждого веса нужно хранить сам вес, его градиент и состояния оптимизатора (например, у Adam - два дополнительных числа на параметр). В сумме это десятки и сотни гигабайт памяти видеокарты. Хуже того, под каждую новую задачу приходится хранить отдельную полную копию модели. Для большинства команд это слишком дорого и неудобно.
== Идея ==
== Идея ==
-
LoRA опирается на гипотезу: '''обновление весов при дообучении имеет низкий внутренний ранг'''. Вместо того чтобы менять матрицу весов <tex>W_0 \in \mathbb{R}^{d\times k}</tex> напрямую, её приращение представляют произведением двух узких матриц:
+
LoRA опирается на наблюдение: при дообучении веса меняются «неглубоко», и '''матрица изменений имеет низкий ранг'''. Поэтому вместо того чтобы менять матрицу весов <tex>W_0 \in \mathbb{R}^{d\times k}</tex> напрямую, её приращение раскладывают в произведение двух узких матриц:
-
::<tex>W = W_0 + \Delta W = W_0 + B A, \quad A \in \mathbb{R}^{r\times k},\; B \in \mathbb{R}^{d\times r}</tex>
+
::<tex>W = W_0 + \Delta W = W_0 + B A, \qquad A \in \mathbb{R}^{r\times k},\; B \in \mathbb{R}^{d\times r}</tex>
-
где ранг <tex>r \ll \min(d,k)</tex> (часто 4-64). Исходная матрица <tex>W_0</tex> заморожена; обучаются только <tex>A</tex> и <tex>B</tex>. Число обучаемых параметров падает в тысячи раз. При запуске поправка масштабируется коэффициентом <tex>\alpha/r</tex>.
+
где ранг <tex>r \ll \min(d,k)</tex> (на практике обычно от 4 до 64). Исходная матрица <tex>W_0</tex> заморожена; обучаются только <tex>A</tex> и <tex>B</tex>, а их всего <tex>r(d+k)</tex> чисел вместо <tex>dk</tex> - в тысячи раз меньше. При применении поправка масштабируется коэффициентом <tex>\alpha/r</tex>, где <tex>\alpha</tex> задаёт «силу» адаптации.
-
При инициализации <tex>B=0</tex>, поэтому в начале обучения <tex>\Delta W = 0</tex> и модель эквивалентна исходной.
+
Важная деталь инициализации: матрица <tex>B</tex> изначально нулевая, поэтому в самом начале обучения <tex>\Delta W = 0</tex> и модель ведёт себя ровно как исходная. Обучение стартует «без вреда» и лишь постепенно отклоняет поведение в нужную сторону.
 +
 
 +
== Как это применяют ==
 +
Обычно LoRA-поправки добавляют к матрицам проекций внутри [[Механизм внимания|механизма внимания]] (чаще всего к проекциям запросов и значений), а иногда и к полносвязным слоям. Настройка сводится к выбору ранга <tex>r</tex>, коэффициента <tex>\alpha</tex> и набора слоёв, к которым применяется адаптация.
== Преимущества ==
== Преимущества ==
-
* '''Экономия памяти''' - обучаемых параметров на порядки меньше (нередко менее 1 % от общего числа), и не нужно хранить состояния оптимизатора для замороженных весов.
+
* '''Экономия памяти.''' Обучаемых параметров на порядки меньше (нередко менее 1 % от общего числа), и для замороженных весов не нужно хранить состояния оптимизатора.
-
* '''Малый размер артефакта''' - адаптер занимает мегабайты; для разных задач хранят набор маленьких адаптеров поверх одной базовой модели.
+
* '''Маленький артефакт.''' Обученный адаптер занимает мегабайты. Для десятков разных задач хранят одну большую базовую модель и набор маленьких адаптеров к ней.
-
* '''Отсутствие задержки на инференсе''' - обученную поправку <tex>BA</tex> можно сложить с <tex>W_0</tex> (merge), получив обычную матрицу без дополнительных операций.
+
* '''Нет задержки на инференсе.''' Поправку <tex>BA</tex> можно один раз сложить с <tex>W_0</tex> (операция merge) и получить обычную матрицу - тогда никаких дополнительных вычислений при работе модели не возникает.
-
* '''Горячая замена''' - адаптеры под разные задачи подключаются и отключаются на лету.
+
* '''Горячая замена.''' Адаптеры под разные задачи подключаются и отключаются «на лету», поверх общей модели.
== QLoRA и развитие ==
== QLoRA и развитие ==
-
'''QLoRA''' (2023) объединяет LoRA с 4-битным [[Квантование нейронных сетей|квантованием]] базовой модели, что позволяет дообучать модели с десятками миллиардов параметров на одном потребительском GPU. Другие развития - AdaLoRA (адаптивное распределение ранга по слоям), DoRA и др.
+
'''QLoRA''' (2023) объединяет LoRA с 4-битным [[Квантование нейронных сетей|квантованием]] базовой модели: тяжёлые замороженные веса хранятся в сжатом виде, а обучаются только LoRA-адаптеры. Это позволяет дообучать модели с десятками миллиардов параметров на одной потребительской видеокарте. Другие развития - AdaLoRA (адаптивно распределяет ранг между слоями по их важности) и DoRA (разделяет обновление на «величину» и «направление»).
 +
 
 +
== Место среди методов PEFT ==
 +
LoRA - один из представителей PEFT наряду с адаптерами (небольшие вставные слои, adapter tuning), prefix-tuning и prompt-tuning (обучаемые «псевдотокены» на входе). В отличие от [[Дистилляция моделей|дистилляции]], которая создаёт отдельную сжатую модель, LoRA ничего не сжимает, а дёшево специализирует уже имеющуюся.
-
== Связь с другими методами ==
+
== Связь с переносом обучения ==
-
LoRA - представитель PEFT наряду с адаптерами (adapter tuning), prefix-tuning и prompt-tuning. В парадигме [[Перенос обучения|переноса обучения]] она дёшево адаптирует [[Фундаментальная модель|фундаментальную модель]] под конкретную задачу: базовые веса, полученные [[Самостоятельное обучение|самостоятельным обучением]], остаются неизменными, а [[Метод стохастического градиента|градиентным спуском]] настраиваются лишь низкоранговые поправки. В отличие от [[Дистилляция моделей|дистилляции]], сжимающей модель, LoRA не уменьшает базовую модель, а дёшево её специализирует.
+
По сути LoRA - удобный инструмент [[Перенос обучения|переноса обучения]]: базовые представления, полученные [[Самостоятельное обучение|самостоятельным обучением]] на огромных данных ([[Фундаментальная модель|фундаментальная модель]]), остаются нетронутыми, а под конкретную задачу [[Метод стохастического градиента|градиентным спуском]] настраивается лишь тонкая низкоранговая надстройка.
== Ограничения ==
== Ограничения ==
-
* Качество может уступать полному дообучению на задачах, сильно отличающихся от предобучения.
+
* На задачах, сильно отличающихся от предобучения, качество может уступать полному дообучению.
-
* Нужно выбирать ранг <tex>r</tex> и слои, к которым применяется адаптация (обычно матрицы внимания).
+
* Результат чувствителен к выбору ранга, коэффициента <tex>\alpha</tex> и набора адаптируемых слоёв.
== См. также ==
== См. также ==
Строка 38: Строка 44:
* [[Дистилляция моделей]]
* [[Дистилляция моделей]]
* [[Трансформер]]
* [[Трансформер]]
-
* [[Смесь экспертов]]
+
* [[Фундаментальная модель]]
== Литература ==
== Литература ==
-
* {{статья |автор=Hu E. и др. |часть=LoRA: Low-Rank Adaptation of Large Language Models |заглавие=Proc. of ICLR |год=2022 |ссылка=https://arxiv.org/abs/2106.09685}}
+
* {{статья |автор=Hu E. и др. |заглавие=LoRA: Low-Rank Adaptation of Large Language Models |издание=Proc. of ICLR |год=2022 |ссылка=https://arxiv.org/abs/2106.09685}}
-
* {{статья |автор=Dettmers T. и др. |часть=QLoRA: Efficient Finetuning of Quantized LLMs |заглавие=Advances in Neural Information Processing Systems (NeurIPS) |год=2023 |ссылка=https://arxiv.org/abs/2305.14314}}
+
* {{статья |автор=Dettmers T. и др. |заглавие=QLoRA: Efficient Finetuning of Quantized LLMs |издание=Advances in Neural Information Processing Systems (NeurIPS) |год=2023 |ссылка=https://arxiv.org/abs/2305.14314}}
 +
* {{статья |автор=Houlsby N. и др. |заглавие=Parameter-Efficient Transfer Learning for NLP |издание=Proc. of ICML |год=2019 |ссылка=https://arxiv.org/abs/1902.00751}}
[[Категория:Машинное обучение]]
[[Категория:Машинное обучение]]
[[Категория:Нейронные сети]]
[[Категория:Нейронные сети]]

Текущая версия

Статья написана с использованием LLM Claude Opus 4.8 и проверена участником Iaroslav Lyakhov 20:37, 5 июля 2026 (MSD)


Содержание

LoRA (англ. Low-Rank Adaptation, низкоранговая адаптация) - метод экономного дообучения больших нейросетевых моделей. При обучении веса исходной модели замораживаются, а настраивается лишь небольшое число дополнительных параметров, представленных произведением двух узких матриц низкого ранга. LoRA относится к семейству методов PEFT (parameter-efficient fine-tuning, параметрически-эффективное дообучение) и стала стандартным способом адаптации больших языковых моделей под конкретные задачи при ограниченных ресурсах. Предложена исследователями Microsoft (Hu et al., 2021).

Проблема

У современной LLM миллиарды весов. Полное дообучение означает, что для каждого веса нужно хранить сам вес, его градиент и состояния оптимизатора (например, у Adam - два дополнительных числа на параметр). В сумме это десятки и сотни гигабайт памяти видеокарты. Хуже того, под каждую новую задачу приходится хранить отдельную полную копию модели. Для большинства команд это слишком дорого и неудобно.

Идея

LoRA опирается на наблюдение: при дообучении веса меняются «неглубоко», и матрица изменений имеет низкий ранг. Поэтому вместо того чтобы менять матрицу весов W_0 \in \mathbb{R}^{d\times k} напрямую, её приращение раскладывают в произведение двух узких матриц:

W = W_0 + \Delta W = W_0 + B A, \qquad A \in \mathbb{R}^{r\times k},\; B \in \mathbb{R}^{d\times r}

где ранг r \ll \min(d,k) (на практике обычно от 4 до 64). Исходная матрица W_0 заморожена; обучаются только A и B, а их всего r(d+k) чисел вместо dk - в тысячи раз меньше. При применении поправка масштабируется коэффициентом \alpha/r, где \alpha задаёт «силу» адаптации.

Важная деталь инициализации: матрица B изначально нулевая, поэтому в самом начале обучения \Delta W = 0 и модель ведёт себя ровно как исходная. Обучение стартует «без вреда» и лишь постепенно отклоняет поведение в нужную сторону.

Как это применяют

Обычно LoRA-поправки добавляют к матрицам проекций внутри механизма внимания (чаще всего к проекциям запросов и значений), а иногда и к полносвязным слоям. Настройка сводится к выбору ранга r, коэффициента \alpha и набора слоёв, к которым применяется адаптация.

Преимущества

  • Экономия памяти. Обучаемых параметров на порядки меньше (нередко менее 1 % от общего числа), и для замороженных весов не нужно хранить состояния оптимизатора.
  • Маленький артефакт. Обученный адаптер занимает мегабайты. Для десятков разных задач хранят одну большую базовую модель и набор маленьких адаптеров к ней.
  • Нет задержки на инференсе. Поправку BA можно один раз сложить с W_0 (операция merge) и получить обычную матрицу - тогда никаких дополнительных вычислений при работе модели не возникает.
  • Горячая замена. Адаптеры под разные задачи подключаются и отключаются «на лету», поверх общей модели.

QLoRA и развитие

QLoRA (2023) объединяет LoRA с 4-битным квантованием базовой модели: тяжёлые замороженные веса хранятся в сжатом виде, а обучаются только LoRA-адаптеры. Это позволяет дообучать модели с десятками миллиардов параметров на одной потребительской видеокарте. Другие развития - AdaLoRA (адаптивно распределяет ранг между слоями по их важности) и DoRA (разделяет обновление на «величину» и «направление»).

Место среди методов PEFT

LoRA - один из представителей PEFT наряду с адаптерами (небольшие вставные слои, adapter tuning), prefix-tuning и prompt-tuning (обучаемые «псевдотокены» на входе). В отличие от дистилляции, которая создаёт отдельную сжатую модель, LoRA ничего не сжимает, а дёшево специализирует уже имеющуюся.

Связь с переносом обучения

По сути LoRA - удобный инструмент переноса обучения: базовые представления, полученные самостоятельным обучением на огромных данных (фундаментальная модель), остаются нетронутыми, а под конкретную задачу градиентным спуском настраивается лишь тонкая низкоранговая надстройка.

Ограничения

  • На задачах, сильно отличающихся от предобучения, качество может уступать полному дообучению.
  • Результат чувствителен к выбору ранга, коэффициента \alpha и набора адаптируемых слоёв.

См. также

Литература

Личные инструменты