机器学习 梯度下降

一.概述
1.概念:

"梯度下降"(Gradient Descent)1种启发式的迭代算法.顾名思义,其基本思想是:开始时随机选择1组参数(θ1,θ2...θn)并计算相应的目标函数值,
然后迭代地沿(目标函数的)梯度下降/上升最快的方向移动来求解极小/大值.需要注意的是:仅当目标函数为凸函数时梯度下降能保证找到全局最优解;其
他情况下找到的可能只是局部最优解

在这里插入图片描述
2.一般形式:

θ = ( θ 1 , θ 2 . . . θ n ) θ=(θ_1,θ_2...θ_n) θ=(θ1,θ2...θn),目标函数为 J ( θ ) J(θ) J(θ),选择的初始参数为 θ 0 = ( θ 1 0 , θ 2 0 . . . θ n 0 ) θ^0=(θ_1^0,θ_2^0...θ_n^0) θ0=(θ10,θ20...θn0),则新参数 θ i + 1 θ^{i+1} θi+1 θ i + 1 = θ i + α   ⋅ ∇ J ( θ i ) θ^{i+1}=θ^i+α\,·\nabla{J(θ^i)} θi+1=θi+αJ(θi)其中 α α α称为学习率(Learning Rate)或步长(Step),进行梯度下降时为负值,进行梯度上升时则为正值

3.关于学习率:

学习率用于控制每次下降的幅度:过大时容易越过最低点,导致无法收敛(震荡甚至发散;见下图);过小时,收敛过慢使时间开销巨大

在这里插入图片描述
二.常见梯度下降算法
1.批量梯度下降
(1)概念:

"批量梯度下降"(Batch Gradient Descent;BGD)是最原始的形式,其在每次迭代时都使用所有样本来对参数进行更新

(2)形式:

设全部样本为 ( x 1 , y 1 ) . . . ( x m , y m ) (x_1,y_1)...(x_m,y_m) (x1,y1)...(xm,ym),目标函数为 J ( θ ; x ) J(θ;x) J(θ;x),则更新算法为 θ i + 1 = θ i + α m ∑ j = 1 m ∇ J ( θ i ; x j ) θ^{i+1}=θ^i+\frac{α}{m}\displaystyle\sum_{j=1}^m\nabla{J(θ^i;x_j)} θi+1=θi+mαj=1mJ(θi;xj)

(3)优缺点:

优点:
①每次迭代都是对所有样本进行计算,可通过矩阵实现并行
②由整个数据集确定下降的方向,能更好地代表样本总体,从而更准确地指向极值所在的方向(当目标函数为凸函数时,BGD一定能够到达全局最优点)
③迭代次数较少
缺点:
①当样本数m很大时,每次迭代都需要对所有样本进行计算,训练过程会很慢

2.随机梯度下降
(1)概念:

"随机梯度下降"(Stochastic Gradient Descent;SGD)在每次迭代时使用1个随机的样本来对参数进行更新

(2)形式:

设全部样本为 ( x 1 , y 1 ) . . . ( x m , y m ) (x_1,y_1)...(x_m,y_m) (x1,y1)...(xm,ym),目标函数为 J ( θ ; x ) J(θ;x) J(θ;x),则更新算法为 θ i + 1 = θ i + α ∇ J ( θ i ; x j ) θ^{i+1}=θ^i+α\nabla{J(θ^i;x_j)} θi+1=θi+αJ(θi;xj)其中 j ∈ { 1 , 2... m } j∈\{1,2...m\} j{ 1,2...m}为随机数且每次迭代都不同

(3)优缺点:

优点:
①由于每次迭代都只使用1条随机数据,因此训练速度大大加快
缺点:
①由于单个样本并不能代表全体样本的趋势,因此准确度下降(即使目标函数为凸函数,SGD仍可能无法到达全局最优点)
②不易于并行实现
③迭代次数较多

3.小批量梯度下降
(1)概念:

"小批量梯度下降"(Mini-Batch Gradient Descent;MBGD)是批量梯度下降和随机梯度下降的折中,每次迭代都使用指定条样本来对参数进行更新

(2)形式:

设全部样本为 ( x 1 , y 1 ) . . . ( x m , y m ) (x_1,y_1)...(x_m,y_m) (x1,y1)...(xm,ym),目标函数为 J ( θ ; x ) J(θ;x) J(θ;x),则更新算法为 θ i + 1 = θ i + α ∇ J ( θ i ; x j ) θ^{i+1}=θ^i+α\nabla{J(θ^i;x_j)} θi+1=θi+αJ(θi;xj)

(3)优缺点:

优点:
①通过矩阵运算,小批量梯度下降的速度不会远低于随机梯度下降
②迭代次数较少
③可实现并行化
缺点:
①每次迭代使用的样本数的不当选择可能带来问题

三.梯度检验
1.概念:

1个较复杂的模型(如神经网络)使用梯度下降算法时,可能存在一些不易察觉的错误,这会导致虽然代价在不断减小,但最终的结果并不是最优解.为此,
需要进行"梯度的数值检验"(Numerical Gradient Checking),也就是通过差分来近似偏导数,从而检验通过解析方法得到的梯度是否正确

2.实现:


猜你喜欢

转载自blog.csdn.net/weixin_46131409/article/details/114606109