《神经网络和深度学习》系列文章二十八:权重初始化
出处: Michael Nielsen的《Neural Network and Deep Learning》,点击末尾“阅读原文”即可查看英文原文。
声明:我们将在每周四连载该书的中文翻译。
本节译者:朱小虎 、张广宇。转载已获得译者授权,禁止二次转载。
使用神经网络识别手写数字
反向传播算法是如何工作的
改进神经网络的学习方法
改进神经网络的学习方式
交叉熵损失函数
用交叉熵解决手写数字识别问题
交叉熵意味着什么?它从哪里来?
Softmax
过拟合
正则化
为什么正则化能够降低过拟合?
其他正则化技术
权重初始化
重温手写数字识别:代码
如何选择神经网络的超参数
其他技术
神经网络能够计算任意函数的视觉证明
为什么深度神经网络的训练是困难的
深度学习
创建了神经网络后,我们需要进行权重和偏置的初始化。到现在,我们一直是根据在第一章中介绍的那样进行初始化。提醒你一下,之前的方式就是根据独立高斯随机变量来选择权重和偏置,其被归一化为均值为
结果表明,我们可以比使用归一化的高斯分布做得更好。为什么?假设我们使用一个有大量输入神经元的网络,比如说
为了简化,假设我们使用训练输入
尤其是,我们可以从这幅图中看出
这其实和我们在本章前面讨论的问题差不多,前面的情况是输出神经元在错误的值上饱和导致学习的下降。我们之前通过代价函数的选择解决了前面的问题。不幸的是,尽管那种方式在输出神经元上有效,但对于隐藏神经元的饱和却一点作用都没有。
我已经讨论了第一个隐藏层的权重输入。当然,类似的论证也适用于后面的隐藏层:如果后面隐藏层的权重也是用归一化的高斯分布进行初始化,那么激活值将会非常接近
还有可以帮助我们进行更好地初始化,能够避免这种类型的饱和,最终避免学习速度的下降?假设我们有一个有
这样的一个神经元更不可能饱和,因此也不大可能遇到学习速度下降的问题。
练习
验证
(a)独立随机变量和的方差,是每个独立随机变量方差的和;(b)方差是标准差的平方。
我在上面提到,我们会继续使用之前的方式对偏置进行初始化,就是使用均值为
让我们在 MNIST 数字分类任务上比较一下新旧两种权重初始化方式。同样,还是使用
>>> import mnist_loader
>>> training_data, validation_data, test_data = \
… mnist_loader.load_data_wrapper()
>>> import network2
>>> net = network2.Network([784, 30, 10], cost=network2.CrossEntropyCost)
>>> net.large_weight_initializer()
>>> net.SGD(training_data, 30, 10, 0.1, lmbda = 5.0,
… evaluation_data=validation_data,
… monitor_evaluation_accuracy=True)
我们也使用新方法来进行权重的初始化。这实际上还要更简单,因为network2 默认方式就是使用新的方法。这意味着我们可以丢掉上面的net.large_weight_initializer() 调用:
>>> net = network2.Network([784, 30, 10], cost=network2.CrossEntropyCost)
>>> net.SGD(training_data, 30, 10, 0.1, lmbda = 5.0,
… evaluation_data=validation_data,
… monitor_evaluation_accuracy=True)
将结果用图展示出来[2],我们得到:
两种情形下,我们最终都获得了超过 96% 的准确率。最终的分类准确率几乎完全一样。但是新的初始化技术带来了速度的提升。在经过一轮迭代后,第一种初始化方式的分类准确率在 87% 以下,而新的方法已经几乎达到了 93%。看起来的情况就是我们新的关于权重初始化的方式将训练带到了一个新的境界,让我们能够更加快速地得到好的结果。同样的情况在
在这个情况下,两个曲线并没有重合。然而,我做的实验发现在一些额外的迭代次数之后准确率也是几乎相同的。所以,基于这些实验,看起来提升的权重初始化仅仅会加快训练,不会改变网络的最终性能。然而,在第四章,我们会看到一些例子里面使用
问题
将规范化和改进的权重初始化方法结合使用 L2 规范化有时候会自动给我们一些类似于新的初始化方法的东西。假设我们使用旧的初始化权重的方法。考虑一个启发式的观点:(1)假设
[1]我们在第二章详细讨论过这个问题,其中我们用反向传播的方程来显示输入到饱和神经元的权重学习得缓慢。
[2]用来生成这幅以及下一幅图形的程序是
[3] Practical Recommendations for Gradient-Based Training of Deep Architectures,作者为Yoshua Bengio (2012)。
“哈工大SCIR”公众号
编辑部:郭江,李家琦,徐俊,李忠阳,俞霖霖
本期编辑:李忠阳
长按下图并点击 “识别图中二维码”,即可关注哈尔滨工业大学社会计算与信息检索研究中心微信公共号:”哈工大SCIR” 。点击左下角“阅读原文”,即可查看原文。