追着幸福跑|为什么深度神经网络这么难训练?| 赠书( 二 )
这样的神经网络可以使用中间层构建出多层抽象 , 正如在布尔电路中所做的那样 。 如果进行视觉模式识别 , 那么第1层的神经元可能学会识别边;第2层的神经元可以在此基础上学会识别更加复杂的形状 , 例如三角形或矩形;第3层将能够识别更加复杂的形状 , 以此类推 。 有了这些多层抽象 , 深度神经网络似乎可以学习解决复杂的模式识别问题 。 正如电路示例所体现的那样 , 理论研究表明深度神经网络本质上比浅层神经网络更强大 。
【追着幸福跑|为什么深度神经网络这么难训练?| 赠书】如何训练深度神经网络呢?本章尝试使用我们熟悉的学习算法——基于反向传播的随机梯度下降 , 来训练深度神经网络 。 但是 , 这会产生问题 , 因为我们的深度神经网络并不比浅层神经网络的性能强多少 。
这似乎与前面的讨论相悖 , 就此退缩吗?当然不 , 下面深入探究使得深度神经网络训练困难的原因 。 仔细研究便会发现 , 在深度神经网络中 , 不同层的学习速度差异很大 。 后面的层正常学习时 , 前面的层常常会在训练中停滞不前 , 基本上学不到什么 。 这种停滞并不是因为运气不佳 , 而是有着更根本的原因 , 并且这些原因和基于梯度的学习技术相关 。
随着更加深入地理解这个问题 , 也会发现相反的情形:前面的层可能学习得很好 , 但是后面的层停滞不前 。 实际上 , 我们发现在深度神经网络中使用基于梯度下降的学习算法本身存在不稳定性 。 这种不稳定性使得前面或后面的层的学习过程阻滞 。
这的确是个坏消息 , 但真正理解了这些难点后 , 就能掌握高效训练深度神经网络的关键所在 。 而且这些发现也是第6章的预备知识 , 届时会介绍如何使用深度学习解决图像识别问题 。
梯度消失问题
在训练深度神经网络时 , 究竟哪里出了问题?
为了回答这个问题 , 首先回顾一下使用单一隐藏层的神经网络示例 。 这里仍以MNIST数字分类问题作为研究和试验的对象 。
你也可以使用自己的计算机训练神经网络 。 如果想同步跟随这些步骤 , 需要用到NumPy , 可以使用如下命令复制所有代码:
git clone
如果你不使用Git , 可以直接在随书下载的压缩包里找到数据和代码 。
进入src子目录 , 在Python shell中加载MNIST数据:
>>> import mnist_loader
>>> training_data, validation_data, test_data = http://kandian.youth.cn/
... mnist_loader.load_data_wrapper
初始化神经网络:
>>> import network2
>>> net = network2.Network([784, 30, 10])
该神经网络有784个输入神经元 , 对应输入图片的28×28 = 784个像素点 。 我们设置隐藏神经元为30个 , 输出神经元为10个 , 对应10个MNIST数字(0~9) 。
训练30轮 , 小批量样本大小为10 , 学习率 , 正则化参数
。 训练时也会在validation_data上监控分类准确率:
>>> net.SGD(training_data, 30, 10, 0.1, lmbda=5.0,
... evaluation_data=http://kandian.youth.cn/index/validation_data, monitor_evaluation_accuracy=True)
推荐阅读
- 奔驰E级|奔驰E级:开始清仓,为什么降到35万还有库存
- 烹饪|为什么大白菜上有“小黑点”?到底能不能吃?为了健康快告诉家人
- 笙笙千离|惠若琪李宇春同框颁奖,春春身高176还自卑,巨人身高收获幸福
- 资讯早知道|9年后再看《步步惊心》,发现若曦无论跟谁都不会幸福
- 弹钢琴|原创吉娜为1岁宠物兔庆生,郎朗弹钢琴助兴,幸福温馨像一家三口
- 人民日报|岳阳君山区:消费扶贫托起贫困户稳稳的幸福
- “全国人大 ”微信公众号|何健忠:以实施民法典提升人民美好生活的“幸福指数”
- 经济日报-中国经济网|【幸福花开新边疆】219国道旁的“脱贫事”
- 新华网|【幸福花开新边疆】奋发学技能 靠己奔小康
- 【渣男】乖乖女为什么会爱渣男,痛苦也不分手?
