深度神经网络中的难点

一:消失的gradient问题 (vanishing gradient problem)

>>> import mnist_loader

>>> training_data, validation_data, test_data = \

... mnist_loader.load_data_wrapper()

>>> import network2

>>> net = network2.Network([784, 30, 10])

>>> net.SGD(training_data, 30, 10, 0.1, lmbda=5.0,

... evaluation_data=validation_data, monitor_evaluation_accuracy=True)

结果: 96.48%

加入一个隐藏层:

>>> net = network2.Network([784, 30, 30, 10])

>>> net.SGD(training_data, 30, 10, 0.1, lmbda=5.0,

... evaluation_data=validation_data, monitor_evaluation_accuracy=True)

结果: 96.9%

再加入一个隐藏层:

>>> net = network2.Network([784, 30, 30, 30, 10])

>>> net.SGD(training_data, 30, 10, 0.1, lmbda=5.0,

... evaluation_data=validation_data, monitor_evaluation_accuracy=True)

结果: 96.57%


为什么加入一层反而降低了准确率?

条形区域长度代表∂C/∂b, Cost对于bias的变化率(这个地方的推导没怎么看懂)

 

二:学习速率

再增加一层: 
[784,30,30,30,30,10]

深度神经网络中的难点_第1张图片

可以看出, 第一个隐藏层比第四个几乎要慢100

这种现象普遍存在于神经网络之中, 叫做: vanishing gradient problem

另外一种情况是内层的梯度被外层大很多, 叫做exploding gradient problem

所以说神经网络算法用gradient之类的算法学习存在不稳定性

训练深度神经网络, 需要解决vanishing gradient problem

 

三:造成vanishing gradient problem的原因

每层的学习速率会由于一个固定的比值越来越大或越来越小,但是为什么会造成vanishing gradient problem(估计就是这样定义的)

 

你可能感兴趣的:(深度学习)