Представьте, что у вас есть очень сложная языковая машина. Эта машина имеет множество внутренних деталей (называемых грузами), которые были оптимизированы для общего использования.

Теперь вы хотите немного настроить эту машину, чтобы выполнять новую конкретную задачу, например, подробно отвечать на вопросы по заданной предметной области, которая является ответвлением от основного ствола общего назначения. Но если вы попытаетесь настроить каждую часть машины отдельно, это потребует огромных усилий и будет очень медленным.

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

Фон

В моей последней статье о квантовании мы обсуждали, как низкоранговые адаптеры уменьшают барьеры для оборудования и повышают производительность за счет улучшения использования памяти.

Тем не менее, важно углубиться в специфику первоначальной статьи об адаптации низкого ранга (LoRA), чтобы получить более глубокое понимание общей концепции, которую передают авторы, которая выходит за рамки только производительности и даже за пределы LLM.

В целом, люди очень часто полагаются на точную настройку, чтобы применить одну крупномасштабную модель ко многим конкретным последующим задачам. Возможно, вы захотите применить модель Falcon с параметрами 40B к области финансов, и для этого вам нужно перейти на веб-сайт Hugging Face, взять Falcon и точно настроить ее на выбранном вами наборе финансовых данных. Проблема с этим, как указывают авторы, заключается в том, что новая модель содержит столько же параметров, сколько и исходная модель.

Говоря более математически в статье, каждая точно настроенная модель имеет набор параметров ∆Φ, размерность которых |∆Φ| равно |Ф0|. Таким образом, если предварительно обученная модель большая (например, GPT-3 с |Φ0| ≈ 175 миллиардов), хранение и развертывание множества независимых экземпляров точно настроенных моделей может быть сложной задачей, если вообще возможно.

LoRA решает эту проблему, делая следующее:

LoRA позволяет нам обучать некоторые плотные слои в нейронной сети косвенно, вместо этого оптимизируя матрицы ранговой декомпозиции изменения плотных слоев во время адаптации, сохраняя предварительно обученные веса замороженными…

Снова сказал более математически:

… приращение параметра для конкретной задачи ∆Φ = ∆Φ(Θ) дополнительно кодируется набором параметров Θ гораздо меньшего размера с |Θ| ‹‹ |Ф0|. Таким образом, задача нахождения ∆Φ превращается в оптимизацию по Θ:

Если предварительно обученная авторегрессионная языковая модель PΦ(y|x) параметризована как Φ Каждая нижестоящая задача представлена ​​обучающим набором данных пар контекст-цель: Z = {(xi , yi)}i=1,..,N , где и xi, и yi — последовательности токенов.

Этот подход и исследование имеют четыре основных последствия:

  1. Предварительно обученную модель можно использовать совместно для создания множества небольших модулей LoRA для различных задач.
  2. LoRA может повысить эффективность обучения и снизить требования к оборудованию до трех раз за счет использования адаптивных оптимизаторов, которые устраняют необходимость расчета градиентов или поддержания состояний оптимизатора для большинства параметров.
  3. Нет задержки вывода.
  4. Взаимодействие с другими техниками. Проведя тщательный анализ предыдущих исследований в этой области, авторы обнаружили, что этот подход можно интегрировать с другими адаптерами или методами квантования.

Технические детали и тесты

Ключевая техническая идея этого исследования заключается в том, что когда вы настраиваете предварительно обученную модель на новую задачу, изменения весов (представленные ∆W) имеют низкую внутреннюю размерность или «ранг» — вам не нужно обновить все веса, только небольшое подмножество.

LoRA использует это, параметризируя обновления веса ∆W с помощью матриц низкого ранга. Конкретно, они разлагают ∆W = BA, где B и A — матрицы низкого ранга, которые обучаются на последующей задаче, сохраняя исходные предварительно обученные веса W замороженными.

Мы можем разбить это более подробно на три компонента.

1. Параметризация ∆W:

  • Для каждой весовой матрицы W в модели авторы вводят две меньшие матрицы B и A, чтобы представить обновление ∆W.
  • B имеет то же количество строк, что и W, но намного меньше столбцов (ранг r).
  • A имеет r строк, как и B, и такое же количество столбцов, как W.
  • Обновление вычисляется как ∆W = BA, что имеет низкий ранг, поскольку B и A имеют ранг r.

2. Обучение:

  • Исходные веса W замораживаются, и обучаются только B и A.
  • Это означает, что градиент вычисляется только для B и A, что сокращает память и вычислительные ресурсы.
  • Прямой проход вычисляет h = Wx + ∆Wx = Wx + BAx.

3. Выбор ранга r:

  • Авторы обнаружили, что очень низкий ранг, такой как r=1 или r=2, на удивление хорошо работает для больших моделей, таких как GPT-3.
  • Это говорит о том, что внутренняя размерность, необходимая для адаптации, очень мала.
  • Они анализируют подпространства, изученные с помощью различных вариантов выбора r, и находят перекрытие верхних сингулярных векторов.

Чтобы оценить эффективность этого метода, авторы протестировали LoRA на тесте GLUE с использованием RoBERTa, DeBERTa, GPT-2 и GPT-3 с другими методами адаптера. Во всех случаях LoRA либо соответствовала, либо превышала полную тонкую настройку, даже со значительно меньшим количеством параметров. Например, авторы смогли показать 10 000-кратное снижение обучаемых параметров для GPT-3 без потери производительности.

В статье также анализируются изученные обновления низкого ранга ∆W и показано, что они усиливают определенные направления в исходной матрице весов W, которые полезны для задачи, но не подчеркиваются во время предварительного обучения.

Это говорит о том, что матрица адаптации низкого ранга потенциально усиливает важные функции для конкретных последующих задач, которые были изучены, но не подчеркнуты в общей модели предварительного обучения.

Таким образом, ограничивая обновление ∆W низким рангом, LoRA позволяет эффективно адаптировать большие предварительно обученные модели с минимальной потерей производительности. Ключевыми факторами являются параметризация ∆W, фиксирование W и обнаружение того, что очень низкий ранг (r) хорошо работает эмпирически.

Заключение

Многие люди заинтересованы в использовании LLM для выполнения определенных последующих задач, связанных с определенной областью или ситуацией. Тем не менее, полностью настроить LLM удается не всем. К счастью, LoRA предоставляет решение, которое предлагает не только эффективные вычисления, но и масштабируемый метод для приложений, предназначенных для конкретных новых последующих задач.

Подводя итог, преимущества этого метода включают в себя:

  • Легко переключаться между задачами, просто меняя местами небольшие модули LoRA.
  • Гораздо меньшее использование памяти и более быстрое обучение по сравнению с полной тонкой настройкой, поскольку нам не нужно сохранять состояние оптимизатора для исходных параметров (замороженный W).
  • Более быстрое обучение, так как нужно вычислить меньше градиентов.
  • Нет увеличения задержки вывода или вычислений по сравнению с исходной моделью.

Более того, это исследование, заслуживающее внимания, применимо не только к LLM:

Изложенные здесь принципы применимы к любым плотным слоям в моделях глубокого обучения, хотя в наших экспериментах мы фокусируемся только на определенных весовых коэффициентах в языковых моделях Transformer в качестве мотивирующего варианта использования.

Бумага ЛоРА.

Репозиторий LoRA GitHub.

Библиотека PEFT на HuggingFace для простоты использования.