ˋ▽ˊ神经网络超参数选择
1.因此,尽量选择具有零中心特征的激活函数来加速模型收敛。
2.例如,在BP神经网络中,主要目的是选择模型的层数、神经元的激活函数以及模型每层神经元的数量。 (所谓的超参数)。 层网络中神经元连接的最终权重是在模型选择(即K折交叉验证)后根据所有训练数据重新训练的。
3.选择训练神经网络时,首先选择批量大小,然后调整其他超参数。 而在实践中,只有两个原则:batchsize不能太小,也不能太大,其他都可以。 因为合适的batchsize范围与训练数据的规模、神经网络的层数、单元数量没有显着关系。
4.接下来是架构和超参数的选择。 第一步,将定位图案应用于图像的最大和最小中心方形裁剪。 裁剪被缩放到网络的输入大小,即220×220。 通过该网络一次,我们可以获得数百个候选日期框。
5.然而,DNN的高精度是以高计算复杂度为代价的。 常识上的计算引擎,尤其是GPU,是DNN的基础。
6.对于BP神经网络回归过拟合问题,建议尝试使用L1正则化和dropout方法来解决。 如果需要特征选择,可以使用L1正则化。 如果需要提高网络的泛化能力,可以使用dropout方法。
>▂<神经网络中自适应的梯度下降优化算法(二)Adagrad算法可以自适应地对不同的参数采用不同的更新频率,对低频特征使用低更新率,对高频特征使用高更新率,因此对于稀疏性表现良好数据,大大提高了SGD的功能,在训练Google的神经网络识别Youtube视频中的猫方面效果很好。
梯度更新规则:
g(t,i)表示目标函数在t时刻对θ(i)的偏导数。 SGD各个参数的更新过程如下:
Adagrad各个参数的更新过程如下:
G(t)是一个对角矩阵,对角矩阵上的各个参数对角线是一个元素在时间t之前每个θ(i)的梯度的平方和。 ε通常取1e-8阶的值,其存在是为了避免除数为0。 一个有趣的现象是,如果没有平方根运算,该算法的性能非常差。
Adagrad的主要缺点是它的分母是梯度平方的累加,其值会不断增大,最终导致学习率下降到很小的值,使得学习算法无法继续。
TensorFlow实现:
tf.train.AdagradOptimizer(learning_rate,initial_accumulator_value=0.1,use_locking=False,name='Adagrad')
Adadelta算法求解Adagrad的一个主要缺点是它不再收集所有以前的灰度,而只收集固定数量的以前的灰度。
Adadelta不使用梯度平方的简单累加,而是使用历史梯度平方的平均衰减。
γ通常等于0.9
分母相当于缩放的均方根(RMS),即将所有值的平方相加,求出它们的平均值,然后开平方得到平方根平均值。
梯度更新规则:
将学习率设置为
,我们不需要提前设置学习率。
RMSprop是GeoffHinton和Adadelta方法提出的一种自适应学习率方法,旨在解决Adagrad学习率急剧下降的问题。 它与Adadelta方法兼容。
梯度更新规则
超参数设置:
Hinton建议设置γ=0.9,学习率η=0.001。
TensorFlow实现:
tf.train.RMSPropOptimizer.__init__(learning_rate,decay,momentum=0.0,epsilon=1e-10,use_locking=False,name='RMSProp')
Adam还自适应地将不同的学习率分配给不同的参数。 指数梯度分解(平均指数分解)用于历史梯度和历史平方梯度。
梯度更新规则
Adam的作者指出,如果m(t)和v(t)初始化为零向量并且衰减率很小(即β1和β2都是非常接近(1小时时),在初始迭代中,m(t)和v(t)始终移至零,因此需要修正偏移
然后使用修正后的值更新梯度:
推荐Adam由β1=0.9,β2=0.999,ε=10^{-8}组成
,事实上,Adam比其他算法表现更好
TensorFlow实现:
tf.train.AdamOptimizer(learning_rate=0.001,beta1=0.9,beta2=0.999,epsilon=1e-08,use_locking=False,name='Adam')梯度尺度与历史梯度的L2范数的基本Adam逆更新成比例
我们可以将此规则推广到Lp范数
当p的值增大,Lp的值往往会变得不稳定,所以实际中使用L1,L2更常用,但Adamax作者发现L∞可以收敛到稳定值
那么我们可以使用u(t。 )而不是
来更新Adam中的梯度
同时,u(t)不需要零偏差校正。 默认值建议: