alterna ai
ALTERNA AI / ГЛАВА 02 · 06

02.6 Исправление через узкое промежуточное пространство

На предыдущей странице: повернуть, растянуть, повернуть.

Не всегда нужно менять всю большую таблицу. Небольшое обновление можно задать двумя меньшими таблицами; это ограничивает возможные изменения.

Обновление таблицы 4×4.

Узкие факторы ограничивают пространство обновлений

Пусть базовая матрица

W∈Rm×nW\in\mathbb R^{m\times n}

остаётся фиксированной. Зададим обновление двумя факторами

C∈Rm×r,D∈Rr×n,ΔW=CD.C\in\mathbb R^{m\times r}, \qquad D\in\mathbb R^{r\times n}, \qquad \Delta W=CD.

Каждый столбец CDCD является линейной комбинацией rr столбцов CC, поэтому

rank⁡(ΔW)≤r.\operatorname{rank}(\Delta W)\le r.

Это ограничение относится к обновлению, а не обязательно к rank исходной WW.

Forward можно выполнить без материализации полной матрицы

Для входа xx

y=(W+CD)x=Wx+C(Dx).y=(W+CD)x=Wx+C(Dx).

Скобки справа показывают вычислительный маршрут: сначала DD сжимает nn-мерный вход в rr координат, затем CC возвращает поправку в mm-мерное пространство.

Возьмём

C=[12],D=[34].C=\begin{bmatrix}1\\2\end{bmatrix}, \qquad D=\begin{bmatrix}3&4\end{bmatrix}.

Тогда

CD=[3468],CD=\begin{bmatrix}3&4\\6&8\end{bmatrix},

и вторая строка вдвое больше первой, поэтому rank равен 1. Для x=[1,−1]Tx=[1,-1]^T:

Dx=[−1],C(Dx)=[−1,−2]T.Dx=[-1], \qquad C(Dx)=[-1,-2]^T.

Явное умножение (CD)x(CD)x даёт тот же результат.

Когда факторизация действительно экономит параметры

Полное обновление содержит mnmn скаляров. Факторы содержат

mr+rn=r(m+n).mr+rn=r(m+n).

Экономия есть только при

r(m+n)<mn.r(m+n)<mn.

Для m=n=4m=n=4: при r=1r=1 нужно 8 вместо 16 скаляров; при r=2r=2 нужно 16, и экономия исчезает. Для m=n=4096,r=8m=n=4096,r=8 факторы содержат 65 536 значений против 16 777 216 у полной ΔW\Delta W, то есть в 256 раз меньше именно для выбранного обновления.

Базовая WW при этом остаётся в памяти и участвует в каждом forward. Отдельно существуют activations, gradients факторов и optimizer state. Поэтому «в 256 раз меньше trainable values этой матрицы» нельзя сокращать до «вся модель занимает в 256 раз меньше памяти».

SVD-компрессия готовой матрицы выбирает факторы из уже существующих singular directions. LoRA обучает низкоранговое обновление рядом с замороженной pretrained matrix; это другая процедура. Малый rr ограничивает доступные изменения и не гарантирует качество задачи.

В нижнем калькуляторе меняйте m,n,rm,n,r, отдельно называя payload WW, факторов и trainable state. Следующий вопрос — как вычислить направление изменения C,DC,D по ошибке; для этого нужны производные и градиенты.

x = [1, -1]
hidden = 3*x[0] + 4*x[1]
update = [hidden, 2*hidden]
assert hidden == -1 and update == [-1, -2]

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

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

Как понять, что произойдёт при небольшом изменении коэффициента?

Python-примеры главы 02 Академическая база →