1.优化指的是改变x以最小化或最大化的某个函数f(x)的任务

我们通常以最小化f(x)指代大多数最优化问题。最大化可经由最小化算法 -f(x) 来实现。

我们希望最小化或最大化的函数叫目标函数,当我们对其进行最小化的时候,也叫作代价函数或损失函数或误差函数。

我们经常使用一个上标*表示最小化或最大化函数的x值: 基于梯度的优化方法, 我们通过改变x的值来最小化或者最大化函数f(x)的值。

2. 微积分概念如何于优化联系呢????

加入我们有一个函数y=f(x),其中x和y实数。这个函数的导数(Derivative)记为 基于梯度的优化方法 或者 基于梯度的优化方法,导数 基于梯度的优化方法 代表f(x)在点x处的斜率,它表明需要如何缩放输入的小变化以在输出获得相应的变化:f(x+a) = f(x)+ a基于梯度的优化方法

导数告诉我们如何更改x来略微地改善y,当基于梯度的优化方法=0的时候,导数无法提供往哪个方向的移动信息。基于梯度的优化方法=0的点称为临界点或驻点。临界点除了局部极小点(local minimum)、局部极大点(local maxmum)外,还有鞍点,鞍点(saddle points)既不是最小点也不是最大点。如下图所示:

基于梯度的优化方法

使f(x)取得全局最小值的点是全局最小点。只有一个全局最小点(global minimum)或存在多个全局最小点的函数是有可能的,还可能存在不是全局最优的局部极小点。

基于梯度的优化方法

我们经常最小化具有多维输入的函数:f:基于梯度的优化方法,为了使最小化的概念有意义,输出必须是一维的(标量)。我们用偏导数(partial derivatives)的概念针对具有多维输入的函数。偏导数 基于梯度的优化方法 衡量点x处只有 基于梯度的优化方法 增加时f(x)如何变化。

3.梯度(gradient)

**梯度是相对一个向量求导的导数(简单来说梯度就是一个导数):**f(多维函数)的导数是包含所有偏导数的向量,记做 基于梯度的优化方法 ,梯度的第i的元素是f关于xi的偏导数。

在多维情况下,临界点是梯度中所有元素都为0,即函数f对所有的偏导数都为0的情况下。在u(单位向量)的方向导数(directional derivation)是函数f在u方向的斜率。方向导数是函数f(x+基于梯度的优化方法u) 关于基于梯度的优化方法 的导数(在 基于梯度的优化方法=0 时取得)。当 基于梯度的优化方法 =0 的时候,我们可以得到偏导数,基于梯度的优化方法

为了最小化f,则我们希望可以找到f下降最快的方向,计算方向导数:

基于梯度的优化方法
(由于是多维的情况,所以梯度也是一个向量,所以可以化为俩个范数的乘积以及乘上他们夹角的余弦值。)

为了使上述方向导数最小,且||u||=1,同时我们可以忽略与决策变量无关的项,则我们可以将方向导数化为 :基于梯度的优化方法,此时可以看出,如果需要取得最小的话,则基于梯度的优化方法,则当方向向量与梯度向量方向相反的时候,我们可以获得最快的下降方向。

通俗点理解就是,梯度向量是上坡的方向,而负梯度方向是下降的方向,是坡度最大的方向。从几何角度上来理解就是,我们梯度下降法是用来一个平面来拟合一个曲面,这种优化方法被称为最速下降法或梯度下降。

最速下降点建议新的点是:基于梯度的优化方法 (如果是高维情况,这时候的x是向量,梯度也是向量),其中基于梯度的优化方法 称为步长,在很多算法中,既有固定步长也有变步长,常用的一种变步长为:基于梯度的优化方法,在这条式子中,基于梯度的优化方法为决策变量,为求出使得函数值最小的基于梯度的优化方法。这种策略称为线搜索,在阻尼牛顿法中也有用到这个一维搜索。

4.梯度之上:雅克比矩阵(Jocobian)和海森矩阵(Hessian)

—– 雅克比矩阵(Jocobian)—–

有时我们需要计算输入和输出都为向量的函数的所有偏导数。包含所有这样的偏导数的矩阵我们称之为雅克比矩阵(jocobian)。假设有函数f(x)=y,其中x和y均为向量,x为nx1矩阵,y为mx1矩阵,那么雅克比矩阵为mxn矩阵,用公式表达即为: 基于梯度的优化方法

—-海森矩阵(Hessian)—–

有时候,导数的导数(在接下来的海塞矩阵会提到),即所谓的二阶导数。假如有一个函数,输入为向量基于梯度的优化方法,输出为标量R(这个上面的jocobian有点不同),f的一阶导数(xi)关于(xj)的偏导数为 基于梯度的优化方法 , 在一维情况下,我们可以用
f”(x) 来代替 基于梯度的优化方法二阶导数告诉我们的一阶导数将如何随着输入的变化而改变。

二阶导数告诉我们:只基于梯度信息的梯度下降是否会产生如我们预期的那样大的改善,二阶导数是对曲率的衡量。对于零二阶导函数而言,曲率为0,那么就是一条直线了,仅仅靠梯度就知道它的变化是什么了,我们使用沿负梯度方向大小为 基于梯度的优化方法 的下降步的时候,如果梯度为1,那么每次就有 基于梯度的优化方法

