1. 前提回顾
已知:代价函数,希望找到对应的参数
使得
最小
思路:令从任意值开始(一般设置为
=0);每次微小改变
直到
最小
![](https://img.haomeiwen.com/i13975801/fb5ff0d47b3dc806.jpg)
2. 梯度下降的直观感受
假设代价函数这样,横坐标为
,纵坐标为
![](https://img.haomeiwen.com/i13975801/b7ac9705e8f5b5f6.jpg)
课程中有个很形象的比喻:将上图的这个代价函数比作公园里的山地,想象一下你站立在这座红色山上,要寻找最快下山的路线。走一步之后再寻找下一步的方向,如此循环,直到达到局部最小处。(对应左边的黑路线)
假设这次开始的位置比刚才靠右了一些,那么这次寻找的路线可能就和第一次不一样(右边的黑色路线),直到到达第二个局部最优处。
3. 梯度下降的数学原理
细节1:下式中是学习率,若
很大,那么梯度下降就很快(迈大步下山)
![](https://img.haomeiwen.com/i13975801/6d6b550c5de9fa24.jpg)
细节2:需要同步更新,下图中展示了两种更新方法,一种正确一种错误。错误方法错误之处在于:先更新了
,用更新完的
再去更新
,没有做到同步
![](https://img.haomeiwen.com/i13975801/896728b313ee4f33.jpg)
python
传参说明:
X:特征,比如一个城市的人口,假设有97个样本,维度为97*2
theta:
y: label,比如对应的商户盈利
myiter:迭代次数
myalpha:
def gradientDescent(X,theta,y,myiter,myalpha):
m=X.shape[0] #获取样本数
parament_len=X.shape[1]#需要的 $\theta$
cost=np.zeros(myiter)
for i in range(myiter):
error=X*theta.T-y #97*2 2*1=97*1
for j in range(parament_len):
term=np.multiply(error,X[:,j])# 对应位相乘,结果为97*1
theta[0,j]=theta[0,j]-(myalpha/m)*np.sum(term)
cost[i]=computecost(X,theta,y)
return theta,cost
为深入探究这些表达式的含义,仍然从一个参数开始讨论,当
在最低点右侧(下图)时,
, 根据
,
会减小,靠近最低点
![](https://img.haomeiwen.com/i13975801/54f0c6910704a048.jpg)
同理可得,当
此时,再来看一下
,就很容易理解为什么
过大或者过小时会发生什么
过小时,
每次更新移动的步伐会很小,需要很长时间才能到达最低点;
过大时,会直接越过最低点,甚至离最低点越来越远以致不能收敛
![](https://img.haomeiwen.com/i13975801/d81348383cbb7323.png)
还有一点,即是固定的,也可以收敛到最低点。假设最初的点是下图中粉色,这点点斜率较陡峭,下一个更新的绿点会距离粉点较远;但绿点的斜率已经没有之前那么陡,所以下下一个红点会距离绿点近一些……以此类推直到到达最低点!
![](https://img.haomeiwen.com/i13975801/5e6637a01d59a170.jpg)
4. 线性回归的梯度下降
将之前学习的梯度下降和线性回归的平方差代价函数结合
![](https://img.haomeiwen.com/i13975801/60df6584be29b2c4.jpg)
可以得到下式
![](https://img.haomeiwen.com/i13975801/774ab0f22be5ef54.jpg)
再不断迭代上式直至参数收敛
![](https://img.haomeiwen.com/i13975801/9dec7892ba2468bf.jpg)
收敛过程中我们比较担心会陷入局部最优,但是对于线性回归代价函数总是“凸函数”,即总有全局最优解。如下图所示
![](https://img.haomeiwen.com/i13975801/34f1512150e89e78.jpg)
处于同一等高线上的对应相同值的
,有相同的代价值。当
向汇聚点靠近时,
由负变正,斜率变化很明显。
![](https://img.haomeiwen.com/i13975801/e4b416cab58f81aa.png)
等高线的图中显示了从初始化的值一步步到收敛的最小值过程,左边显示了对应更新的时
的变化
![](https://img.haomeiwen.com/i13975801/e458a37d38d9d0c0.jpg)
5. 总结
上面的梯度下降算法中,迭代用到了全部的样本,称之为batch梯度下降;也有非batch梯度下降,即关注了样本的小子集
网友评论