工程地址:https://github.com/yizt/numpy_neuron_network
基础知识
0_1-全连接层、损失函数的反向传播
0_2_1-卷积层的反向传播-单通道、无padding、步长1
0_2_2-卷积层的反向传播-多通道、无padding、步长1
0_2_3-卷积层的反向传播-多通道、无padding、步长不为1
0_2_4-卷积层的反向传播-多通道、有padding、步长不为1
0_2_5-池化层的反向传播-MaxPooling、AveragePooling、GlobalAveragePooling、GlobalMaxPooling
0_3-激活函数的反向传播-ReLU、LeakyReLU、PReLU、ELU、SELU
0_4-优化方法-SGD、AdaGrad、RMSProp、Adadelta、Adam
DNN练习
1_1_1-全连接神经网络做线性回归
1_1_2-全连接神经网络做mnist手写数字识别
CNN练习
2_1-numpy卷积层实现
2_2-numpy池化层实现
2_3-numpy-cnn-mnist手写数字识别
本文目录
随机梯度下降,注意这里的随机梯度下降是mini-batch gradient descent。一般深度学习中就用sgd代表。
a) 权重参数 w w , 权重梯度 ∇w ∇ w
b) 学习率 η η , 学习率衰减 decay d e c a y (一般设置很小)
c) 动量大小 γ γ (一般设置为0.9) , t次迭代时累积的动量为 vt v t
则学习率的更新公式为:
这一节我们介绍 Adagrad 算法,它根据自变量在每个维度的梯度值的大小来调整各个维度上的学习率,从而避免统一的学习率难以适应所有维度的问题。
Adagrad 的算法会使用一个小批量随机梯度按元素平方的累加变量每次迭代中,首先将梯度 ∇w ∇ w 按元素平方后累加到变量 st s t
需要强调的是,梯度按元素平方的累加变量 s s 出现在学习率的分母项中。因此,如果目标函数有关自变量中某个元素的偏导数一直都较大,那么就让该元素的学习率下降快一点;反之,如果目标函数有关自变量中某个元素的偏导数一直都较小,那么就让该元素的学习率下降慢一点。然而,由于 s s 一直在累加按元素平方的梯度,自变量中每个元素的学习率在迭代过程中一直在降低(或不变)。所以,当学习率在迭代早期降得较快且当前解依然不佳时,Adagrad 在迭代后期由于学习率过小,可能较难找到一个有用的解。
当学习率在迭代早期降得较快且当前解依然不佳时,Adagrad 在迭代后期由于学习率过小,可能较难找到一个有用的解。为了应对这一问题,RMSProp 算法对 Adagrad 做了一点小小的修改。
不同于 Adagrad 里状态变量 s s 是到目前时间步里所有梯度按元素平方和,RMSProp 将过去时间步里梯度按元素平方做指数加权移动平均。公式如下:
未完待续… …
a) An overview of gradient descent optimization
b) 优化算法