Идея заключается в том, что вы хотите инициализировать веса таким образом, чтобы обеспечить хороший прямой и обратный поток данных через сеть. То есть, вы не хотите, чтобы активация постоянно уменьшалась или увеличивалась по мере продвижения по сети.
На этом изображении показаны активации 5-уровневого многоуровневого персептрона ReLU при 3 различных стратегиях инициализации после одного прохождения MNIST по сети.
Во всех трех случаях веса взяты из нормального распределения с нулевым центром, которое определяется его стандартным отклонением. Вы можете видеть, что если начальные веса слишком малы (стандартное отклонение мало), активации активируются, а если они слишком велики, активация взрывается. Среднее значение, которое является приблизительно правильным, можно найти, установив веса таким образом, чтобы дисперсия активаций и обновлений градиента оставалась примерно такой же, как при прохождении через сеть.
Я написал пост в блоге об инициализации веса, который более подробно описан, но основная идея заключается в следующем.
x(i)iniw(i)(i+1)ff′(s)≈1
Var(x(i+1))=niVar(x(i))Var(w(i))
Var(x(i+1))=Var(x(i))
Var(w(i))=1ni.
∂L∂x(i)jΔ(i)j
Var(Δ(i))=ni+1Var(Δ(i+1))Var(w(i)).
ni=ni+1
Var(w(i))=2ni+ni+1.
N(0,σ)σ=2ni+ni+1−−−−−√U(−a,a)a=6ni+ni+1−−−−−√Var(U(−a,a))=a2/3
tanhReLUf(s)=ReLU(s)
Var(w(i))=2ni.