对于二阶导数,主要的俩个几何意义有:表示曲线斜率变化的速度,表示凹凸性。
二阶导数有如下一些性质:
1.如果一个函数f(x)在某个区间的二阶导数大于0,则总有f(x)+f(y)>=2f((x+y)/2),即函数上俩个点的连线,图形的部分在该连线的下方。
如果一个函数f(x) 在某个区间的二阶导数小于0,则总有f(x)+f(y)<=2f((x+y)/2),也就是说函数上俩个点的连线,图像的部分在该连线的上方。

2.对于判断极小极大值,当一阶导等于0,二阶导大于0,极小值。
当一阶导等于0,二阶导小于0,极大值。

在牛顿法中,我们需要求二阶导,是因为牛顿法不仅求出了当前步最快下降的方向,也需要求出梯度下降最快的方向。

海森矩阵(Hessian):
Hessian矩阵H(f)(x)定义为:

基于梯度的优化方法

Hessian矩阵相当于梯度(一阶导数)的 Jocobian 矩阵,有一个很重要的性质是:微分算子在任何二阶偏导连续的点处可交换,举个简单的例子,对于函数基于梯度的优化方法, 则有基于梯度的优化方法

所以,Hessian矩阵是一个实对称矩阵,对特定方向d上的二阶导数可以写成(特征值分解):基于梯度的优化方法。当d(方向向量)是H的一个特征向量时,这个方向的二阶导数就是对应的特征值。

对于其他方向d,方向二阶导数是所有特征值的加权平均(把权重计算在内的平均方法),权重在0和1之间,且与d夹角越小的特征向量拥有更大的权重。最大特征值确定最大二阶导数,最小特征值确定最小二阶导数。

我们可以通过二阶导数来预测一个梯度下降的变化趋势,在基于梯度的优化方法处对函数二级泰勒展开,则我们有
基于梯度的优化方法

我们用g来代替梯度,用H来代替Hessian矩阵。如果使用步长(即学习速率),则新的点在上面有提过,为 基于梯度的优化方法 ,将该式代入以上泰勒展开式,可得:

基于梯度的优化方法

其中有三项:原始值,函数斜率导致的预期改善,函数曲率导致的校正。当最后一项太大时,梯度下降实际上是可能向上移动的(这里解释了阻尼牛顿法,为什么要加个阻尼系数的原因)。当基于梯度的优化方法为0或者负的时候,近似泰勒级数表明增加步长会一直导致f下降。

基于梯度的优化方法为正时,为了得到下降最快的f值,则要取一个基于梯度的优化方法,使得其下降最快,则有:

基于梯度的优化方法

那么我们可以得到一个等式,即基于梯度的优化方法,最坏的情况,就是当g与H最大特征值对应的特征向量对其时。

在临界点f’(x)=0,f”(x)>0,那么随着我们向右边移动,f’(x)增大,向左移动时,f’(x)减小,也就是说,极端的,当我们移向右边,斜率开始指向右坡的上坡,当我们移向左边时,斜率开始指向左坡的上坡。

判断局部最小点最大点:当f’(x)=0,f”(x)>0的时候,取得的是局部最小点。当f’(x)=0,f”(x)<0的时候,取得的是局部最大点。当f’(x)=0,f”(x)=0时,取得的是鞍点呢。 这就是所谓的二阶导数测试。

在多维情况下,我们需要检测函数的所有二阶导数。利用Hessian矩阵的特征值分解,可以将二阶导数扩展到多维情况。在临界点处 (基于梯度的优化方法 = 0),可以通过Hessian矩阵的特征值来判断是局大值点还是局小值点。

在前面我们有提到过,海塞矩阵的特征值其实就是对应的二阶导数,因为在特定的方向d的二阶导数我们可以写成 基于梯度的优化方法(因为H是一个实对称矩阵)。所以我们检测Hessian的特征值来判断该临界点是一个局部极大点、局部极小点还是鞍点。当Hessian矩阵是正定的(所有特征值都为正),得到的是局部极小值点。因为Hessian在任意方向都是正的,参考单变量的二阶导数测试就能得到该结果。同样的,当Hessian矩阵是负定的,这个点就是极大值点。如下图所示:

基于梯度的优化方法

如果Hessian的特征值中至少一个是正的,一个是负的,那么x是f某个横截面的局部极大值,又是另一个横截面的局部极小值,则这个可能就是鞍点了。当所有非0特征值是同号的且至少有一个特征值是0时,这个检测就是不确定的。 (这是是比较特殊的情况,注意!!)

顺便提一下凸优化:凸优化通过更强的限制(约束函数)提供更多的保证。凸优化算法只对凸函数适用——即海塞矩阵处处半正定的函数。因为这些函数没有鞍点切其所有局部极小点必然是全局最小点。

5.约束优化

在前面讲到的,我们都是在x所有可能值中进行优化的,然而我们想在x中的某些几何S 找f(x)的最大值或者最小值。则被称为约束优化。集合S内的点x被称为可行点。

待续。。。

相关文章:

  • 2021-12-25
  • 2021-09-20
  • 2022-01-17
  • 2022-12-23
  • 2021-05-23
  • 2021-04-09
  • 2021-08-03
  • 2021-08-07
猜你喜欢
  • 2021-11-10
  • 2021-04-27
  • 2021-07-18
  • 2021-11-01
  • 2021-05-20
  • 2022-12-23
  • 2021-07-31
相关资源
相似解决方案