梯度下降原理

一.问题引出

这里使用在学习梯度下降时经典的“下山问题”来引出主题。问题是这样的,某一天三个好朋友一起去爬山,到达山顶后突然起了大雾,在没有导航仪等现代科技的条件下三个人要各自找出下山的路。其中老大的性格比较沉稳每次走一步都会试图周围所有的路然后选择最陡的一条路走出下一步。老二性子比较急每次只要找到一条路就会直接走。最后老三结合了老大老二的性格特点每次走出一步都会试探周围几条路然后选择最陡的一条路继续走,问谁最先走到山底?

二.梯度下降

2.1 梯度下降简介

梯度下降法(gradient descent)是一个最优化算法,常用于机器学习和人工智能当中用来递归性地逼近最小偏差模型。求解过程 顾名思义,梯度下降法的计算过程就是沿梯度下降的方向求解极小值(也可以沿梯度上升方向求解极大值)。

2.2 定义代价函数

这里我们使用身高问题来进行定义。这个问题是身高与年龄的关系问题,显然在显示生活中身高与年龄是成正比例的是一个线性关系。假设我们已经收集了一批数据集,数据集的分布情况如下图所示:

在这里插入图片描述

从图中可以看出数据分布有着很强的线性关系,这时候我们需要找一个过原点的直线 y = θ x y=\theta{x} y=θx来拟合这些数据,如何找出一条完美的直线(也就是找出最合适的斜率 θ \theta θ)来拟合这些数据就成为了我们现在最根本的问题,我们需要找出一个算法来计算出最合适的的斜率 θ \theta θ

在这里插入图片描述

如上图,我们随机选择了一个斜率构建上面的一条直线,发现现在拟合效果其实并不好,那么我们究竟是如何衡量直线拟合的好坏与否,这时候就该误差(也称为代价)出场了,我们将这条直线 y = θ 1 x y=\theta_{1}{x} y=θ1x称为预测函数,函数上的点也就是我们在对应年龄所谓身高的一个预测值,而误差的定义也就是真实值减去预测值的差来定义的(如图中的 e 1 e_{1} e1 e 7 e_{7} e7),在这里我们会使用MSE(均方误差)来量化误差定义我们的代价函数,MSE的公式如下:
M S E ( X , h θ ) = 1 m ∑ i = 1 m ( θ T ⋅ X ( i ) − y ( i ) ) 2 MSE(X,h_{\theta})=\frac 1 m \sum_{i=1}^m( \theta^T\cdot X^{(i)}-y^{(i)})^2 MSE(X,hθ)=m1i=1m(θTX(i)y(i))2
有了上面的准备工作开始定义我的代价函数:

  1. 首先计算每个样本的误差
    e 1 = ( y 1 − θ x 1 ) 2 e_{1}=(y_{1}-\theta x_{1})^2 e1=(y1θx1)2(平方是因为误差有正有负,不仅仅有上图的情况可能会有样本点在图像下面)
    e 2 = ( y 2 − θ x 2 ) 2 e_{2}=(y_{2}-\theta x_{2})^2 e2=(y2θx2)2
    .
    .
    .
    e n = ( y n − θ x n ) 2 e_{n}=(y_{n}-\theta x_{n})^2 en=(ynθxn)2
  2. 前面求的n 项误差式展开平方,并求平均值得到平均代价e
    e = 1 n ( x 1 2 + x 2 2 + . . . . . + x n 2 ) θ 2 + ( − 2 x 1 y 1 − 2 x 2 y 2 − . . . − 2 x n y n ) θ + ( y 1 2 + y 2 2 + . . . . + y n 2 ) e=\frac 1 n(x_1^2+x_2^2+.....+x_n^2)\theta^2+(-2x_1y_1-2x_2y_2-...-2x_ny_n)\theta+(y_1^2+y_2^2+....+y_n^2) e=n1(x12+x22+.....+xn2)θ2+(2x1y12x2y2...2xnyn)θ+(y12+y22+....+yn2)
  3. 由于 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) ( x 2 , y 2 ) (x_2,y_2) (x2,y2)都是我们已知道的样本点,所以可以将上面e的部分替换为常量,得到我们的代价函数:
    e = a θ 2 + b θ + c e=a\theta^2+b\theta+c e=aθ2+bθ+c
    (由一元二次函数知道线性回归函数为一个凹函数)
    在这里插入图片描述
    由此我们可以知道斜率 θ \theta θ的取值不同,我们误差就会不同,该线性回归问题样本点的拟合过程(找最优斜率的过程)映射到代价函数上就称成为了找代价函数最小值对应的 θ \theta θ过程,而寻找的方法有两种:
    面将从两个方面讨论两种模型训练方法:
    (1) 通过直接计算出合适的 θ \theta θ
    (2)通过梯度下降(GD)不断使用迭代优化找出合适的 θ \theta θ

