人工智障学习笔记——梯度下降(1)基础变种

版权声明:QQ 1397097104 微信 nine_sun666 有问题随时联系~ https://blog.csdn.net/sm9sun/article/details/81905175

一、概念

梯度下降法(gradient descent)是一个最优化算法,常用于机器学习和人工智能当中用来递归性地逼近最小偏差模型。梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一。

二、原理

平时我们说的训练神经网络就是最小化损失函数的过程,损失函数的值衡量了模型在给定数据集下的表现(拟合)能力。那么如何能迅速的使损失函数的值走向最低点呢?我们假设:位于三维空间里的任意一个点都可以找到与之相切的平面,在高维的情况下也能找到超平面与其相切。那么在相切平面上的任意一个点都有多种方向,但只有一个方向能使该函数值上升最快,这个方向我们称之为梯度方向,而这个梯度方向的反方向就是函数值下降最快的方向,这就是梯度下降的过程

三、变种

3.1  Batch gradient descent (BGD)

BGD(批量梯度更新)。就是一次性把所有样本同时计算之后得到梯度值,然后更新参数。这种方法十分简便,它对凸函数可以收敛到全局最优值,对于非凸函数则收敛到局部最优值。与此同时它缺点显而易见:在大数据量下内存占用巨大、计算时间久,并且无法进行在线更新。其需要计算整个训练集的梯度,即:

θ=θ−η∇θJ(θ)

其中 η 为学习率,用来控制更新的“力度”。

优点:

对于凸目标函数,可以保证全局最优; 对于非凸目标函数,可以保证一个局部最优。

缺点:

速度慢; 数据量大时不可行; 无法在线优化(即无法处理动态产生的新样本)。

3.2 Stochastic gradient descent (SGD)

扫描二维码关注公众号,回复: 3468591 查看本文章

面对 BGD 的瓶颈 SGD 应运而生,它每次只更新一个样本,相对比于 BGD ,它的收敛速度更快并且可以在线更新,有机会跳出局部最优。仅计算某个样本的梯度,即针对某一个训练样本 xixi 及其label yiyi更新参数:

θ=θ−η∇θJ(θ;xi,yi)

逐步减小学习率,SGD表现得同BGD很相似,最后都可以有不错的收敛。

优点:

更新频次快,优化速度更快; 可以在线优化(可以无法处理动态产生的新样本);一定的随机性导致有几率跳出局部最优(随机性来自于用一个样本的梯度去代替整体样本的梯度)

缺点:

随机性可能导致收敛复杂化,即使到达最优点仍然会进行过度优化,因此SGD得优化过程相比BGD充满动荡。

3.3 Mini-batch gradient descent (MBGD)

由于 SGD 无法利用矩阵操作加速计算过程,考虑到上述两种方法的优缺点,就有了小批量梯度下降算法(MBGD),每次只选取固定小批量数据进行梯度更新。MBGD)计算包含n 个样本的mini-batch的梯度:

θ=θ−η∇θJ(θ;x(i:i+n),y(i:i+n))

MBGD是训练神经网络最常用的优化方法。

优点:

参数更新时的动荡变小,收敛过程更稳定,降低收敛难度;可以利用现有的线性代数库高效的计算多个样本的梯度。

3.4面临的挑战

1. 如何选择合适的学习率?

学习率过小导致收敛太慢,过大又导致收敛动荡甚至偏离最优点。

2. 如何确定学习率的调整策略?

目前调整学习率基本都按照一种 “退火”的思想,要么按照预定模式调整,要么根据目标函数值的变化是否满足阈值动态改变学习率。 但是,“模式”和“阈值”都需要事先指定,无法自适应不同数据集。

3. 对所有参数的更新采用相同的学习率是否恰当?

如果数据是稀疏的且特征分布不均,似乎我们更应该给予较少出现的特征一个大的更新。

4. 如何跳出局部最优?

理论上只有严格的凸函数才可以通过梯度下降获得全局最优解。 但是,神经网络所面临的基本上都是严重非凸的目标函数,这也意味着优化容易陷入局部最优。 事实上,我们的困难往往来自 “鞍点” 而非局部极小点。 鞍点周围通常拥有相同的损失函数值,这导致SGD很难发挥作用,因为每个方向的梯度都接近于0。

猜你喜欢

转载自blog.csdn.net/sm9sun/article/details/81905175