当前位置:首页 > 神经网络 > 正文

神经网络超参数调优

ˋ▽ˊ神经网络超参数选择

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)不需要零偏差校正。 默认值建议: