1.引言
虽然我们知道,代价函数Jθ的表达式,但是还不知道怎么去确定假设函数hθ(x)的所有参数θ0,θ1 ... θn,使得Jθ值最小。
我们还是假设hθ(x)是一个线性函数,并且只有2个参数θ0,θ1,对应特征向量x只有1维
我们的目标是使得J(θ0,θ1)最小
我们可以采用以下方法,尝试找到J(θ0,θ1)最小值
- 给θ0, θ1一个初始值,例如都等于0
- 不断改变θ0, θ1的值,并且满足J(θ0,θ1)递减,直到达到一个我们满意的最小值,此时θ0,θ1即我们所求的最佳参数值
这个算法我们称之为"梯度下降"算法
假设J(θ0,θ1)值和参数θ0,θ1满足如下3维关系图
按照前面提到的迭代方法,假设不同的θ0, θ1的初始值,我们可能会有如下两个不同的迭代过程
从前面两个图中所示,我们会发现θ0, θ1初始值不同的时候,我们会找到不同局部最小值,这个特点正是"梯度下降"算法的特点,虽然很多时候都只会有一个全局的最小值
2.梯度下降-初步了解
根据前面的介绍,当只有2个参数θ0, θ1的时候,可以定义梯度下降算法的函数,如下
特别说明:
- := 表示赋值,例如a := b 表示把b的值赋值给a
- = 表示判断是否相等,例如 a = b表示判断a等于b
- 重复上述过程,直到函数收敛,得到的θ0, θ1值即为最佳参数值
- α我们称为learning rate,如果α的值太大则迭代的步伐太大,反应在图上即下降的速率太大,可能导致错过了局部最小值;如果α的值太小则迭代的步伐太小,反应在图上即下降的速率太小,会导致求解过程太慢。
- 注意,我们发现等式右边被减数是一个 求偏导数,如果不了解偏导数(参考https://zh.wikipedia.org/wiki/%E5%81%8F%E5%AF%BC%E6%95%B0)
- 另外还有一个需要注意的是,所有的参数必须需要同步更新,所谓同步更新如下图所示
注意:
- 当learning rate太大的时候,可能会出现overshoot the minimum现象,类似下图所示情况发生
- 当函数接近局部最小值的时候,所求偏导数值将会逐渐递减,梯度下降法将自动的采取“小步子”, 所以没有必要随着时间的推移减小learning rate.
3.梯度下降-线性回归
还是假设只有2个参数线性回归模型
- 左边是线性回归的模型,hθ(x)表示假设函数,J(θ0,θ1)则表示的是代价函数
- 右边是梯度下降的算法定义
J(θ0,θ1)对于θ0和θ1分别求导,可得
证明过程如下所示
特别注意: θ0和θ1的值需要同步更新
4.梯度下降-多个参数线性回归
很多时候,我们的假设函数hθ(x)不止2个参数,可能会有n+1个参数θ0,θ1,θ2 ... θn,此时对应特征向量x有n维
因此我们可以得到n个参数的线性回归模型
对于这个n个参数的线性回归函数,我们可以得到对应的梯度下降算法
展开求偏导数后,可得
总结: 这里的梯度下降算法也称为”Batch” 梯度下降: 因为梯度下降的每一步都使用了所有的训练样本。