版权声明:本文为King_HAW原创文章,未经King_HAW允许不得转载。 https://blog.csdn.net/King_HAW/article/details/78856365
Machine Learning:Gradient Descent(梯度下降法)
梯度下降法是机器学习中最常用的几种优化方法之一,目的为了找到合适的参数向量
θ
,使得代价函数
J(θ)
最小,梯度下降法的用途很广,本文中介绍使用梯度下降法来最小化线性回归问题中的
J(θ)
。
基本概念:
输入为一个模型的训练样本,通常为对于数据集提取的特征,也可以为采集的原始数据,通常使用
x (i) i
表示。上标为样本序号,表示为第几组样本。下标为样本中的特征序号,表示为当前样本中的第几个特征。
x (i) i
又称为训练集。
输出(Output)
输出为一个模型的预测结果,通常使用
y (i)
表示。
假设函数(Hypothesis Function)
假设函数是在问题中根据实际数据去得到的目标函数,以便去预测之后的新数据。通常使用
h θ
表示,此时
h θ =θ 0 +θ 1 x 1 +θ 2 x 2 +...
,为了讨论方便本文中
h θ (x)=θ 0 +θ 1 x 1
。
代价函数(Cost Function)
代价函数定义为假设函数和实际数据之间的误差,本文中使用平方代价函数(Square Error),定义为
J(θ)=12m ∑ i=1 m (h θ (x (i) )−y (i) ) 2
梯度下降法
通过上式可以看出,
J(θ)
越小,则
h θ (x)
和原始数据的分布就越接近。为了求出
J(θ)
的最小值,我们使用梯度下降法(目前只考虑单元线性回归,即参数为
θ 0
和
θ 1
)。
梯度下降法的步骤为:
1.选取参数
θ 0
和
θ 1
的初值,通常情况下为随机选取,也可以将
θ 0
和
θ 1
置0。
2.改变
θ 0
和
θ 1
的值,直到
J(θ)
达到最小值(全局或者局部极小)。
我们选取使得
J(θ)
下降最快的方向,也就是某点梯度方向的参数值来更新
θ 0
和
θ 1
。更新方法为
θ j :=θ j −α∂∂θ j J(θ 0 ,θ 1 ),此时j=0,1
上式中的
:=
表示赋值。
这里我们可以对于
θ 0
和
θ 1
的更新方法进一步推导
θ 0 :=θ 0 −α∂∂θ 0 J(θ 0 ,θ 1 ):=θ 0 −α∂∂θ 0 12m ∑ i=1 m ((θ 0 +θ 1 x (i) 1 )−y (i) ) 2 :=θ 0 −αm ∑ i=1 m (θ 0 +θ 1 x (i) 1 −y (i) ) (1)(2)(3)
同理可得
θ 1 :=θ 1 −α∂∂θ 1 J(θ 0 ,θ 1 ):=θ 1 −α∂∂θ 1 12m ∑ i=1 m ((θ 0 +θ 1 x (i) 1 )−y (i) ) 2 :=θ 1 −αm ∑ i=1 m (θ 0 +θ 1 x (i) 1 −y (i) )x (i) 1 (4)(5)(6)
需要注意的是,只有在对所有参数
θ j
完成计算之后,才能进行更新。不能对于参数计算之后马上更新。也就是所有的参数需要同时更新(Simultaneous Update)。
上式中的
α
被称为学习率(Learning Rate),
α
决定了参数
θ j
更新的步长。
α
取值过小,会导致
J(θ)
的收敛速度过慢,
α
取值过大,则可能会导致
J(θ)
越过最小值点,进而发散。在实际操作过程中,通常采用动态
α
,即起步阶段
α
取值较大,接近极小值点时
α
开始减小。事实上在接近最小值点的时候,上式中的偏导数那一项也会减小,所以
α
取值固定也是可以的。
因为在更新参数的时候使用了
m
个数据,也就是所有的训练集数据,所以上面的梯度下降法也被称为批梯度下降法(Batch Gradient Descent)。
本文主要偏向于数学公式推导,相关视频可以参考
Andrew Ng 机器学习课程,本文相关内容也源于该课程。