简单总结一下优化方法
优化线性回归有三种方法,1求解析解,2梯度下降,3牛顿法
对于没有解析解的优化问题,用方法2和3。
这两种方法都是常见的求解极值问题的方法,而且都是通过迭代逼近的办法求得最优解。但是两者之间又有着千丝万缕的关系。
对于梯度下降,梯度的步长是固定的。
而对于牛顿法,步长是根据当前状态的导数或者二阶导数决定的,因此步长是动态变化的。但是因为这种动态的步长,使得牛顿法相比于梯度下降法,收敛速度会有所提高。
但是用牛顿法求极值时,要求二阶导数存在,因此牛顿法的使用范围受到了一定的限制
此外还有拟牛顿法和各种牛顿法基础上的优化算法比如BFGS,L-BFGS。
梯度下降家族
相比于牛顿法,拟牛顿法等,神经网络的优化方法都是梯度下降方法,所以我还是先总结一下GD系列的方法吧。
文章来源 机器之心
一般的梯度下降GD是根据损失函数求学习参数的偏导数,也就是梯度,然后按照梯度的反方向来更新参数,更新由学习率learning rate来控制。
梯度下降算法中一些调优:
1算法的步长选择。
步长取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次运行后才能得到一个较为优的值。
2算法参数的初始值选择。
初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。
3归一化。
由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据归一化(由Batch Normalization完成)。
1.7 梯度下降法和最小二乘法
梯度下降法和最小二乘法:
1 梯度下降法需要选择步长,而最小二乘法不需要。
2 梯度下降法是迭代求解,最小二乘法是计算解析解。
如果样本量不算很大,且存在解析解,最小二乘法比起梯度下降法要有优势,计算速度很快。
但是如果样本量很大,用最小二乘法由于需要求一个超级大的逆矩阵,这时就很难或者很慢才能求解解析解了,使用迭代的梯度下降法比较有优势。
GD的主要三种变体是
Batch Gradient Descent, 批量梯度下降
Stochastic Gradient Descent, 随机梯度下降
mini-batch Gradient Descent,小批量梯度下降
主要的不同就是每次用于计算目标函数的梯度的数据量不同。
BGD,每次用整个数据集求梯度。
缺点:速度慢,对大数据集失效,不能在线学习(运行中不能加新样本)
SGD,每次用一个样本计算梯度,可以在线学习。
缺点,噪声较多,并不是每次学习都往最优化方向进行。
MBGD,每次用m个样本计算梯度,速度较快,精度也较高。
缺点,两个主要的问题,一个是学习率的选择,第二个是陷入鞍点(目标函数在此点上的梯度(一阶导数)值为 0,但从改点出发的一个方向是函数的极大值点,而在另一个方向是函数的极小值点,典型的鞍点比如
y
=
x
3
y=x^3
y=x3 在x=0处,
z
=
x
2
−
y
2
z=x^2-y^2
z=x2−y2 在x=0 y=0处 鞍点介绍)。
动量法 Momentum
该算法会考虑上一次的梯度,如果当前梯度与上一次的梯度方向一致,那么当前梯度会增强,反之梯度会减弱。
v
t
=
γ
v
t
−
1
+
α
∇
(
θ
)
v_t=\gamma v_{t-1}+\alpha\nabla(\theta)
vt=γvt−1+α∇(θ)
θ
=
θ
−
v
t
\theta=\theta-v_t
θ=θ−vt
Adaptive gradient (Adagrad)
Adagrad主要是对learning rate进行自动调整,设
θ
t
,
i
\theta_{t,i}
θt,i是第t轮第i个参数
θ
t
+
1
,
i
=
θ
t
,
i
−
α
G
t
,
i
i
+
e
∇
t
,
i
\theta_{t+1,i}=\theta_{t,i}-\frac{\alpha}{\sqrt{G_{t,ii}+e}} \nabla_{t,i}
θt+1,i=θt,i−Gt,ii+eα∇t,i
其中,
G
t
∈
R
d
×
d
G_t\in R^{d\times d}
Gt∈Rd×d 为对角矩阵,每个对角线位置{i,i}为对应参数
θ
i
\theta_i
θi从第1轮到第t轮梯度的平方和。e是平滑项,用于避免分母为0,一般取值1e−8。
Adagrad优点是对于对于出现频率较大的参数采取较小的学习率,对于出现频率较小的参数采取较大的学习率。
Adagrad的缺点是在训练的中后期,分母上梯度平方的累加将会越来越大,从而梯度趋近于0,使得训练提前结束。
RMSProp
为了解决Adagrad的问题,RMSProp不累加之前所有轮的梯度平方和,而仅仅计算之前梯度平方的均值。
E
[
∇
2
]
t
=
0.9
E
[
∇
2
]
t
−
1
+
0.1
∇
t
2
E[\nabla^2]_t=0.9E[\nabla^2]_{t-1}+0.1\nabla_t^2
E[∇2]t=0.9E[∇2]t−1+0.1∇t2
θ
t
+
1
=
θ
t
−
α
E
[
∇
2
]
t
+
e
∇
t
\theta_{t+1}=\theta_t-\frac{\alpha}{\sqrt{E[\nabla^2]_t+e}} \nabla_{t}
θt+1=θt−E[∇2]t+eα∇t
自适应动量法Adaptive Momentum(Adam)
Adam可以说是Momentum方法和RMSProp方法的结合,不仅在
除了存储类似RMSprop 中指数衰减的过去梯度平方均值 外,Adam 法也存储像动量法中的指数衰减的过去梯度值均值 :