Стандартное отклонение инициализатора HeNormal

Aug 10, 2020 09:00

В описание API Keras об инициализаторе HeNormal сказано следующее:

It draws samples from a truncated normal distribution centered on 0 with stddev = sqrt(2 / fan_in) where fan_inis the number of input units in the weight tensor.
Откуда же взялось такое стандартное отклонение и почему было выбрано именно оно?



Ответ сверточного слоя нейронной сети вычисляется по формуле:



Где индекс 𝓁 у перменных - это номер слоя.

При этом x - это ответ предыдущего слоя, пропущенный через активационную функцию, пусть это будет ReLU:



Количество соединений слоя можно вычислить как n = k×k×c, то есть произведение длины изображения на ширину и на количество слоев.

W - это матрица размера d×n, где d - количество фильтров, а каждая строка матрицы содержит веса фильтров, b, соответственно, - bias.

Предполагается, что при инициализации параметры Wl независимы и одинаково распределены (i.i.d.), элементы xl тоже независимы и одинаково расеределены, при этом Wl и xl не зависят друг от друга. В этом случае дисперсия уl будет равна дисперсии произведения wl и xl, помноженной на nl (количество соединений слоя):



Так как выше было указано, что это дисперсия независимых случайных величин, то можно дисперсию произведения выразить в виде разности математического ожидания произведений квадратов переменных и квадрата математического ожидания произведения перменных:



Математическое ожидание величины wl равно нулю, соответственно правая половина выражения внутри скобок, равна нулю, поэтому остается:



В общем случае дисперсия для случайной величины вычисляется как разность математического ожидания квадрата этой величины и квадрата математического ожидания этой величины. То есть, для wl это будет:



но, так как выше упомянуто, что математическое ожидание величины wl равно нулю, то дисперсия wl оказывается равна математическому ожиданию квадрата случайной величины:



Подставив это значение в формулу вычисления дисперсии уl, получаем:



Провернуть замену математического ожидания квадрата xl можно только в том случае, если оно равно нулю, но, в случае использования активационной функции ReLU, это не так, потому как она представляет собой max(0, y).

Если веса инициированы так, что распределение wl-1 симметрично относительно нуля, а bl-1 = 0, тогда yl-1 будет иметь нулевое математическое ожидание и симметричное распределение относительно нуля. В этом случае математическое ожидание квадрата xl можно выразить следующим образом:



По определению при использовании ReLU все, что меньше нуля, не привнесет ничего в интеграл, поэтому выражение можно переписать как интеграл от нуля до бесконечности, убрав ноль:



yl-1 симметрично относительно нуля и предполагается, что p(yl-1) симметрично относительно нуля, поэтому можно добавить множитель 1/2 и интеграл будет от минус бесконечности до плюс бесконечности:



так как математическое ожидание yl-1 равно нулю, его можно вычесть из yl-1 без изменения значения:



что есть не что иное, как математическое ожидание этой разности:



То есть, получается, что математическое ожидание квадрата xl равно:



Теперь подставим это в формулу, вычисления дисперсии yl, полученную выше и получим значение дисперсии yl:



Для всех слоев L получаем формулу:



Выходит, что от того, какая выбрана инициализация весов, можно экспоненциально уменьшить или увеличить магнитуду входного сигнала. Для произведения в скобках оптимальным будет значение скаляра (например, единицы), то есть:



а это и приводит к Гауссовому распределению с нулевым средним и стандартным отклонением:



Kaiming He et al. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification. arXiv:1502.01852 [cs.CV]
https://en.wikipedia.org/wiki/Variance
https://www.tensorflow.org/api_docs/python/tf/keras/initializers/HeNormal

cnn, иницализатор, стандартное отклонение, keras

Previous post Next post
Up