2.3 梯度下降实现

首先需要梯度下降的目的,其目的本质上就是找到最合适的参数(如上面的 θ \theta θ)使得代价最小也就是代价函数的最小值。梯度下降是一个迭代优化的问题,那么我们该如何进行迭代优化,这里问题又来了。
方案一:如果我们每次迭代跨度很大(也就是下山问题中步子迈的很大)会出现下面的问题:
在这里插入图片描述
虽然上面找到了最小值m,但可以发现迭代次数非常庞大,做了一些没必要的迭代
方案一:如果我们每次迭代跨度很小(也就是下山问题中步子迈的很小)会出现下面的问题:
在这里插入图片描述
按照上面的方案步子太小迭代次数太多,且在收敛到最低点m附近时会出现难以收敛或收敛不精确的问题,学习负荷太大同样不合适。那么如何选择合适的变化来适应不同点的陡峭程度(梯度)?我们结合上面两个方案的缺点我们想出了一个全新的方案:就是在陡峭的地方步子迈大一点收敛的快,在平缓的地方步子迈小一点收敛的更加精确。那么该如何实现,这时我们可以联想到我们的斜率,用斜率做我们的步子长度刚好满足新方案的要求(陡峭的地方斜率大,平缓的地方斜率小),如果直接用斜率做为步子新问题又出来了:在这里插入图片描述
我们会发现结果不尽人意,出现了发散而不收敛(个人理解时因为迭代过程为 θ n e x t = θ p r e o n e − θ n o w \theta_{next}=\theta_{preone}-\theta_{now} θnext=θpreoneθnow,我们会发现从初始点开始第一次计算结果为0,然后每次向后计算斜率都成为了负数,所以会向上发散而不是向下收敛),所以我们需要定义一个参数h(一个很小的值)来限制斜率,跌倒公式就成为了 θ n e x t = θ p r e o n e − h θ n o w \theta_{next}=\theta_{preone}-h\theta_{now} θnext=θpreonehθnow,这样迭代就会得到很丝滑的收敛效果,而这个h就是学习率

  • 最后一步就是求斜率的过程,在上面的线性拟合中斜率的求法很简单,但在实际应用中面对的预测函数常常不是一条直线,而是曲线,有就是多项式,这时候我么就需要用到多元函数微分中的偏导数来求斜率:
    在这里插入图片描述
    再由上面的公式可以推出成本函数的梯度向量
    ∇ θ M S E ( θ ) = ( ∂ m s e ( θ ) ∂ θ 0 ∂ m s e ( θ ) ∂ θ 1 . . ∂ m s e ( θ ) ∂ θ n ) = 2 m X T ⋅ ( X ⋅ θ − y ) \nabla_\theta{MSE}(\theta)=\begin{pmatrix} \frac{∂_{mse(\theta)}}{∂ _{\theta_{0}}}\\ \frac{∂_{mse(\theta)}}{∂ _{\theta_{1}}} \\ .\\ .\\ \frac{∂_{mse(\theta)}}{∂ _{\theta_{n}}} \\ \end{pmatrix}=\frac 2 m X^T \cdot (X\cdot \theta-y) θMSE(θ)= θ0mse(θ)θ1mse(θ)..θnmse(θ) =m2XT(Xθy)

2.4 循环迭代

经过上面的步骤我们已经清楚了梯度下降的流程:

  1. 定义代价函数
  2. 选择起始点
  3. 计算梯度
  4. 按学习率迭代

而循环迭代就是反复执行步骤中的3-4步骤,知道找到成本函数的最小值

2.5 总结

最后回到开始提出的下山问题,故事中提到的三类人(小心翼翼的老大,随意大胆的老二和随意中透露着小心的老三)分别代表了梯度下降的三种变种:

  1. 老大:BGP批量梯度下降
    特点:每次迭代都要用到所有样本(即每条路都要试探)
    优点:能找到最优解,并保证了精度
    缺点:迭代过程很慢
  2. 老二:SGD随机梯度下降
    特点:每次迭代只会用到一个样本数据(只试探一条路)
    优点:迭代速度很快
    缺点:精确度低
  3. 老三:MBGD小批量梯度下降(只试探部分路)
    保证精度和速度(这种类型的梯度下降使用的比较广泛)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值