神经网络优化

版权声明:转载请注明出处。 https://blog.csdn.net/Xin_101/article/details/82987227

1 学习率设置

θ n + 1 = θ n η θ n J ( θ n ) \theta_{n+1}=\theta_n-\eta\frac{\partial}{\partial\theta_n}J(\theta_n)
学习率:用于更新参数 θ \theta 并控制其变化速度,表示为 η \eta .
学习率过大,导致参数变化幅度较大,可能导致参数在极值附近波动;
学习率过小,导致参数变化幅度过小,导致训练速度过慢,降低效率;
下表为经验设定,从0.001开始依次类推.

序号 经验值
1 0.001
2 0.003
3 0.01
4 0.03
5 0.1
6 0.3

2 过拟合优化

过拟合:当模型过于复杂,该模型可以很好的"记忆"每个训练数据中随机噪声的部分而"忘记"要去"学习"训练数据中的通用趋势,即该模型可100%跟随训练数据,而忽略了训练数据的变化趋势,降低了泛化能力和迁移能力.
为避免过拟合问题,常用方法为正则化(regularization).正则化即在损失函数中加入刻画模型复杂程度的指标.
如损失函数为 J ( θ ) J(\theta) ,在优化时不直接优化 J ( θ ) J(\theta) ,而是优化 J ( θ ) + λ R ( w ) J(\theta)+\lambda R(w) .其中, R ( w ) R(w) 刻画模型的复杂程度,而 λ \lambda 表示模型复杂损失在总损失中的比例, θ \theta 表示神经网络中所有参数,权重 w w 和偏置 b b ,一般而言,模型复杂度只由权重 w w 决定.常用刻画模型复杂度的函数 R ( w ) R(w) 有两种, L 1 L1 L 2 L2 .
其中,
L 1 L1
R ( w ) = w 1 = i w i R(w)=||w||_1=\sum_i|w_i|
L 2 L2
R ( w ) = w 1 2 = i w i 2 R(w)=||w||_1^2=\sum_i|w_i^2|
正则化基本思想是通过限制权重大小,使模型不能任意训练数据中的随机噪音。两种正则化区别如下:
(1) L 1 L1 正则化会使参数变稀疏, L 2 L2 正则化不会;参数变稀疏指更多的参数变为0,可达到类似特征选取的功能。
(2) L 1 L1 正则化计算公式不可导, L 2 L2 正则化公式可导;在计算损失函数偏导数是,对含有 L 2 L2 正则化损失函数的优化更加简洁,优化带 L 1 L1 正则化损失函数则较为复杂。
实际应用中,优化方法为 L 1 L1 L 2 L2 共用:
R ( w ) = i α w i + ( 1 α ) w i 2 R(w)=\sum_i\alpha|w_i|+(1-\alpha)w_i^2
Tensorflow中对应函数:

tf.contrib.layers.l1_regularizer()
tf.contrib.layers.l2_regularizer()

3 滑动平均模型

滑动平均模型是使模型在测试数据上更加健壮(robust)。在采用随机梯度下降算法训练神经网络时,使用滑动平均模型在诸多应用中都可在一定程度上提高最终模型在测试数据上的表现。
Tensorflow中对应函数:

tf.train.ExponentialMovingAverage

在初始化滑动平均模型时,需要提供一个衰减率(decay),用于控制模型更新速度。函数对每个变量会维护一个影子变量(shadow variable),该影子变量的初始值即为相应变量的初始值,每次运行变量更新时,影子变量的值会更新为:
s h a d o w v a r i a b l e = d e c a y s h a d o w v a r i a b l e + ( 1 d e c a y ) v a r i a b l e shadow_variable=decay*shadow_variable+(1-decay)*variable
其中,
shadow_variable为影子变量,variable为待更新变量,decay为更新率。
decay决定了模型的更新速度,decay越大模型越趋于稳定。实际应用中,decay一般设成趋近于1的值,如0.999,0.9999。为使模型在训练前期可以加快更新速度,ExponentialMovingAverage提供了num_updates参数动态设置decay的大小。每次更新的衰减率为:
m i n { d e c a y , 1 + n u m u p d a t e s 10 + n u m u p d a t e s } min\left\{ decay,\frac{1+num_updates}{10+num_updates} \right\}


相关函数使用参见:


猜你喜欢

转载自blog.csdn.net/Xin_101/article/details/82987227
今日推荐