为什么要在 0 左右选择权重和偏差的初始化?

数据挖掘 深度学习 斯坦福-nlp 随机算法
2021-09-29 01:44:50

我读到这个:

为了训练我们的神经网络,我们将每个参数 W(l)ijWij(l) 和每个 b(l)ibi(l) 初始化为接近零的一个小的随机值(比如根据 Normal(0,ϵ2)Normal(0 ,ϵ2) 一些小的 ϵϵ 分布,比如 0.01)

来自斯坦福深度学习教程 第 7 段的反向传播算法

我不明白为什么权重或偏差的初始化应该在 0 左右

2个回答

假设相当合理的数据归一化,权重的期望应该为零或接近它。因此,将所有初始权重设置为零可能是合理的,因为如果它实际上应该是负权重,那么正的初始权重将需要进一步发展,反之亦然。但是,这不起作用。如果所有的权重都相同,它们都将具有相同的误差,并且模型将不会学到任何东西——神经元之间没有不对称的来源。

相反,我们可以做的是保持权重非常接近于零,但通过将它们初始化为小的非零数字来使它们不同。这是您链接的教程中的建议。它具有与全零初始化相同的优点,即它接近“最佳猜测”期望值,但对称性也已被破坏到足以让算法工作。

这种方法有额外的问题。较小的数字不一定会更好,尤其是在神经网络很深的情况下。反向传播中计算的梯度与权重成正比;非常小的权重会导致非常小的梯度,并可能导致网络花费更长的时间来训练或永远无法完成。

另一个潜在问题是,当使用随机初始化值时,每个神经元的输出分布会随着输入的增加而变大。一个常见的附加步骤是将神经元的输出方差归一化为 1,方法是将其权重除以sqrt(d)在哪里d是神经元的输入数。得到的权重通常分布在[1d,1d]

如果将其设置为 0,它们将具有相同的错误,因此反向传播将使它们都相等;因此,您应该进行随机初始化。

为什么在 0 左右?我认为这篇文章可能会很好地回答它: