【优化算法】基于梯度的优化算法

优化指的是改变 x 以最大化或最小化某个函数 f ( x ) 的任务.我们通常以最小化 f ( x ) 指代大多数的最优化问题,最大化可以通过最小化 f ( x ) 来实现。

  • 我们通常把要最大化或者最小化的函数称为目标函数(objective function) 或者准则(criterion)
  • 我们通常使用一个上标 表示最小化或最大化函数的 x 值,如 x = arg min f ( x )

在机器学习领域众多优化算法中,基于梯度的优化算法,是比较常用的一类。

首先,回忆一下微积分中 导数,偏导数,方向导数与梯度的关系

对于一个一元函数 y = f ( x ) , 梯度就是导数。

这里写图片描述

函数在某一点的导数 f ( x ) 表示的是点 x 处的斜率,它表明了输入的微小变化如何影响输出的变化: f ( x + ε ) f ( x ) + ε f ( x ) 。导数对我们很有用,因为它可以告诉我们如何更改 x 来略微的改善 y , 具体而言,我们想要找到 y 的最小值,沿着导数的负方向移动一个足够小的 ε , 得到的 f ( x ε ( f ( x ) ) ) 肯定是比 f ( x ) 要小的,我们就这样沿着导数的负方向一步一步挪来减小 f ( x ) , 去接近最低点。这种技术就是 梯度下降(gradient descent)

f ( x ) = 0 时,导数无法提供往哪个方向移动的信息,这样的点被称为临界点(critical point) 或者驻点(stationary point)。一个临界点,可能是一个 局部极小点(local minimum), 也可能是一个 局部极大点(local maximum), 还有一类是既不极大也不极小,而是一边极大一边极小的鞍点(saddle point).

梯度下降法可以找到局部最小点,但我们的目标是找到函数定义域上的全局最小点(global minimum)。 函数本身可能有一个也可能有多个全局最小点,也有可能存在不是全局最优的全局极小点,更确切地说,在深度学习领域中,我们要优化的目标函数可能含有许多不是最优的全局极小点,或者还有很多处于非常平坦区域的鞍点。尤其是当输入是多维的情况下,所有这些情况会使得优化变得非常困难。我们通常寻找使得 f ( x ) 非常小的点,不一定是那个精准的全局最小点,但是它足够小,已经满足我们的要求。

以上说了一维的情况了解概况,但是在实际中我们经常最小化的是具有多维输入的函数 f : R n R . 为了使得最小化的概念有意义,我们必须保证输出是一个标量。

这时候我们就要用到 偏导数,方向导数和梯度的概念。之前我们已经知道,梯度向量指向上坡,负梯度方向指向下坡。我们在负梯度方向上移动 x 可以减小 y .这被称为 最速下降法(method of steepest descent)梯度下降(gradient descent) . 应用最速下降法,在 x 点处建议的下一个更新的点是 x = x ε x f ( x ) . 其中 ε 学习率(learning rate), 是一个确定移动步长大小的正标量 ε 的选择是一个技术活儿,有几种不同的策略来找到最佳的 ε .

  • 一种是直接设置为一个小常数。 – 这是普通青年的做法。
  • 一种是通过计算,选择使得方向导数消失的步长。 – 这是解析青年的做法。
  • 一种是根据几个 ε 是试探计算 f ( x ε x f ( x ) , 并选择其中能产生最小目标值函数值得 ε 。 – 这是线搜索青年的做法。

最速下降法在梯度的每一个元素都为 0 的时候收敛(或者在实践中,很接近 0 时)。 在有些情况下,我们也许能够避免运行迭代求解,而是通过解方程 x f ( x ) = 0 直接跳到临界点。

以上说的梯度下降法,都是针对连续空间中的优化问题,但是其背后的解决问题的思路 – 不断地向更好的情况移动一小步–可以拓展到离散空间。 例如,递增带有离散参数的目标函数被称作爬山算法(hill climbing).

猜你喜欢

转载自blog.csdn.net/baishuo8/article/details/81433222