梯度下降(Gradient descent)

21 篇文章 19 订阅
17 篇文章 5 订阅

梯度下降算法的定位

梯度下降算法是一种求解局部最小值的算法,在线性模型和非线性模型中都可以用。

在用某个模型对数据进行拟合时,会用损失函数(或者叫错误函数等等)去评估拟合的准确性,这个时候往往要找到损失函数的最小值,即求出达到最佳拟合效果时各参数的值。求函数的最小值时往往用到梯度下降法。

从二维空间的线性回归说起

假设平面上有n个点: (x1, y1), (x2, y2), …, (xn, yn).
现在要找出一条直线去拟合这些点(即找出x和y的线性关系)。

首先要构造一个损失函数去评估拟合的好坏,最小二乘法是最常见的方法(其实就是用误差的平方和去构造损失函数)。
设拟合函数为 y ^ = m x + b ( y ^ 为 x 对 应 的 y 的 估 计 值 ) \hat{y}=mx+b (\hat{y}为x对应的y的估计值) y^=mx+b(y^xy),则损失函数为:
E = ∑ i = 1 n ( m x i + b − y i ) 2 E=\sum_{i=1}^{n}(mx_i+b-y_i)^2 E=i=1n(mxi+byi)2

下面有两种方法去求参数m和b:
1,传统的统计学方法:求m和b的值使得E最小。

要求函数的最小值,首先想到的就是求导数,令导数等于零(这个例子是奏效的,应该能够证明这个函数是凸函数,用其它先验知识也能知道它的形状)。

于是分别求m和b的偏导数,令其等于零:
∂ E ∂ m = 2 ∑ i = 1 n ( m x i + b − y i ) x i = 0 \frac{\partial E}{\partial m}=2\sum_{i=1}^{n}(mx_i+b-y_i)x_i=0 mE=2i=1n(mxi+byi)xi=0
∂ E ∂ b = 2 ∑ i = 1 n ( m x i + b − y i ) = 0 \frac{\partial E}{\partial b}=2\sum_{i=1}^{n}(mx_i+b-y_i)=0 bE=2i=1n(mxi+byi)=0

解得:
m = x y ‾ − x ˉ y ˉ x 2 ‾ − x ˉ 2 m=\frac{\overline{xy}-\bar{x}\bar{y}}{\overline{x^2}-\bar{x}^2} m=x2xˉ2xyxˉyˉ

b = x 2 ‾ y ‾ − x y ‾ x ˉ x 2 ‾ − x ˉ 2 b=\frac{\overline{x^2}\overline{y}-\overline{xy}\bar{x}}{\overline{x^2}-\bar{x}^2} b=x2xˉ2x2yxyxˉ

2,用梯度下降的方法去求m和b
随便设定一个初始的m和b值,同时learning rate ( α \alpha α)也需要提前设置。

不妨设 m 0 = b 0 = 0 , α = 0.0001 m_0=b_0=0, \alpha = 0.0001 m0=b0=0,α=0.0001
经过一次迭代, m 0 和 b 0 m_0和b_0 m0b0分别变成 m 1 和 b 1 m_1和b_1 m1b1
m 1 = m 0 − α ∂ E ∂ m 0 m_1=m_0-\alpha\frac{\partial E}{\partial m_0} m1=m0αm0E
b 1 = b 0 − α ∂ E ∂ b 0 b_1=b_0-\alpha\frac{\partial E}{\partial b_0} b1=b0αb0E
m 0 和 b 0 m_0和b_0 m0b0都已知的情况下, ∂ E ∂ m 0 和 ∂ E ∂ b 0 \frac{\partial E}{\partial m_0}和\frac{\partial E}{\partial b_0} m0Eb0E很容易求出来。
。。。
经过N(比如10000,一般要人为设置次数)次这样的迭代,就会得到 m N 和 b N m_N和b_N mNbN的值,不出意外,这里的 m N 和 b N m_N和b_N mNbN跟传统的解法得到的值基本一样。

拓展到多维空间的线性回归

假设在n+1维空间,有m个点:(x11, x12, …, x1n, y1), (x21, x22, …, x2n, y2), …, (xm1, xm2, …, xmn, ym)

用最小二乘法去构造损失函数:
E = ∑ i = 1 m ( w 1 x i 1 + w 2 x i 2 + . . . + w n x i n + b − y i ) 2 E=\sum_{i=1}^{m}(w_1x_{i1}+w_2x_{i2}+ ... +w_nx_{in} +b-y_i)^2 E=i=1m(w1xi1+w2xi2+...+wnxin+byi)2
(向量写法为 E = ∑ i = 1 m ( w T x i + b − y i ) 2 E=\sum_{i=1}^{m}(w^Tx_i+b-y_i)^2 E=i=1m(wTxi+byi)2)

对每一个系数分别求导数为:
∂ E ∂ w 1 = 2 ∑ i = 1 m ( w T x i + b − y i ) x i 1 \frac{\partial E}{\partial w_1}=2\sum_{i=1}^{m}(w^Tx_i+b-y_i)x_{i1} w1E=2i=1m(wTxi+byi)xi1
∂ E ∂ w 2 = 2 ∑ i = 1 m ( w T x i + b − y i ) x i 2 \frac{\partial E}{\partial w_2}=2\sum_{i=1}^{m}(w^Tx_i+b-y_i)x_{i2} w2E=2i=1m(wTxi+byi)xi2

∂ E ∂ w n = 2 ∑ i = 1 m ( w T x i + b − y i ) x i n \frac{\partial E}{\partial w_n}=2\sum_{i=1}^{m}(w^Tx_i+b-y_i)x_{in} wnE=2i=1m(wTxi+byi)xin
∂ E ∂ b = 2 ∑ i = 1 m ( w T x i + b − y i ) \frac{\partial E}{\partial b}=2\sum_{i=1}^{m}(w^Tx_i+b-y_i) bE=2i=1m(wTxi+byi)
写成梯度的形式为:
∇ E = ( ∂ E ∂ w 1 , ∂ E ∂ w 2 , . . . , ∂ E ∂ w n , ∂ E ∂ b ) T \nabla E=(\frac{\partial E}{\partial w_1}, \frac{\partial E}{\partial w_2}, ..., \frac{\partial E}{\partial w_n}, \frac{\partial E}{\partial b})^T E=(w1E,w2E,...,wnE,bE)T
梯度实际上就是对多变量函数的每一个变量求偏导数,再按一定的顺序组成向量或者矩阵。

接下来,和二维空间中一样,对每一个变量分别进行迭代,直到得到理想的结果。

再拓展到非线性模型

对于非线性模型,迭代方法与线性模型一样,用一般的公式来展示比较麻烦,因此举一个例子比较容易理解。

假如有如下的非线性方程组:
在这里插入图片描述
与之相关的函数为:
在这里插入图片描述
构造损失函数:
在这里插入图片描述
迭代前初始化参数:
在这里插入图片描述
开始进行迭代:
在这里插入图片描述
在这里插入图片描述

Reference

Gradient Descent: All You Need to Know
Why do we subtract the slope * a in Gradient Descent?
Gradient descent from wikipedia

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值