Узкие факторы ограничивают пространство обновлений
Пусть базовая матрица
остаётся фиксированной. Зададим обновление двумя факторами
Каждый столбец является линейной комбинацией столбцов , поэтому
Это ограничение относится к обновлению, а не обязательно к rank исходной .
Forward можно выполнить без материализации полной матрицы
Для входа
Скобки справа показывают вычислительный маршрут: сначала сжимает -мерный вход в координат, затем возвращает поправку в -мерное пространство.
Возьмём
Тогда
и вторая строка вдвое больше первой, поэтому rank равен 1. Для :
Явное умножение даёт тот же результат.
Когда факторизация действительно экономит параметры
Полное обновление содержит скаляров. Факторы содержат
Экономия есть только при
Для : при нужно 8 вместо 16 скаляров; при нужно 16, и экономия исчезает. Для факторы содержат 65 536 значений против 16 777 216 у полной , то есть в 256 раз меньше именно для выбранного обновления.
Базовая при этом остаётся в памяти и участвует в каждом forward. Отдельно существуют activations, gradients факторов и optimizer state. Поэтому «в 256 раз меньше trainable values этой матрицы» нельзя сокращать до «вся модель занимает в 256 раз меньше памяти».
SVD-компрессия готовой матрицы выбирает факторы из уже существующих singular directions. LoRA обучает низкоранговое обновление рядом с замороженной pretrained matrix; это другая процедура. Малый ограничивает доступные изменения и не гарантирует качество задачи.
В нижнем калькуляторе меняйте , отдельно называя payload , факторов и trainable state. Следующий вопрос — как вычислить направление изменения по ошибке; для этого нужны производные и градиенты.