Batch 梯度下降算法求解线性回归

568 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

线性回归函数

hθ(x(i))=θ1x(i)+θ0h_θ(x^{(i)})=θ_1x^{(i)}+θ_0

其中ii =1,2,……,m表示样本

损失函数

J(θ0,θ1)=12mi=1m(hθ(x(i))y(i))2J(θ_0,θ_1)=\frac{1}{2m}\sum_{i=1}^m(h_θ(x^{(i)})−y^{(i)})^2

12\frac{1}{2} 在这里是为了之后求导运算,将系数归1

函数图形如图在这里插入图片描述

1. 对损失函数求偏导
J(θ0,θ1)θj=1mi=0m(hθ(xi)yi)θj(hθ(xi)yi)=1mi=0m(hθ(xi)yi)θj(yij=0nθjxji)=1mi=0m(hθ(xi)yi)xji\begin{aligned} \frac{\partial J(θ_0,θ_1)}{\partial\theta_j} & = \frac1m\sum_{i=0}^m(h_\theta(x^i)-y^i) \frac{\partial}{\partial\theta_j}(h_\theta(x^i)-y^i) \\ & = \frac1m\sum_{i=0}^m(h_\theta(x^i)-y^i) \frac{\partial}{\partial\theta_j}(y^i-\sum_{j=0}^n\theta_jx_j^i) \\ & = \frac1m\sum_{i=0}^m(h_\theta(x^i)-y^i)x^i_j \end{aligned}

其中j=0,1表示特征数,i表示样本数,x0i=1x_0^i=1 (用F代替偏导数)

2. 每次迭代同步更新θ1θ2θ_1 θ_2
θj:=θjα1mi=1m(hθ(x(i))y(i))xj(i)θ_j:=θ_j−α\frac{1}{m}\sum_{i=1}^m(hθ(x^{(i)})−y^{(i)})x^{(i)}_j
temp1 = θ1-αF
temp2 = θ2-αF
θ1 = temp1
θ2 = temp2

每次更新θ值,图像上的点会向梯度反方向移动,同时意味着θ值也不断接近最小值靠近。当θ值不变时,也就意味着此时导数为0,到达最小值

3. 不同学习率α值对于整个梯度下降过程的影响

当α值过小时,每次下降的程度非常小,导致接近最小值的过程较长 在这里插入图片描述

当α值过大时,每次步幅下降程度较大,会导致容易错过,最优解,最终反而导致无法 收敛甚至发散 在这里插入图片描述

对于α值的选择可以通过损失函数的最小值变化与迭代次数的走势来观察,正常情况会一直下降不断趋于平缓,若反而上升或者来回波动,则说明α值可能取值较大,试着换更小值

注意

即使α值不变时,也可以通过梯度下降不断迭代到最小值。当θ值较大时,所计算的到的梯度值也较大,此时如粉色,下降较大的一步,而此后,新的θ值所计算得到的偏导值会不断减小,也就是说函数图像下降的比较缓慢,此时下降的步幅也就较小。

所以并不一定需要在迭代的过程中修改α值 在这里插入图片描述

此方法属于贪心算法的一种,所以容易陷入局部最优解,而无法取得全局最优。最终结果取值与初始值的选取关系很大。

当然,若是凸函数只有一个最优解,则局部最优解也是全局最优解

另外Batch意味着每次迭代更新参数时,都需要计算所有数据,所以才被称作批处理,数据量大时,计算时间会较长

附矩阵方程直接求解

Θ=(XTX)1XTY\pmb{\Theta} = (\pmb{X^TX})^{-1}\pmb{X^TY}