В описание 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/Variancehttps://www.tensorflow.org/api_docs/python/tf/keras/initializers/HeNormal