Математика глубокого обучения
Инициализация и residual
Откуда берутся Xavier и He, почему residual меняет умножение на сложение
Одна рекурсия, из которой всё следует
Инициализацию обычно запоминают как таблицу формул. На самом деле есть одно утверждение, а формулы — это его решения относительно .
Это прямое следствие блока 3, урок 060: , слагаемые независимы и
центрированы, дисперсии складываются, а дисперсия произведения независимых центрированных
величин равна произведению дисперсий. Ключевая величина здесь —
| измеренная | предсказанная | |
|---|---|---|
Введём коэффициент усиления слоя
тогда при единичной дисперсии на входе. Всё остальное в этом уроке — про то, что бывает при .
Xavier и He — это решения уравнения
Требование одно: . Отсюда сразу , то есть — это и есть Xavier, и формулу не нужно запоминать, её можно вывести за строчку.
Дальше поправка на нелинейность. ReLU обнуляет половину симметричного распределения, поэтому
— второй момент делится на два. Проверено: при измеренное против теоретических . Значит с ReLU усиление равно , и уравнение даёт
это He. Вся разница между двумя схемами — та самая двойка от ReLU, и больше ничего.
Отдельно стоит заметить: ReLU делит на два второй момент, но не дисперсию. Среднее равно (измерено ), поэтому , а не . Формулы инициализации выведены для второго момента — то есть предполагают центрированность, которой после ReLU уже нет. Это одна из причин, по которой в сети с нормализацией точность формулы перестаёт быть критичной.
Что бывает при
Поставьте , включите ReLU и пройдитесь по схемам. Смотрите на два числа: усиление и итоговый масштаб.
слой ст. откл. активаций
- σ веса
- 0.01
- усиление g
- 0.013
- итоговое ст. откл.
- 1.93e-23
Сигнал исчез: к последнему слою от него не осталось ничего, и градиент назад не пройдёт.
Три наблюдения, которые стоит проверить в виджете руками:
- Ошибка в усилении накапливается геометрически. Отклонение на десять процентов выглядит безобидным, но , а . Глубина превращает малую погрешность в катастрофу.
- Xavier с ReLU — не «чуть хуже», а сломано на глубине. означает деление масштаба на каждый слой: через сорок восемь слоёв остаётся .
- Тот же множитель действует и назад. Обратный проход умножает на , поэтому при вместе с активациями исчезает или расходится и градиент. Отсюда и требование « в обе стороны», из-за которого в Xavier иногда берут — компромисс между двумя условиями, которые одновременно выполнимы только при .
Residual меняет умножение на сложение
Вот в чём главное. Без residual глубина входит в показатель:
С residual-связью и pre-norm ветвь читает нормированную копию потока, поэтому её вклад равен независимо от того, что в потоке уже накопилось:
Глубина переехала из показателя в множитель. Это и есть причина, по которой residual-сети обучаются на глубинах, где обычный стек не обучается вовсе, — не «градиент течёт лучше» в переносном смысле, а буквально другая асимптотика.
| при | при | |
|---|---|---|
Обратите внимание, что при и обычный стек ведёт себя лучше. Разница появляется на глубине, и растёт она не постепенно, а экспоненциально.
Остаточный рост никуда не делся: стандартное отклонение потока растёт как — при , при . Это уже не проблема выживания сигнала, а проблема масштаба: последний слой видит вход в десять раз крупнее, чем первый.
Множитель
Отсюда — приём, который выглядит произвольным, а на самом деле решает уравнение. Пусть в сети residual-ветвей (внимание и MLP в каждом из блоков), и веса выходной проекции каждой ветви поделены на . Тогда вклад одной ветви равен , и
при любой глубине. Проверьте: , , — везде ровно двойка. Именно так сделано в GPT-2 и почти во всём, что после него, и теперь понятно, почему в знаменателе стоит число ветвей, а не число слоёв и не что-то ещё.
В виджете это последняя схема. В обычном стеке она даёт затухание — множитель осмыслен только там, где вклады складываются.
Что стоит запомнить
- Инициализация — не таблица формул, а уравнение ; Xavier и He суть два его решения, отличающиеся двойкой от ReLU.
- В сети с нормализацией точность инициализации менее критична: нормировка возвращает масштаб к единице после каждого слоя. Но первый прямой проход происходит до первого обновления, и стартовать с всё равно нельзя.
- Residual важен не тем, что «добавляет путь», а тем, что переводит глубину из показателя степени в множитель. Всё остальное — следствия.
Источники
- Glorot, Bengio — Understanding the Difficulty of Training Deep Feedforward Networks — Xavier-инициализация и дисперсионный аргумент
- He и др. — Delving Deep into Rectifiers — Множитель 2 для ReLU
- He и др. — Deep Residual Learning for Image Recognition — Residual-связи
Проверки
0 из 2Усиление, глубина и residual
Отметьте все верные утверждения об инициализации и residual-связях.
Сигнал через глубокий стек
Реализуйте
propagate(fan_in, weight_sd, depth, relu)— верните[gain, plain_sd, residual_sd, safe_sd]. Дисперсия входа единичная.gain— усиление одного слоя, , умноженное на , еслиreluистинно (ReLU делит второй момент на два);plain_sd— стандартное отклонение активаций послеdepthслоёв обычного стека. Дисперсия умножается на каждый слой, то есть равна ;residual_sd— то же для residual-стека с pre-norm: каждая ветвь читает нормированную копию потока, поэтому её вклад равен независимо от накопленного, и дисперсия равна ;safe_sd— то , при котором было бы ровно единицей. Это уравнение решается в одну строчку, и его решения — Xavier и He.
Проверить себя можно так: при
weight_sdравномsafe_sdпервое и второе числа обязаны равняться единице при любой глубине.Загрузка редактора…
Ctrl/⌘ + Enter