LoRa - Недорогое дообучение моделей.
Идея состоит в том, чтобы заменить в модели некоторые из больших матриц меньшими для вычисления градиента. Назовем W0 весами предварительно обученной модели для конкретной матрицы слоев. После обновления градиента ΔW веса будут
W = W0 + ΔW
и, если x является входом для этого слоя, выход этого слоя будет
В . х = W0. х + ΔW. Икс
Если мы используем LLama2 с параметрами 70B, нам нужно обновлять все параметры для каждого обратного прохода: очень затратно в вычислительном отношении! Вместо этого с LoRA мы вставляем рядом с каждой матрицей слоев предварительно обученной модели 2 матрицы A и B, так что обновление аппроксимируется разложением более низкого ранга:
ΔВ ~ В . А
Хитрость заключается в том, что если ΔW имеет размеры (R, C), мы можем создать B с размерами (R, r) и A с размерами (r, C), так что r << R, C. Например, если R = 10K, C = 20K и r = 4, тогда
ΔW имеет R x C = 10K x 20K = 200M элементов
B имеет R x r = 10K x 4 = 40K элементов
и A имеет r x C = 20K x 4 = 80K элементов
Следовательно, A и B вместе содержат 120 тыс. элементов, что в 1666 раз меньше элементов, чем ΔW. При точной настройке мы обновляем веса только тех вновь вставленных матриц. Матрицы градиента намного меньше и поэтому требуют гораздо меньше памяти графического процессора. Поскольку предварительно обученные веса заморожены, нам не нужно вычислять градиенты для подавляющего большинства параметров.
Идея состоит в том, чтобы заменить в модели некоторые из больших матриц меньшими для вычисления градиента. Назовем W0 весами предварительно обученной модели для конкретной матрицы слоев. После обновления градиента ΔW веса будут
W = W0 + ΔW
и, если x является входом для этого слоя, выход этого слоя будет
В . х = W0. х + ΔW. Икс
Если мы используем LLama2 с параметрами 70B, нам нужно обновлять все параметры для каждого обратного прохода: очень затратно в вычислительном отношении! Вместо этого с LoRA мы вставляем рядом с каждой матрицей слоев предварительно обученной модели 2 матрицы A и B, так что обновление аппроксимируется разложением более низкого ранга:
ΔВ ~ В . А
Хитрость заключается в том, что если ΔW имеет размеры (R, C), мы можем создать B с размерами (R, r) и A с размерами (r, C), так что r << R, C. Например, если R = 10K, C = 20K и r = 4, тогда
ΔW имеет R x C = 10K x 20K = 200M элементов
B имеет R x r = 10K x 4 = 40K элементов
и A имеет r x C = 20K x 4 = 80K элементов
Следовательно, A и B вместе содержат 120 тыс. элементов, что в 1666 раз меньше элементов, чем ΔW. При точной настройке мы обновляем веса только тех вновь вставленных матриц. Матрицы градиента намного меньше и поэтому требуют гораздо меньше памяти графического процессора. Поскольку предварительно обученные веса заморожены, нам не нужно вычислять градиенты для подавляющего большинства параметров.