DATA4
Автор статьи: Антон савинков
Оригинал: Prateek Joshi

Понимая Xavier initialization в глубоких нейронных сетях

Недавно, работая с глубокими нейронными сетями, я наткнулся на интересную информацию. Я начал думать о инициализации весов в сети и теории, лежащей за этим. Теперь картинка сверху ясна? Парень на картинке выше поднимает "веса", и мы думаем о "весах" сети. Так или иначе реализуя сверточную нейронную сеть, мы старается использовать все доступные знания и исследования. Множество годных вещей в глубинном обучении основаны на эврестиках! Стоит исследовать, почему мы делаем вещи определенным образом, когда это возможно. Это долгий путь в раскрытии тайн глубинного обучения и почему некоторые веди так невероятно точны. Давайте продолжим и поймем, как инициализируются веса в сети, готовы?

Xavier initialization в глубоких нейронных сетях

Почему нам нужна инициализация в первую очередь?

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

Если веса слишком маленькие, то дисперсия входного сигнала начнет уменьшаться во время прохождения каждого слоя в сети. В итоге входной сигнал упадет до действительного малого значения и будет неэффективным. А почему это проблема? Давайте посмотрим на сигмоидальную функцию
Рис. 1: Сигмоида
Подпишись на рассылку новостей о AI
Только полезные материалы о машинном обучении и искусственном интеллекте. Мы уважительно относимся к нашим читателям и рассылаем письма не чаше 1 раза в неделю!
Если мы используем ее как функцию активации, то мы видим, что она почти линейна с приближением к нулю. Это значит, что не будет никакой нелинейности. Если это так, тогда мы теряем преимущество в многослойности.

Если веса слишком большие, то дисперсия входного сигнала имеет тенденцию быстро расти с каждым слоем. В итоге она станет большой и бесполезной. Почему она станет бесполезной? Потому что, как мы можем видеть на графике выше, сигмоидальная функция полога на больших значениях. Это значит, что наша активация нейрона будет стремиться к насыщению и градиент будет приближаться к нулю.

Если мы хотим, чтобы ваша нейронная сеть работала как надо, то очень важно инициализировать сеть правильными весами. Мы должны убедиться, что веса в допустимом интервале до того, как начнем тренировать сеть. Вот где Xavier initializationвыходит на передний план.

Что действительно представляет из себя Xavier initialization?

Назначение весов сети до начала тренировки кажется случайным процессом, так? Мы не знаем ничего о данных, поэтому мы не уверены как назначить веса, которые будут работать в данной задаче. Один из хороших способов назначить веса - нормальное распределение. Очевидно, что это распределение будет иметь нулевое математическое ожидание и некоторую конечную дисперсию. Давайте рассмотрим линейный нейрон:
На каждом слое мы хотим, чтобы дисперсия оставалась одинаковой. Это позволяет нам держать сигнал от роста на большие значения или исчезновения до нуля. Другими словами, нам надо инициализировать веса так, чтобы дисперсия оставалась неизменной для x и у. Такой процесс инициализации известен как Xavier initialization.

Как выполнить
Xavier initialization?

Повторюсь, мы хотим, сохранить дисперсию после прохождения каждого слоя. Давайте рассчитаем дисперисю для у:

Давайте рассчитаем дисперсию для членов внутри скобки с правой стороны уравнения. Если рассмотреть общий вид, то:


Здесь Е() является ожиданием какой-либо величины - среднее значение. Мы предположили, что вход и веса распределены нормально вокруг нуля. Поэтому "Е()" обращается в ноль, и мы имеем:
Напомню, что "b" есть константа и имеет нулевую дисперсию, поэтому она тоже исчезает. Давайте подставляем в исходное уравнение
Теорема 3: Пусть А будет вещественной симметричной матрицей размерностью n ∗n и все собственные значения матрицы А будут различны. Тогда существует ортогональная матрица , где D - диагональная матрица, у которой диагональные элементы равны собственным значениям матрицы А.

Доказательство:

Пусть A имеет следующие собственные значения с таким, что и 1 ≤ i ≤ n.

Следовательно, матрица обратима и диагональна с диагональными вхождениями из матрицы А. Тем более, основываясь на теореме 2, ортогональное множество. Следовательно, Р - ортогональная матрица.

Имея эти теоремы, мы можем сказать, что cимметричная матрица диагонализируется матрицей ее ортонормированных собственных векторов. Ортонормированные вектора это всего лишь нормированные ортогональные вектора.

Так как все они одинаково распределены, мы можем записать следующее
Итак, если мы хотим чтобы дисперсия у была такой же как у х, то выражение " N * var(wi)" должно равняться 1. Следовательно
Вот так! Мы пришли к формулеXavier initialization. Нам надо брать веса из нормального распределения с нулевым математическим ожиданием и дисперсией равной 1/N, где N - число входных нейронов. Так это реализовано в библиотеке Caffe. В оригинале авторы берут среднее между число входных нейронов и выходных. Поэтому формула становится такой:
Причина почему они это делают заключается в сохранении сигнала на этапе обратного распространения. Но это более сложно реализовать в вычислительном смысле. Поэтому во время практической реализации, мы берем только число входных нейронов.

Читайте наши статьи:

Капсульные нейронные сети

Нейронные сети, фундаментальные принципы работы и топология

Применение речевой аналитики в бизнесе
DATA4

Сделаем будущее настоящим!
Связаться с нами
Напишите контактные данные, чтобы мы связались с вами.