梯度下降是神经网络中流行的优化算法之一。一般来说,我们希望找到最小误差函数的权重和偏差。梯度下降算法迭代地更新参数以最小化整个网络的误差。
梯度下降是一种迭代方法,可用于求解最小二乘问题(线性和非线性)。梯度下降是求解机器学习算法模型参数(即无约束优化问题)最常用的方法之一。另一种常用的方法是最小二乘法。当求解损失函数的最小值时,梯度下降法可用于逐步迭代求解,以获得最小损失函数和模型参数值。另一方面,如果我们需要求解损失函数的最大值,那么我们需要使用梯度上升法进行迭代。在机器学习中,基于基本梯度下降法,发展了两种梯度下降法,即随机梯度下降法和批量梯度下降法。
算法迭代更新损失函数梯度上的权重参数,直到达到最小值。换句话说,我们沿着损失函数的斜坡方向下坡,直到到达山谷。基本思想大致如图3.8所示。如果偏导数为负,权重增加(图的左侧),如果偏导数为正,权重减少(图的右侧)42。学习率参数决定了达到最小值所需的步数。
误差曲面
在避免局部最小值的同时找到最佳全局方案是一件非常具有挑战性的事情。这是因为误差面有许多峰和谷,如图3.9所示。误差表面在某些方向上可能是高度弯曲的,但在其他方向上可能是平坦的。这使得优化过程非常复杂。为了防止网络陷入局部最小值,通常会指定动量参数。
我早就发现使用梯度下降的反向传播通常收敛很慢或者根本不收敛。在编写第一个神经网络时,我使用了反向传播算法,它包含一个非常小的数据集。网络花了3天多的时间才收敛到一个解决方案。幸运的是,我采取了一些措施来加快这个过程。
表示尽管与反向传播相关的学习速率相对较慢,但作为前馈算法,它在预测或分类阶段相当快。
随机梯度下降
传统的梯度下降算法使用整个数据集来计算每次迭代的梯度。对于大型数据集,这将导致冗余计算,因为在更新每个参数之前,将重新计算非常相似样本的梯度。随机梯度下降是真实梯度的近似值。在每次迭代中,它随机选择一个样本来更新参数,并在样本的相关梯度上移动。因此,它沿着曲折的梯度路径到达最小值。在某种程度上,由于缺乏冗余,它往往比传统的梯度下降更快地收敛到解。
表明随机梯度下降的一个非常好的理论特征是,如果损失函数是凸的43,那么可以找到全局最小值。
代码实践
理论就足够了。接下来,敲敲真正的代码。
一维问题
假设我们需要解决的目标函数是:
()=2 1f(x)=x2 1
显然我们一眼就知道它的最小值是=0x=0,但是这里我们需要用Python代码的梯度下降法来实现它。
#!/usr/bin/env python #-*-coding : utf-8-*-‘ ‘ ‘一维问题的梯度下降方法示例’ ‘ ‘ deffunc_1d(x): ‘ ‘ ‘目标函数:paramx:自变量,标量:return:因变量,标量’ ‘ ‘ ‘ returnx**2 1defgrad_1d(x): ‘ ‘ ‘ ‘梯度3360paramx:自变量,标量3360一维问题的梯度下降法:参数梯度:目标函数的梯度:参数曲线_x:电流X值。初始值:paramlearning_rate:学习率可通过参数提供。这也相当于设置步长:paramprecision:设置收敛精度: param max _ iterators :最大迭代次数:return:局部最小值x * ‘ ‘,对于范围(max _ iterators): grade _ cur=grade(cur _ x)如果abs (grad _ cur)精度: break #当梯度接近0时,它被视为收敛cur _ x=cur _ x-grad _ cur * cur_x)打印(‘局部最小值x=’,CUR _ X)返回CUR _ XIF _ _名称_ _==’ _ _主_ _’ :梯度_下降_ 1D(梯度_ 1D,CUR _ X=10,学习_速率=0.2,精度=0.000001,最大值_迭代次数=10000)
这是多么酷啊!理解蟒蛇的眼压下降!
极牛网精选文章《酷极了!5分钟用Python理解人工智能优化算法》文中所述为作者独立观点,不代表极牛网立场。如若转载请注明出处:https://geeknb.com/2464.html