梯度下降算法_初识梯度下降和牛顿法

梯度下降和牛顿法都是用来求解最优化问题的,在机器学习中应用甚广,尤其是梯度下降,它在各种分类和回归模型的求解中都会用到。那什么是梯度下降,什么是牛顿法呢,本文就带你一探究竟。

梯度下降

假定最优化的目标是求解使得

c3b1e5a967e21330bbccbaabba178cb6.png

取最小值时的待估参数

9eed514b5435740568c8db6a497de21c.png

,我们来看梯度下降是如何来求解待估参数的:

1 初始化待估参数

初始化

9eed514b5435740568c8db6a497de21c.png

,可以认为设定一个初值,当然也可以让计算机随机生成。

2 循环迭代

采用如下公式对待估参数就行循环迭代:

e0020f26ed7f0e538b4918be0d69f2cd.png

其中,

4eef79d31a84c173eec59e74d57befb8.png

为一阶偏导数即所谓的梯度,可以看到每次迭代,会向梯度相反的方向移动

7224f4281f07bcb3b33d6339e640c54f.png

,这里

7ee0ad719b0f8188f45080c062316be2.png

为步长,如果步长太小,迭代可能导致太慢,如果步长太大,可能可能跳过局部最小值,不能保证收敛,所以计算时需要选取合适的

7ee0ad719b0f8188f45080c062316be2.png

进行迭代运算。

3 计算完成

71d169c90bf4b5be2417d66d71273d65.png

不再减小或者达到预设的循环上界时,计算终止。

实际上,上述梯度下降算法为批量梯度下降,本文以仅此为例来讲解,因为当你理解之后你会发现,其他类型的梯度下降算法均为此算法的变种。

牛顿法

待优化问题同上述梯度下降算法。

1 初始化待估参数

同上。

2 循环迭代

循环迭代的公式如下:

133068205d70a600644e36595cd5159d.png

其中,

e7f3229882a9951ec751c7bb7a42feaf.png

为一阶偏导数,

60bb9ec50f8c26b842c053a05c4378ee.png

为二阶导,这个公式实际上是

077178ec73e0283445a21bdcd2cb5f33.png

fed58681eccc5be54dc170d7a9e15c63.png

处的二阶泰勒展开式的变形,由于它考虑了目标函数的二阶导,因此它的收敛速度也更快,但是它对目标函数的要求也更严格,需要存在二阶导。而且从上式中还可以看到它与梯度下降的另外一个区别是不需要设置步长参数了。

3 计算完成

71d169c90bf4b5be2417d66d71273d65.png

不再减小或者达到预设的循环上界时,计算终止。

R语言实现

了解了两种算法的基本概念后,我们尝试封装R函数,来实现对一元线性回归模型系数的估计。

1 样例数据

采用蒙特卡洛模拟生成一组变量数据x和y:

# generate random data # y ~ a + b*xset.seed(2017)n 
77dd7c738388337a1aedcf7312fabd3b.png

可以看到这两组数据之间存在明显的线性相关。于是我们可以采用一元线性回归模型去拟合,形如:

5d5cd2e13e9ab1c059b25aa1dd9091f1.png

求解上述模型就是要估计出上式中截距项

ce05a87cb0f21d6b49bbd2cdf45d8988.png

和斜率

31c0a97703c79f4fa14562bdb2764058.png

的大小。接下来我们就分别采用梯度下降和牛顿法来求解上述模型。

2 编写函数

构造普通线性回归的损失函数:

49131af15ef489ccd504266a35ffe918.png

梯度下降和牛顿算法的目的就是要极小化上述残差平方和。上代码:

# gradient descent algorithmgd = M ) break i = M ) break i 

3 对比算法效果

查看梯度下降和牛顿算法的效果,并将其与系统自带函数的估计结果做对比:

# compare two algorithmsres.gd 

可以看到,梯度下降经过2964步后收敛,牛顿算法经过仅仅123步就收敛。这是因为牛顿算法考虑了二阶导,即梯度的变化,所以他在迭代次数上显得比梯度下降更有优势。

3 迭代路径可视化

# plot for gradient descent algorithm nr 
3aea431332b91141e66ea3ea76ad43a8.png
# plot for Newton's method a0 
b1981075f84bba605a1731e90546e420.png

总结

梯度下降算法和牛顿法各有优劣:

梯度下降法考虑了目标函数的一阶偏导、以负梯度方向作为搜索方向去寻找最小值,需要认定合适的步长,迭代次数多,容易陷入局部最小值。

牛顿法同时考虑了目标函数的一、二阶偏导数,相当于考虑了梯度的梯度,所以能确定合适的搜索方向加快收敛,但牛顿法要求也更严格,目标函数必须存在连续的一、二阶偏导数,且海森矩阵必须正定,迭代次数虽少,但是当待估参数较多时,单次的运算量会远大于梯度下降算法。

所以在具体的数据分析和挖掘中,需要权衡利弊后再选择更为合适的算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值