В этой записи блога я расскажу о деталях и принципах метода LoRA (низкоранговая адаптация больших языковых моделей), а также пройду бумага. Основное внимание в статье уделяется созданию новой структуры, которая снижает стоимость тонкой настройки модели, одновременно повышая ее производительность. Операции тонкой настройки уже некоторое время играют важную роль в исследованиях обработки естественного языка. Допустим, у вас есть обученная модель, и вы хотите расширить ее знания. Вы можете сделать это с помощью тонкой настройки, не обучая модель с нуля.
Допустим, у модели после обучения n параметров, и вам нужно ее настроить. Если вы используете метод полной настройки, все параметры модели будут обновлены. Когда мы рассматриваем модели с миллиардами параметров, обновление всех параметров создаст проблемы со временем и хранением. В статье подчеркиваются лучшие или сопоставимые результаты производительности для моделей RoBERTa, DeBERTa, GPT-2 и GPT-3 с использованием метода LoRA.
В статье упоминается, что метод LoRA вдохновлен исследованиями Ли и др. (2018a) и Агаджаняна и др. (2020). Эти исследования подчеркивают, что успех сверхпараметризованных моделей на самом деле основан на низкой внутренней размерности. Это стало точкой, которая сформировала гипотезу метода LoRA.
Метод LoRA — это исследование, полностью основанное на ранговой факторизации. В этом методе две последовательные матрицы добавляются параллельно некоторым плотным слоям в нейронных сетях, как показано на рисунке 1. Эти последовательные матрицы формируются заданной конфигурацией ранга. На рисунке ниже показано, как выглядит плотный слой после добавления последовательных ранговых матриц. Входные переменные отправляются как через исходную матрицу весов предварительной подготовки, так и через первую матрицу последовательных матриц. Затем выходные значения вычисляются путем суммирования выходов этих двух параллельных матриц.

Метод LoRA
Нейронные сети имеют много плотных слоев, которые выполняют умножение матриц. Матрицы весов в этих слоях на самом деле являются матрицами полного ранга (все строки и столбцы независимы). Но Агаджанян и др. упомянули в их газете что предварительно обученные языковые модели имеют низкую «инструментальную размерность». Это сформировало гипотезу LoRA в этом аспекте. Таким образом, гипотеза LoRA стала заключаться в том, что модели могут обучаться с низкоразмерными изменениями в весовой матрице во время адаптации к конкретной задаче.
Обновления этой матрицы были сделаны с помощью матриц

разделены низким рангом. Здесь 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 в архитектуре transformer. Во время адаптации LoRA они заморозили веса в модуле MLP и применили метод к весам внимания, чтобы сохранить простоту обучения.
Преимущества
- Наибольшие удобства, предоставляемые LoRA, — это использование памяти и хранилища. Например, в статье упоминается, что для большой модели трансформатора, обученной с помощью Adam, использование VRAM сокращается до 2/3, если << r d. Это связано с тем, что состояния оптимизатора не сохраняются для замороженных параметров.
- Для модели GPT-3 175B потребление видеопамяти снизилось с 1.2 ТБ до 350 ГБ.
- В сценарии, где r=4 и были изменены только веса матриц значений и запросов, размер контрольной точки был уменьшен с 350 ГБ до 35 МБ. Это позволило проводить обучение с меньшим количеством графических процессоров.
- Кроме того, поскольку в большинстве параметров отсутствует обновление градиента, при обучении GPT-25 3B с помощью LoRA было достигнуто ускорение на 175% по сравнению с полным процессом тонкой настройки.
В статье также упоминается, что если требуется процесс тонкой настройки для другого языка, следует использовать всю модель вместо 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 репозиторий github.
Гизем АБАЛИ, магистр наук / руководитель группы