您的位置:首页 > 理论基础 > 计算机网络

BP 神经网络中的基础算法之二 —— 梯度下降算法

2018-02-06 21:03 459 查看
在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法,关于最小二乘法,可参考笔者的上一篇博客 BP 神经网络中的基础算法之一 —— 最小二乘法

何为梯度?

在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数 f(x,y), 分别对 x,y 求偏导数,求得的梯度向量就是 (∂f/∂x,∂f/∂y)T,简称 gradf(x,y)或者 ∇f(x,y)。对于在点 (x0,y0) 的具体梯度向量就是 (∂f/∂x0,∂f/∂y0)T.或者 ∇f(x0,y0),如果是3个参数的向量梯度,就是 (∂f/∂x,∂f/∂y,∂f/∂z)T,以此类推。

那么这个梯度向量求出来有什么意义呢?他的意义从几何意义上讲,就是函数变化增加最快的地方。具体来说,对于函数 f(x,y),在点 (x0,y0),沿着梯度向量 (∂f/∂x0,∂f/∂y0)T 的方向就是 f(x,y) 增加最快的地方。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是 −(∂f/∂x0,∂f/∂y0)T 的方向,梯度减少最快,也就是更加容易找到函数的最小值。

梯度下降算法详解

这里先给出一个形象直观的解释(道士下山):道士有一天和道友一起到一座不太熟悉的山上去玩,在兴趣盎然中很快地登上了山顶。但天佑不测风云,下起了雨。如果这时需要道士和其同来的道友以最快的速度下山,那么咋办呢?

由于不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步地走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。

一句话总结:梯度是一个向量,它指向函数值上升最快的方向。

从上面的解释可以看出,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。

从以上例子可以看出,梯度下降算法就是不停地寻找某个节点中下降幅度最大的那个趋势进行迭代计算,直到将数据收缩到符合要求的范围为止。由此,我们可以写出梯度下降的公式:

xnew=xold−α∇f(x)

其中,∇是梯度算子,∇f(x) 就是指 f(x) 的梯度。α 是步长,也就是学习率

关于目标函数 ∇f(x) 的推导,可参考博文:线性单元和梯度下降。

梯度下降法的缺陷和解决之道

梯度下降算法在神经网络特别是机器学习中应用较广,但是由于其天生的缺陷,噪音较多,使得在计算过程中并不是都向着整体最优解的方向优化,往往可能只是一个局部最优解。因此为了克服这些困难,一个最好的办法就是增大数据量,在不停地使用数据进行迭代处理的时候,能够确保整体的方向是全局最优解,或者最优结果在全局最优解附近。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: