Alterna · учебный материал
08.6 Прямой путь через блок
Вход складывается с результатом преобразования. Это сохраняет отдельный путь и для значений, и для производных.
Что в этом материале
- Учить поправку и сохранять прямой путь
Содержание и основные понятия
На предыдущей странице: среднее и масштаб одного вектора.
Вход складывается с результатом преобразования. Это сохраняет отдельный путь и для значений, и для производных.
Один слой создаёт промежуточные признаки для следующего. Нелинейность не позволяет свернуть всю последовательность в одну таблицу. Прямые ветви добавляют поправки к прежнему состоянию.
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Учить поправку и сохранять прямой путь
Residual блок вычисляет y=x+F(x). Shapes слагаемых должны совпадать; иначе требуется явная проекция, а не случайный broadcast. При F=0 получается identity. Это свойство конструкции, не утверждение, что начальная F обязательно мала. N07.
J
y
=
I
+
J
F
,
∇
x
L
=
(
I
+
J
F
)
T
∇
y
L
.
J_y=I+J_F,\qquad \nabla_xL=(I+J_F)^T\nabla_yL.
J
y
=
I
+
J
F
,
∇
x
L
=
(
I
+
J
F
)
T
∇
y
L
.
Пусть F(x)=g·ReLU(x), x=[−1,2], g=.5. Тогда F=[0,1], y=[−1,3], Jacobian diag(1,1.5). Без skip выход[0,1], Jacobian diag(0,.5): отрицательная координата потеряла прямую зависимость.
Эксперимент.
Отключите skip при прежней F. Затем поставьте g=−1: на положительной координате 1+F′=0. Значит, residual не гарантирует ненулевой gradient при любых weights — вклады могут компенсироваться. «Единичный путь» не означает, что общая производная всегда≥1.
Identity skip не добавляет весов. Addition стоит одну операцию на компоненту, а сохранение activations важно для training memory. Следующая глава раскрывает алгоритм, который суммирует вклады обеих ветвей:
backpropagation и mini-autograd
.
x,g=[-1,2],.5
F=[g*max(0,v) for v in x]
y=[a+b for a,b in zip(x,F)]
assert F==[0,1] and y==[-1,3]
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
Обе ветви участвуют в производной и могут компенсироваться.
Как найти влияние всех её параметров на одну общую ошибку?
Python-примеры главы 08
Академическая база →