Alterna · учебный материал
08.3 Что хранится, а что рассчитывается
Веса являются настройками. Промежуточные числа зависят от входа, а градиенты — от ошибки; не будем смешивать эти массивы.
Что в этом материале
- Веса не умножаются на размер batch
Содержание и основные понятия
На предыдущей странице: ширина и глубина сети.
Веса являются настройками. Промежуточные числа зависят от входа, а градиенты — от ошибки; не будем смешивать эти массивы.
Один слой создаёт промежуточные признаки для следующего. Нелинейность не позволяет свернуть всю последовательность в одну таблицу. Прямые ветви добавляют поправки к прежнему состоянию.
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Веса не умножаются на размер batch
Плотный слой содержит n_in·n_out весов и n_out biases. Число активаций после него — B·n_out, но это другой объект. Gradient по матрице весов имеет ту же форму, что и сама матрица.
P
=
∑
ℓ
=
1
L
(
d
ℓ
−
1
d
ℓ
+
d
ℓ
)
,
shape
(
∇
W
ℓ
)
=
shape
(
W
ℓ
)
.
P=\sum_{\ell=1}^{L}(d_{\ell-1}d_\ell+d_\ell),\qquad
\operatorname{shape}(\nabla W_\ell)=\operatorname{shape}(W_\ell).
P
=
ℓ
=
1
∑
L
(
d
ℓ
−
1
d
ℓ
+
d
ℓ
)
,
shape
(
∇
W
ℓ
)
=
shape
(
W
ℓ
)
.
Для сети 2→3→2→1 получаем 9,8,3 параметра по слоям, итого20. При batch4 выходы слоёв содержат12,8,4 числа. Фиксированная поэлементная активация сама не добавляет обучаемых параметров.
Под капотом.
Двадцать float32-скаляров —80 байт без overhead. Gradient добавляет ещё20 чисел; Adam обычно хранит два moment state для каждого параметра. Кроме этого нужны activations и буферы. В JavaScript Number binary64, поэтому 20×8=160 байт — лишь идеализированный numeric payload, не измерение heap.
Debug.
Для X[B,d] и W[h,d] прямое XW несогласовано. Нужны транспонирование или другое объявленное соглашение. Случайный reshape не исправляет семантику и может только скрыть ошибку. Inspector содержит все матрицы, shapes и actual count, вычисленный по массивам.
dims=[2,3,2,1]
counts=[a*b+b for a,b in zip(dims,dims[1:])]
assert counts==[9,8,3] and sum(counts)==20
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
Каждый scalar parameter имеет собственную чувствительность.
С чего начинается обучение. Как этот вопрос продолжает полученный результат?
Python-примеры главы 08
Академическая база →