Alterna · учебный материал

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

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

Что в этом материале

Содержание и основные понятия

На предыдущей странице: повернуть, растянуть, повернуть.
Не всегда нужно менять всю большую таблицу. Небольшое обновление можно задать двумя меньшими таблицами; это ограничивает возможные изменения.
Обновление таблицы 4×4.
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Узкие факторы ограничивают пространство обновлений
Пусть базовая матрица
W
∈
R
m
×
n
W\in\mathbb R^{m\times n}
W
∈
R
m
×
n
остаётся фиксированной. Зададим обновление двумя факторами
C
∈
R
m
×
r
,
D
∈
R
r
×
n
,
Δ
W
=
C
D
.
C\in\mathbb R^{m\times r},
\qquad D\in\mathbb R^{r\times n},
\qquad \Delta W=CD.
C
∈
R
m
×
r
,
D
∈
R
r
×
n
,
Δ
W
=
C
D
.
Каждый столбец
C
D
CD
C
D
является линейной комбинацией
r
r
r
столбцов
C
C
C
, поэтому
rank
⁡
(
Δ
W
)
≤
r
.
\operatorname{rank}(\Delta W)\le r.
rank
(
Δ
W
)
≤
r
.
Это ограничение относится к обновлению, а не обязательно к rank исходной
W
W
W
.
Forward можно выполнить без материализации полной матрицы
Для входа
x
x
x
y
=
(
W
+
C
D
)
x
=
W
x
+
C
(
D
x
)
.
y=(W+CD)x=Wx+C(Dx).
y
=
(
W
+
C
D
)
x
=
W
x
+
C
(
D
x
)
.
Скобки справа показывают вычислительный маршрут: сначала
D
D
D
сжимает
n
n
n
-мерный вход в
r
r
r
координат, затем
C
C
C
возвращает поправку в
m
m
m
-мерное пространство.
Возьмём
C
=
[
1
2
]
,
D
=
[
3
4
]
.
C=\begin{bmatrix}1\\2\end{bmatrix},
\qquad D=\begin{bmatrix}3&4\end{bmatrix}.
C
=
[
1
2
​
]
,
D
=
[
3
​
4
​
]
.
Тогда
C
D
=
[
3
4
6
8
]
,
CD=\begin{bmatrix}3&4\\6&8\end{bmatrix},
C
D
=
[
3
6
​
4
8
​
]
,
и вторая строка вдвое больше первой, поэтому rank равен 1. Для
x
=
[
1
,
−
1
]
T
x=[1,-1]^T
x
=
[
1
,
−
1
]
T
:
D
x
=
[
−
1
]
,
C
(
D
x
)
=
[
−
1
,
−
2
]
T
.
Dx=[-1],
\qquad C(Dx)=[-1,-2]^T.
D
x
=
[
−
1
]
,
C
(
D
x
)
=
[
−
1
,
−
2
]
T
.
Явное умножение
(
C
D
)
x
(CD)x
(
C
D
)
x
даёт тот же результат.
Когда факторизация действительно экономит параметры
Полное обновление содержит
m
n
mn
mn
скаляров. Факторы содержат
m
r
+
r
n
=
r
(
m
+
n
)
.
mr+rn=r(m+n).
m
r
+
r
n
=
r
(
m
+
n
)
.
Экономия есть только при
r
(
m
+
n
)
<
m
n
.
r(m+n)<mn.
r
(
m
+
n
)
<
mn
.
Для
m
=
n
=
4
m=n=4
m
=
n
=
4
: при
r
=
1
r=1
r
=
1
нужно 8 вместо 16 скаляров; при
r
=
2
r=2
r
=
2
нужно 16, и экономия исчезает. Для
m
=
n
=
4096
,
r
=
8
m=n=4096,r=8
m
=
n
=
4096
,
r
=
8
факторы содержат 65 536 значений против 16 777 216 у полной
Δ
W
\Delta W
Δ
W
, то есть в 256 раз меньше именно для выбранного обновления.
Базовая
W
W
W
при этом остаётся в памяти и участвует в каждом forward. Отдельно существуют activations, gradients факторов и optimizer state. Поэтому «в 256 раз меньше trainable values этой матрицы» нельзя сокращать до «вся модель занимает в 256 раз меньше памяти».
SVD-компрессия готовой матрицы выбирает факторы из уже существующих singular directions. LoRA обучает низкоранговое обновление рядом с замороженной pretrained matrix; это другая процедура. Малый
r
r
r
ограничивает доступные изменения и не гарантирует качество задачи.
В нижнем калькуляторе меняйте
m
,
n
,
r
m,n,r
m
,
n
,
r
, отдельно называя payload
W
W
W
, факторов и trainable state. Следующий вопрос — как вычислить направление изменения
C
,
D
C,D
C
,
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
Академическая база →

Структурная карта учебников