梯度降落是神经网络中盛行的优化算法之一。一样平常来说,我们想要找到最小化偏差函数的权重和毛病。梯度降落算法迭代地更新参数,以使团体网络的偏差最小化。

梯度降落是迭代法的一种,可以用于求解最小二乘题目(线性和非线性都可以)。在求解呆板学习算法的模子参数,即无束缚优化题目时,梯度降落(Gradient Descent)是最常接纳的方法之一,另一种常用的方法是最小二乘法。在求解丧失函数的最小值时,可以通过梯度降落法来一步步的迭代求解,得到最小化的丧失函数和模子参数值。反过来,假如我们必要求解丧失函数的最大值,这时候就必要用梯度上升法来迭代了。在呆板学习中,基于根本的梯度降落法开展了两种梯度降落方法,分别为随机梯度降落法和批量梯度降落法。
该算法在丧失函数的梯度上迭代地更新权重参数,直至到达最小值。换句话说,我们沿着丧失函数的斜坡方向下坡,直至到达山谷。根本头脑大抵如图3.8所示。假如偏导数为负,则权重增添(图的左边部门),假如偏导数为正,则权重减小(图中右半部门) 42 。学习速率参数决定了到达最小值所需步数的巨细。

随机梯度最小化的根本头脑

偏差曲面
探求全局最好方案的同时制止局部极小值是一件很有挑衅的事变。这是由于偏差曲面有许多的峰和谷,如图3.9所示。偏差曲面在一些方向上大概是高度弯曲的,但在其他方向是平展的。这使得优化过程非常复杂。为了制止网络陷入局部极小值的田地,通常要指定一个冲量(momentum)参数。

图3.9 典范优化题目的复杂偏差曲面
我很早就发现,利用梯度降落的反向流传通常收敛得非常迟钝,大概根本不收敛。在编写第一个神经网络时,我利用了反向流传算法,该网络包罗一个很小的数据集。网络用了3天多的时间才收敛到一个办理方案。幸亏我接纳一些步伐加速了处置惩罚过程。
阐明 固然反向流传相干的学习速率相对较慢,但作为前馈算法,其在展望大概分类阶段是相称快速的。

随机梯度降落
传统的梯度降落算法利用整个数据集来盘算每次迭代的梯度。对于大型数据集,这会导致冗余盘算,由于在每个参数更新之前,非常相似的样本的梯度会被重新盘算。随机梯度降落(SGD)是真实梯度的近似值。在每次迭代中,它随机选择一个样原来更新参数,并在该样本的相干梯度上移动。因此,它遵守一条曲折的通往极小值的梯度路径。在某种水平上,由于其缺乏冗余,它每每能比传统梯度降落更快地收敛到办理方案。
阐明 随机梯度降落的一个非常好的理论特性是,假如丧失函数是凸的 43 ,那么包管能找到全局最小值。
代码实践
理论已充足多了,接下来敲一敲着实的代码吧。
一维题目
假设我们必要求解的目的函数是:
()=2+1f(x)=x2+1

显然一眼就知道它的最小值是 =0x=0 处,但是这里我们必要用梯度降落法的 Python 代码来实现。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
一维题目的梯度降落法示例
"""
def func_1d(x):
"""
目的函数
:param x: 自变量,标量
:return: 因变量,标量
"""
return x ** 2 + 1
def grad_1d(x):
"""
目的函数的梯度
:param x: 自变量,标量
:return: 因变量,标量
"""
return x * 2
def gradient_descent_1d(grad, cur_x=0.1, learning_rate=0.01, precision=0.0001, max_iters=10000):
"""
一维题目的梯度降落法
:param grad: 目的函数的梯度
:param cur_x: 当前 x 值,通过参数可以提供初始值
:param learning_rate: 学习率,也相称于设置的步长
:param precision: 设置收敛精度
:param max_iters: 最大迭代次数
:return: 局部最小值 x*
"""
for i in range(max_iters):
grad_cur = grad(cur_x)
if abs(grad_cur) < precision:
break # 当梯度趋近为 0 时,视为收敛
cur_x = cur_x - grad_cur * learning_rate
print("第", i, "次迭代:x 值为 ", cur_x)
print("局部最小值 x =", cur_x)
return cur_x
if __name__ == '__main__':
gradient_descent_1d(grad_1d, cur_x=10, learning_rate=0.2, precision=0.000001, max_iters=10000)
就是这么酷吧!用Python明白剃度降落,喜好的小同伴点个关注、转发、收藏哦!
说点什么...