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