Deep learning 如果在初始化后将因子添加到所有权重和偏差中,则带有sigmoid神经元的神经网络不会学习

Deep learning 如果在初始化后将因子添加到所有权重和偏差中,则带有sigmoid神经元的神经网络不会学习,deep-learning,neural-network,sigmoid,Deep Learning,Neural Network,Sigmoid,我将要试验一种用于手写识别的神经网络,可以在这里找到: 如果权重和偏差是随机初始化的,那么在几个时代之后,它可以识别80%以上的数字。如果我在初始化后将所有权重和偏差加上一个小因子0.27,学习速度会慢得多,但最终会达到80%以上的精度: self.biases = [np.random.randn(y, 1)+0.27 for y in sizes[1:]] self.weights = [np.random.randn(y, x)+0.27 for x, y in zip(sizes[:-1

我将要试验一种用于手写识别的神经网络,可以在这里找到: 如果权重和偏差是随机初始化的,那么在几个时代之后,它可以识别80%以上的数字。如果我在初始化后将所有权重和偏差加上一个小因子0.27,学习速度会慢得多,但最终会达到80%以上的精度:

self.biases = [np.random.randn(y, 1)+0.27 for y in sizes[1:]]
self.weights = [np.random.randn(y, x)+0.27 for x, y in zip(sizes[:-1], sizes[1:])]

Epoch 0 : 205 / 2000
Epoch 1 : 205 / 2000
Epoch 2 : 205 / 2000
Epoch 3 : 219 / 2000
Epoch 4 : 217 / 2000
...
Epoch 95 : 1699 / 2000
Epoch 96 : 1706 / 2000
Epoch 97 : 1711 / 2000
Epoch 98 : 1708 / 2000
Epoch 99 : 1730 / 2000
如果我在初始化后将所有权重和偏差加上一个小因子0.28,网络将不再学习

self.biases = [np.random.randn(y, 1)+0.28 for y in sizes[1:]]
self.weights = [np.random.randn(y, x)+0.28 for x, y in zip(sizes[:-1], sizes[1:])]

Epoch 0 : 207 / 2000
Epoch 1 : 209 / 2000
Epoch 2 : 209 / 2000
Epoch 3 : 209 / 2000
Epoch 4 : 209 / 2000
...
Epoch 145 : 234 / 2000
Epoch 146 : 234 / 2000
Epoch 147 : 429 / 2000
Epoch 148 : 234 / 2000
Epoch 149 : 234 / 2000

我认为这与sigmoid函数有关,它在接近1和0时变得非常平坦。但当权重和偏差的平均值为0.28时,此时会发生什么?为什么识别数字的数量会急剧下降?为什么会有像上面429这样的异常值呢?

初始化在训练网络中扮演着重要角色。一个好的初始化可以使训练和收敛更快,而一个坏的初始化可以使它慢很多倍。它甚至可以允许或阻止收敛

您可能想阅读本fr,了解更多关于该主题的信息

通过向所有权重和偏差添加0.27,您可能会使网络偏离最佳解决方案,并增加梯度。根据层数,这可能会导致渐变爆炸。现在,每次迭代都有非常大的权重更新。可能发生的情况是,在加上0.27后,你有一些权重是0.3,我们说最佳值是0.1。现在得到了-0.4的更新,现在是-0.1。下一次更新可能是0.4或更接近的版本,您将回到原始问题。因此,优化并没有朝着最佳值缓慢前进,而是超越了一切,来回反弹。这可能会在一段时间后得到修复,或者根本不会导致收敛,因为网络只是反弹


通常,您希望将偏差初始化为0或非常接近于零。如果您进一步尝试此操作,您可能希望尝试不向偏差添加0.27,并在开始时将其设置为0或接近0的值。也许通过这样做,它实际上可以再次学习。

嘿,谢谢分享。PS我认为ai.stackexchange社区也可以从这个问题中受益,您可能会从中得到更多答案。我不知道您的网络为什么会出现这种情况,但以下是一些我要探讨的问题。也许你在损失函数中陷入了局部极小值。尝试一个周期性的学习进度表,看看你是否能让自己振作起来。你也可以尝试其他学习率计划。另外,您是否尝试过在相同条件下重复测试?0.275和0.28是否总是产生与上述相同类型的结果?如果没有,也许它们之间没有特殊的界限,也许你正处于一个普遍不稳定的状态。在初始化权重上增加0.27的动机是什么?我这样问是因为这对我来说没有多大意义。