Понимание настройки параметра альфа в статье LORA

Вопрос или проблема

Я читал статью о LORA https://arxiv.org/pdf/2106.09685.pdf, и одна вещь, которую я не понимаю, это раздел 4.1, где обновления изменяются с помощью альфа, где альфа – это константа в r. Говорится, что альфа устанавливается на первую r, которые пробовали. Тогда, если я правильно понимаю, авторы утверждают, что это делает ненужным настраивание коэффициента обучения альфа. Я был бы очень признателен, если бы кто-то мог объяснить мне эту концепцию. Начнем с того, что я не понимаю, почему нужно масштабировать обновление веса с помощью константы. Я имею в виду, что все веса обновлений оптимизируются в процессе тонкой настройки.

Я также хотел понять, почему A инициализируется случайным образом, а B равен нулю. Будет ли это иметь значение, если будет наоборот (A равно нулю, B случайное?) Также что пойдет не так, если оба будут установлены в ноль?

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

В этом блоге говорится:

Альфа масштабирует изученные веса. Существующая литература, включая оригинальную статью LoRA, обычно советует фиксировать Альфа – часто на 16 – а не рассматривать его как настраиваемый гиперпараметр.

В литературе говорится:

[…] и альфа LoRA является коэффициентом масштабирования для матриц весов. Матрица весов масштабируется по $\frac{lora\_alpha}{lora\_rank}$, и более высокое значение альфа придает больший вес активациям LoRA. Мы выбрали 16, так как это была общепринятая практика в обзоре скриптов для обучения и выбрали соотношение 1:1, чтобы не подавлять базовую модель.

Хотя эти два отрывка были ясны, я все еще не понимаю, почему следует масштабировать обновления весов. Кроме того, я не ожидал соотношения $\frac{lora\_alpha}{lora\_rank} > 1$, но в учебнике, который я следую для применения LoRA к Whisper (модель ASR), это соотношение равно $2$, с $lora\_alpha=64$ и $lora\_rank=32$.

Я также хотел понять, почему A инициализируется случайным образом, а B равен нулю. Будет ли это иметь значение, если будет наоборот (A равно нулю, B случайное?).

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

Также, что пойдет не так, если оба будут установлены в ноль?

Инициализация их обоих в ноль может вызвать некоторые проблемы, я думаю, это та же причина, по которой мы не инициализируем модели глубокого обучения нулем. Градиентный сигнал, отправляемый от A к B, будет одинаковым (все нули), и каждый узел в A будет выглядеть одинаково для B.

Связанная ссылка
Инициализация весов перцептрона нулями

Я думаю, что lora_alpha/lora_rank – это способ регулировки того, насколько влиятельной вы хотите, чтобы была тонкая настройка. Ниже приведен фрагмент из статьи, который поможет лучше это объяснить:

h = W0x + ∆W x = W0x + BAx

Мы используем случайную гауссовскую инициализацию для A и ноль для B, так что ∆W = BA изначально равно нулю. Мы затем масштабируем ∆W x по α/r,
где α – это константа в r.

Обратите внимание на уравнение и на последнюю строку.

Итак, теперь, если для определенного lora_rank(r) мы выбираем высокое lora_alpha(α), то новое добавление от тонкой настройки будет более влиятельным по сравнению с предыдущими весами, так как наше скрытое представление на самом деле теперь
h = W0x + ∆W x = W0x + BAxα/r. Но если бы мы выбрали сравнительно низкую альфа, то мы были бы более согласованы с оригинальными предобученными весами.

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

Во время прямого прохода выход,

h, блока LoRA равен:

h=W0(x)+(α/r)BAx

где
W0 – это замороженная оригинальная матрица, r – ранг A и B, x – это вход в блок, а α/r – это коэффициент масштабирования, который контролирует степень, в которой
A и B влияют на выход.

Вышеуказанные данные взяты с этого сайта: https://www.determined.ai/blog/lora-parameters.

Таким образом, мы можем понять, что в llm при выводе мы добавляем BA в W0, но вместо прямого сложения мы назначаем определенный вес для BA. Этот вес говорит о том, насколько сильное влияние обучения (т.е. умножение B и A) мы должны учитывать. В оригинальной статье мы установили это соотношение как 2, что указывает на то, что мы сильно полагаемся на новое обучение по сравнению с оригинальным W0. Во время тонкой настройки llama3.1 для обучения и тестирования я установил это соотношение α/r как 1, что дало мне лучший результат. Таким образом, это соотношение является одним из самых важных гиперпараметров!

Также с предоставленного веб-сайта мы видим, что мы получаем лучший результат для более высокого значения α, например α=512. Также с этого веб-сайта мы также видим, что нет значительного влияния r.

Поэтому, согласно моим знаниям, вывод заключается в том, что мы должны поддерживать более высокое значение α, например 256, 512 и более низкое значение r, например 8, 16.

Ответ или решение

Вопрос о настройке параметра альфа (α) в методе LoRA (Low-Rank Adaptation) становится все более актуальным в контексте развития глубокого обучения и тонкой настройки моделей. Давайте подробнее рассмотрим этот аспект, а также другие ключевые элементы, такие как инициализация матриц A и B.

1. Параметр α: назначение и влияние

Параметр α в контексте LoRA используется для масштабирования обновлений весов, и его роль как «константы» особенно важна. Основная идея заключается в том, что α позволяет регулировать вклад, который добавляет теневое обновление весов (ΔW = BA) в общую модель (h = W0x + ΔWx). С точки зрения формулы:

[ h = W_0x + \frac{\alpha}{r}BAx ]

где:

  • ( W_0 ) — замороженная основная матрица.
  • ( r ) — ранг матриц A и B.
  • ( x ) — входные данные.

Почему масштабирование необходимо?

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

Повышение значения α обуславливает более сильное влияние обновлений, что в большинстве случаев является желательным. Например, если у нас есть α = 512 и ранг r = 32, мы получаем (\frac{\alpha}{r} = 16), что подтверждает, что обновление достаточно мощное и весомое.

2. Инициализация матриц A и B

Инициализация A случайно, а B — в ноль. Это решение объясняется тем, что при начале тренировки обновления должны быть изначально минимальными (ΔW = 0), чтобы избежать переобучения на старых данных. Если бы обе матрицы были нулевыми, то весь процесс обучения оказался бы в стагнации, так как градиенты также были бы нулевыми.

  • Если бы A было инициализировано нулем, а B случайно: это привело бы к тому, что выход модели основывался бы на случайных весах B, а обновления A были бы нулевыми, что не дало бы информации о том, как изменяется модель.

  • Если обе матрицы были бы нулевыми: модель не смогла бы учиться, так как не было бы градиентного сигнала для обновления весов.

3. Варианты настройки α и r

Как упоминалось, существует определенная практика выбора значений для α и r. Оптимальное значение α варьируется в зависимости от задачи и может доходить до 512, в то время как r может быть меньшим, например, 8 или 16. Это позволяет контролировать уровень влияния дополнений, сохраняя при этом вычислительную эффективность.

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

Оцените материал
Добавить комментарий

Капча загружается...