梯度下降法求解线性回归

it2023-05-20  85

梯度下降法求解一元线性回归问题

这是一元线性回归的平方损失函数 L o s s = 1 2 ∑ i = 1 n ( y i − y i ^ ) 2 = 1 2 ∑ i = 1 n ( y i − ( w x i + b ) ) 2 Loss=\frac{1}{2}\sum^n_{i=1}(y_i-\hat{y_i})^2=\frac{1}{2}\sum^n_{i=1}(y_i-(wx_i+b))^2 Loss=21i=1n(yiyi^)2=21i=1n(yi(wxi+b))2

这里的样本点x和y都是已知的,变量是w和b。

我们的目标是找到使损失函数达到最小值的w和b。

如果我们能够确定这个损失函数是一个凸函数,那么就可以采用梯度下降法来求解,把损失函数中的平方项展开,可以得到这样的形式。

= 1 2 ∑ i = 1 n x i 2 w 2 + b 2 + 2 x i w b − 2 y i b − 2 x i y i w + y i 2 =\frac{1}{2}\sum^n_{i=1}x_i^2w^2+b^2+2x_iwb-2y_ib-2x_iy_iw+y_i^2 =21i=1nxi2w2+b2+2xiwb2yib2xiyiw+yi2

再把 ∑ \sum 求和这一部分展开,对 w 2 w^2 w2 w b wb wb w w w b b b这些变量进行合并整理,分别提取公因式系数,用ABCDE表示将所有的常数项合并得到F。 = A w 2 + B b 2 + C w b + D w + E b + F =Aw^2+Bb^2+Cwb+Dw+Eb+F =Aw2+Bb2+Cwb+Dw+Eb+F 虽然我们不知道这个公式中的系数,ABCDE和F具体是什么,但是我们可以先考察它的这个近亲 f ( x , y ) = x 2 + y 2 + x y + x + y + 1 f(x, y)=x^2+y^2+xy+x+y+1 f(x,y)=x2+y2+xy+x+y+1 这是这个函数的图形。 看上去像一个大碗,它显然是一个三维空间中的凸函数求极值的问题,也就是求解这个碗底的坐标。这两个函数相比只是系数不同,因此我们可以确定这个Loss函数一定也是一个凸函数,因此它可以直接采用梯度下降法来求解。

这个平方损失函数 L o s s = 1 2 ∑ i = 1 n ( y i − y i ^ ) 2 = 1 2 ∑ i = 1 n ( y i − ( w x i + b ) ) 2 Loss=\frac{1}{2}\sum^n_{i=1}(y_i-\hat{y_i})^2=\frac{1}{2}\sum^n_{i=1}(y_i-(wx_i+b))^2 Loss=21i=1n(yiyi^)2=21i=1n(yi(wxi+b))2是一个二元凸函数,变量是w和b,根据二元函数的梯度下降法就可以得到它的权值更新算法。

w ( k + 1 ) = w ( k ) − η ∂ L o s s ( w , b ) ∂ w w^{(k+1)}=w^{(k)}-\eta\frac{\partial{Loss(w, b)}}{\partial{w}} w(k+1)=w(k)ηwLoss(w,b)

b ( k + 1 ) = b ( k ) − η ∂ L o s s ( w , b ) ∂ b b^{(k+1)}=b^{(k)}-\eta\frac{\partial{Loss(w, b)}}{\partial{b}} b(k+1)=b(k)ηbLoss(w,b)

将Loss函数对w和b的偏导数带入,就可以得到最终的迭代公式。 总结一下 一元线性回归可以转化为一个二元函数求极值的问题,一元线性回归中的一元是指自变量,x只有一个求解。 一元线性回归的问题,就是损失函数求极值的问题,它的损失函数中有两个未知数,w和b,因此是二元函数。一元线性回归可以用二维空间中的一条直线来表示,他的损失函数是三维空间中的一个凸函数,因为是凸函数,所以可以采用梯度下降法来求解。

除了平方损失函数,在编程中我们经常使用均方差损失函数,这里的n是样本数量。 这是它的参数更新算法。

梯度下降法求解多元线性回归问题

我们也可以把梯度下降法求解一元线性回归的方法推广到多元线性回归中,这是多元线性回归的模型。

Y ^ = X W \hat{Y}=XW Y^=XW

其中的X和W都是m+1维的向量

W = ( w 0 , w 1 , … , w m ) T W=(w_0, w_1, \dots,w_m)^T W=(w0,w1,,wm)T X = ( x 0 , x 1 , … , x m ) T X=(x^0, x^1, \dots,x_m)^T X=(x0,x1,,xm)T

这是它的损失函数

L o s s = 1 2 ( Y − Y ^ ) 2 = 1 2 ( Y − X W ) 2 Loss=\frac{1}{2}(Y-\hat{Y})^2=\frac{1}{2}(Y-XW)^2 Loss=21(YY^)2=21(YXW)2

它是一个高维空间中的凸函数,可以使用梯度下降法来求解,这是权值更新算法,带入它的偏导数,可以得到最终的迭代公式。

W ( k + 1 ) = W ( k ) − η ∂ L o s s ( W ) ∂ W W^{(k+1)}=W^{(k)}-\eta\frac{\partial{Loss(W)}}{\partial{W}} W(k+1)=W(k)ηWLoss(W)

∂ L o s s ∂ W = X T ( X W − Y ) \frac{\partial{Loss}}{\partial{W}}=X^T(XW-Y) WLoss=XT(XWY)

W ( k + 1 ) = W ( k ) − η X T ( X W − Y ) W^{(k+1)}=W^{(k)}-\eta{X^T(XW-Y)} W(k+1)=W(k)ηXT(XWY)

在梯度下降法中,学习率 η \eta η是一个比较小的常数,用来缓和每一步调整全值的程度。 学习率越大,步长越大,学习率越小,步长也越小。 从理论上来说,对于凸函数,只要学习率设置得足够小,就可以保证一定收敛,但是如果设置得过小,可能需要的迭代次数非常多,训练的时间非常长,甚至一直达不到极值点。 学习率设置的比较大,可能会产生震荡,在这当中也可能慢慢收敛。 如果学习率设置的过大,那么就可能产生严重的震荡,导致系统无法收敛。 可见,学习率的选择非常重要,既不能太大也不能太小,我们可以根据经验进行设置,也可以让它随着迭代次数的增加而逐渐衰减学习率,这个参数不是通过训练得到的,而是在开始学习之前就设置好的这种参数成为超参数,选择一组好的超参数,可以提高学习的性能和效果。

最新回复(0)