50
правок
Изменения
код
Этот способ инициализации хорошо подойдет для симметричных относительно нуля функций активации (гиперболический тангенс, сигмоид), для ReLU<ref>[https://en.wikipedia.org/wiki/Rectifier_(neural_networks) ReLU, Wikipedia]</ref> данный способ не подходит.
====Пример на языке Python с библиотекой NumPy==== <font color=darkgreen># example of the normalized xavier weight initialization</font> from math import sqrt from numpy import mean from numpy.random import rand <font color=darkgreen># number of nodes in the previous layer</font> n = 10 <font color=darkgreen># number of nodes in the next layer</font> m = 20 <font color=darkgreen># calculate the range for the weights</font> lower, upper = -(sqrt(6.0) / sqrt(n + m)), (sqrt(6.0) / sqrt(n + m)) <font color=darkgreen># generate random numbers</font> numbers = rand(1000) <font color=darkgreen># scale to the desired range</font> scaled = lower + numbers * (upper - lower) ===Метод инициализации He<ref>[https://www.sciencedirectarxiv.comorg/sciencepdf/article/abs/pii/S0096300321008067 A weight initialization based 1502.01852.pdf Delving deep into rectifiers: Surpassing human-level performance on the linear product structure for neural networksImageNet classification ]</ref>===
Поскольку ReLU несимметричная функция $f(x) = max(0, x)$, мы уже не можем утверждать, что среднее значение входных данных в каждом преобразовании будет нулевым:
Для нормального распределения $\mathcal N$ это будет:
*<tex>w_i \sim \mathcal N(0,\frac{2}{n_{in}})</tex>
====Пример на языке Python с библиотекой NumPy====
<font color=darkgreen># example of the he weight initialization</font>
from math import sqrt
from numpy.random import randn
<font color=darkgreen># number of nodes in the previous layer</font>
n = 10
<font color=darkgreen># calculate the range for the weights</font>
std = sqrt(2.0 / n)
<font color=darkgreen># generate random numbers</font>
numbers = randn(1000)
<font color=darkgreen># scale to the desired range</font>
scaled = numbers * std
==См.также==