machine-learning - 为什么神经网络的权重应该初始化为随机数?

标签 machine-learning neural-network artificial-intelligence mathematical-optimization gradient-descent

我正在尝试从头开始构建一个神经网络。 所有人工智能文献都一致认为,权重应该初始化为随机数,以便网络更快地收敛。

但是为什么神经网络初始权重被初始化为随机数?

我在某处读到这样做是为了“打破对称性”,这使得神经网络学习得更快。打破对称性如何让它学得更快?

将权重初始化为 0 不是一个更好的主意吗?这样权重就能更快地找到它们的值(无论是正值还是负值)?

除了希望权重在初始化时接近最佳值之外,随机权重背后是否还有其他一些基本原理?

最佳答案

打破对称性在这里至关重要,而不是出于性能原因。想象一下多层感知器的前 2 层(输入层和隐藏层):

enter image description here

在前向传播期间,隐藏层中的每个单元都会收到信号:

enter image description here

也就是说,每个隐藏单元的输入总和乘以相应的权重。

现在假设您将所有权重初始化为相同的值(例如零或一)。在这种情况下,每个隐藏单元将获得完全相同的信号。例如。如果所有权重都初始化为 1,则每个单元获得的信号等于输入之和(并输出 sigmoid(sum(inputs)) )。如果所有权重都为零,更糟糕的是,每个隐藏单元将得到零信号。 无论输入是什么 - 如果所有权重都相同,隐藏层中的所有单元也将相同

这是对称性的主要问题,也是您应该随机初始化权重(或者至少使用不同值)的原因。请注意,此问题会影响使用each-to-each连接的所有体系结构。

关于machine-learning - 为什么神经网络的权重应该初始化为随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20027598/

相关文章:

matlab - 梯度下降和闭合形式解 - MATLAB 中的不同假设线

haskell - Haskell 或函数式语言的代理?

artificial-intelligence - 什么是玩五子棋的好 AI 策略?

python-3.x - 对于高频多季节性数据使用哪种预测?

javascript - tensorflowjs 如何在 cnn 预测中获取内层输出

c# - 将 Mallet 作为二元分类器应用于文档分类

python - 如何将卷积层添加到自定义估计器

python - Keras + Tensorflow 和 Python 中的多处理

python - TensorFlow默认在线或批量训练

validation - 如何使用验证数据调整超参数