我正在尝试从头开始构建神经网络。在所有 AI 文献中,一致认为权重应该初始化为随机数,以便网络更快地收敛。
但是为什么神经网络的初始权重会被初始化为随机数呢?
我在某处读到,这样做是为了“打破对称性”,这使得神经网络学习得更快。打破对称性如何让它学得更快?
将权重初始化为 0 不是更好的主意吗?这样权重就能够更快地找到它们的值(无论是正值还是负值)?
除了希望它们在初始化时接近最佳值之外,在随机化权重背后是否还有其他一些基本理念?
我正在尝试从头开始构建神经网络。在所有 AI 文献中,一致认为权重应该初始化为随机数,以便网络更快地收敛。
但是为什么神经网络的初始权重会被初始化为随机数呢?
我在某处读到,这样做是为了“打破对称性”,这使得神经网络学习得更快。打破对称性如何让它学得更快?
将权重初始化为 0 不是更好的主意吗?这样权重就能够更快地找到它们的值(无论是正值还是负值)?
除了希望它们在初始化时接近最佳值之外,在随机化权重背后是否还有其他一些基本理念?
打破对称性在这里是必不可少的,而不是出于性能的原因。想象一下多层感知器的前两层(输入层和隐藏层):
在前向传播期间,隐藏层中的每个单元都得到信号:
也就是说,每个隐藏单元的输入总和乘以相应的权重。
现在假设您将所有权重初始化为相同的值(例如零或一)。在这种情况下,每个隐藏单元都会得到完全相同的信号。例如,如果所有权重都初始化为 1,则每个单元获得的信号等于输入(和输出sigmoid(sum(inputs))
)之和。如果所有的权重都为零,更糟糕的是,每个隐藏单元都会得到零信号。无论输入是什么 - 如果所有权重都相同,隐藏层中的所有单元也将相同。
这是对称性的主要问题,也是您应该随机初始化权重(或者至少使用不同的值)的原因。请注意,此问题会影响使用每个对每个连接的所有体系结构。
比喻:
想象一下,有人把你从直升机上扔到一个不知名的山顶,你被困在那里。到处都是雾气。您唯一知道的是,您应该以某种方式下降到海平面。你应该采取哪个方向来达到最低点?
如果您找不到通往海平面的路,那么直升机会再次带您并将您带到同一个山顶位置。您将不得不再次采取相同的方向,因为您将自己“初始化”到相同的起始位置。
但是,每次直升机将您随机降落在山上的某个地方时,您都会采取不同的方向和步骤。因此,您将有更好的机会达到最低点。
这就是打破对称性的意思。初始化是不对称的(这是不同的),因此您可以找到相同问题的不同解决方案。
在这个类比中,你降落的地方是 weights。因此,使用不同的权重,达到最低(或更低)点的机会更大。
此外,它增加了系统中的熵,因此系统可以创建更多信息来帮助您找到较低的点(局部或全局最小值)。
答案很简单。基本的训练算法本质上是贪心的——它们没有找到全局最优解,而是——“最近的”局部解。结果,从任何固定的初始化开始,您的解决方案都会偏向于一组特定的权重。如果您随机执行(并且可能多次执行此操作),那么您卡在错误表面某些奇怪部分的可能性要小得多。
同样的论点适用于无法找到全局最优值的其他算法(k-means、EM 等),并且不适用于全局优化技术(如 SVM 的 SMO 算法)。
正如你所提到的,关键是打破对称性。因为如果将所有权重初始化为零,那么神经网络中的所有隐藏神经元(单元)都将进行完全相同的计算。这不是我们想要的,因为我们想要不同的隐藏单元来计算不同的函数。但是,如果您将全部初始化为相同的值,则这是不可能的。
将权重初始化为 0 不是更好的主意吗?这样权重就能够更快地找到它们的值(无论是正值还是负值)?
打破对称性如何让它学得更快?
如果将所有权重初始化为零,则所有层的所有神经元都会执行相同的计算,从而提供相同的输出,从而使整个深度网络无用。如果权重为零,则整个深度网络的复杂度将与单个神经元的复杂度相同,并且预测将无异于随机。
在连接到相同输入的隐藏层中并排的节点必须具有不同的权重,以便学习算法更新权重。
通过将权重设为非零(但接近 0,如 0.1 等),算法将在下一次迭代中学习权重并且不会卡住。通过这种方式,打破了对称性。
- 除了希望它们在初始化时接近最佳值之外,在随机化权重背后是否还有其他一些基本理念?
随机优化算法(例如随机梯度下降)在选择搜索起点和搜索进程中使用随机性。
神经网络的搜索或学习过程称为收敛。发现次优解或局部最优会导致过早收敛。
如果您使用不同的随机权重多次运行算法,而不是依赖于一个局部最优值,则很有可能找到全局最优值而不会陷入局部最优值。
2015 年后,由于机器学习研究的进步,引入了He-et-al Initialization来替代随机初始化
w=np.random.randn(layer_size[l],layer_size[l-1])*np.sqrt(2/layer_size[l-1])
权重仍然是随机的,但范围取决于前一层神经元的大小。
总之,非零随机权重可以帮助我们
让更多的数学。事实上,我回答的原因是我发现其他答案中缺少这一点。假设你有 2 层。如果我们看一下反向传播算法,计算
dZ2 = A2 - Y
dW2 = (1/m) * dZ2 * A2.T
让我们忽略 db2。(对不起,对不起;))
dZ1 = W2.T * dZ2 .* g1'(Z1)
...
您看到的问题以粗体显示。计算 dZ1(计算 dW1 需要它)有 W2,它是 0。我们从来没有机会将权重更改为 0 以外的任何值,而且我们永远也不会。所以本质上,神经网络并没有学到任何东西。我认为它比逻辑回归(单个单元)更糟糕。在逻辑回归的情况下,由于 X 得到不同的输入,您可以通过更多的迭代来学习。在这种情况下,其他层总是给出相同的输出,所以您根本不需要学习。
除了使用随机值进行初始化外,初始权重不应以大值开始。这是因为我们经常在隐藏层和输出层使用 tanh 和 sigmoid 函数。如果您查看这两个函数的图,在第一次迭代的前向传播后会产生更高的值,并且这些值对应于 sigmoid 和 tanh 函数中将导数收敛到零的位置。这导致学习过程的冷启动和学习时间的增加。因此,如果您随机开始权重,您可以通过将这些值乘以“0.01”或“0.001”等值来避免这些问题。
首先,一些算法即使在初始权重为零的情况下也会收敛。一个简单的例子是线性感知器网络。当然,许多学习网络需要随机初始加权(尽管这并不能保证获得最快和最好的答案)。
神经网络使用反向传播来学习和更新权重,问题是在这种方法中,权重收敛到局部最优(局部最小成本/损失),而不是全局最优。
随机加权有助于网络在可用空间中为每个方向抓住机会,并逐渐改进它们以得出更好的答案,而不仅限于一个方向或答案。
[下图显示了如何收敛的一维示例。给定初始位置,实现了局部优化,但不是全局优化。在更高的维度上,随机加权可以增加处于正确位置或更好地开始的机会,从而使权重收敛到更好的值。][1]
[1]:https : //i.stack.imgur.com/2dioT.png [Kalhor, A. (2020)。分类和回归神经网络。演讲。]
在最简单的情况下,新的权重如下:
W_new = W_old + D_loss
这里将代价函数梯度与之前的权重相加得到新的权重。如果之前的所有权重都相同,那么在下一步中所有权重可能相等。结果,在这种情况下,从几何的角度来看,神经网络向一个方向倾斜,并且所有的权重都相同。但如果权重不同,则可以按不同的量更新权重。(取决于每个权重对结果的影响因子,它会影响权重的成本和更新。所以即使是初始随机权重中的一个小错误也可以解决)。
这是一个非常简单的例子,但它显示了随机加权初始化对学习的影响。这使神经网络能够去不同的空间而不是去一侧。结果,在学习的过程中,去最好的这些空间
我学到了一件事:如果将权重初始化为零,很明显同一层中的激活单元将是相同的,这意味着它们将具有相同的值。当你进行 backbrop 时,你会发现梯度 dW 的所有行也是相同的,因此在梯度下降更新后权重矩阵 W 的所有行都是相同的。通常,将所有权重初始化为零会导致网络无法打破对称性。这意味着每一层中的每个神经元都将学习相同的东西,您不妨n[l]=1n[l]=1
为每一层训练一个神经网络,该网络并不比逻辑回归等线性分类器强大。吴恩达课程: