拟牛顿法

几种常见的优化算法

百般思念 提交于 2020-03-10 22:18:28
转自:http://www.cnblogs.com/maybe2030/   我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题“在一定成本下,如何使利润最大化”等。最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优的一些学科的总称。我们学习和工作中遇到的大多问题都可以建模成一种最优化模型进行求解,比如机器学习算法,大部分的机器学习算法的本质都是建立优化模型,通过最优化方法对目标函数(或损失函数)进行优化,从而训练出最好的模型。常见的最优化方法有梯度下降法、牛顿法和拟牛顿法、共轭梯度法等等。 1. 梯度下降法(Gradient Descent)   梯度下降法是最早最简单,也是最为常用的最优化方法。梯度下降法实现简单,当目标函数是 凸函数 时,梯度下降法的解是 全局解 。一般情况下,其解不保证是全局最优解,梯度下降法的速度也未必是最快的。 梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是”最速下降法“。最速下降法越接近目标值,步长越小,前进越慢。 梯度下降法的搜索迭代示意图如下图所示: 梯度下降法的缺点:   (1)靠近极小值时收敛速度减慢,如下图所示;   (2)直线搜索时可能会产生一些问题;   (3)可能会“之字形

机器学习-牛顿法和拟牛顿法

守給你的承諾、 提交于 2020-02-23 18:06:00
介绍牛顿法和拟牛顿法 数值分析 牛顿法 牛顿法是解方程 f ( x ) = 0 f(x)=0 f ( x ) = 0 的一种方法,取根附近的一点 x 0 x_0 x 0 ​ 做为初值,反复迭代得到最终近似解。迭代方法如下: 首先将 f ( x ) f(x) f ( x ) 泰勒展开 f ( x ) ≈ f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f(x)\approx f(x_0)+f^{'}(x_0)(x-x_0) f ( x ) ≈ f ( x 0 ​ ) + f ′ ( x 0 ​ ) ( x − x 0 ​ ) 于是方程可以近似表示为 x ≈ x 0 − f ( x 0 ) f ′ ( x 0 ) x \approx x_0-\frac{f(x_0)}{f^{'}(x_0)} x ≈ x 0 ​ − f ′ ( x 0 ​ ) f ( x 0 ​ ) ​ 将此f(x)比f(x_0)更接近0(严格上需要数学证明收敛性,这里略) 得到递推公式: x k + 1 = x k − f ( x k ) f ′ ( x k ) x_{k+1} =x_k-\frac{f(x_k)}{f^{'}(x_k)} x k + 1 ​ = x k ​ − f ′ ( x k ​ ) f ( x k ​ ) ​ 下面用一个例子加深理解: 解方程: x e x − 1 =

拟牛顿法 分析与推导

只谈情不闲聊 提交于 2020-02-13 22:20:19
  针对牛顿法中海塞矩阵的计算问题,拟牛顿法主要是使用一个海塞矩阵的近似矩阵来代替原来的还塞矩阵,通过这种方式来减少运算的复杂度。其主要过程是先推导出海塞矩阵需要满足的条件,即拟牛顿条件(也可以称为拟牛顿方程)。然后我们构造一个满足拟牛顿条件的近似矩阵来代替原来的海塞矩阵。   另外,在满足拟牛顿条件的基础上如何构造近似的海塞矩阵,这有很多种方法,比如:DFP算法,BFGS算法,L-BFGS算法以及Broyden类算法等。本文主要介绍前两种算法构造近似还塞矩阵。 1、拟牛顿条件 那么,如何构造一个近似海塞矩阵呢?即构造出来的近似海塞矩阵需要满足哪些条件呢?为此,我们先来看下牛顿法中的海塞矩阵是如何推导出来的。 在牛顿法中,首先对函数f(x)在x=x k+1 处进行泰勒展开,即: 然后对f(x)求偏导: 在牛顿法中,到此步后我们就已经得到了海塞矩阵,然后对f(x)的导数赋值为0,得到x的值。 但是我们这次是为了得到海塞矩阵需要满足的条件,于是我们令x=x k 得到: 即: 为了简化下面的符号表达式,令: 于是有: 上式中B k+1 为海塞矩阵,D k+1 为海塞矩阵的逆矩阵。 到了此步,我们可以看出海塞矩阵需要满足(式1.1)这个条件。那么在满足此条件的基础上如何构造近似海塞矩阵呢?下面介绍两个方法:DFP算法和BFGS算法。 1、DFP算法 该算法的核心思想在于通过迭代的方法

梯度下降法和牛顿法区别及拟牛顿法介绍

匿名 (未验证) 提交于 2019-12-03 00:30:01
梯度下降法和牛顿法都是求解无约束最优化问题的常用方法。 假设 f ( x ) f ( x ) Ϊ R n R n 上具有一阶连续偏导数的函数,要求姐的无约束最优化问题为 min x ∈ R n f ( x ) min x ∈ R n f ( x ) x x 表示目标函数的极小点。下面分别介绍梯度下降法和牛顿法。 梯度下降法是一种迭代算法。选取适当的初值 x ( 0 ) x ( 0 ) ,不断迭代,更新 x x 的值,进行目标函数的极小化,直到收敛。因为负梯度方向是使函数值下降最快的方向,在迭代的每一步,以扶梯度方向更新 x x 的值,从而达到减少函数值的目的。 由于 f ( x ) f ( x ) 具有一阶连续偏导数,若第k次迭代值为 x ( k ) x ( k ) ,则可将 f ( x ) f ( x ) 在 x ( k ) x ( k ) 附近进行一阶泰勒展开: f ( x ) = f ( x ( k ) ) + g T k ( x x ( k ) ) (1.1) (1.1) f ( x ) = f ( x ( k ) ) + g k T ( x x ( k ) ) 这里, g k = g ( x ( k ) ) = f ( x ( k ) ) g k = g ( x ( k ) ) = f ( x ( k ) ) Ϊ f ( x ) f ( x ) 在 x ( k ) x (

梯度下降法、牛顿法与拟牛顿法markdown

匿名 (未验证) 提交于 2019-12-02 23:49:02
前人栽树,后人乘凉,既然前人已经完成了的工作,我觉得没必要做重复的工作,“拿来主义”对于我个人的入门和学习是必要的。在此谢谢他们。内容来自: https://cloud.tencent.com/developer/article/1326787,如果有侵权,联系我删除。 梯度下降算法 先上个公式,镇一下: Θ 1 = Θ 0 α J ( Θ ) \Theta^{1}=\Theta^{0}-\alpha \nabla J(\Theta) Θ 1 = Θ 0 α J ( Θ ) 其中 J ( Θ ) \nabla J(\Theta) J ( Θ ) 就是梯度, \nabla 称为梯度算子。此公式的意义是:J是关于Θ的一个函数,我们当前所处的位置为 Θ 0 \Theta^{0} Θ 0 点,要从这个点走到J的最小值点,也就是山底。首先我们先确定前进的方向,也就是梯度的反向,然后走一段距离的步长,也就是α,走完这个段步长,就到达了 Θ 1 \Theta^{1} Θ 1 这个点!下面就这个公式的几个常见的疑问: α是什么含义? α在梯度下降算法中被称作为学习率或者步长,意味着我们可以通过α来控制每一步走的距离,以保证不要步子跨的太大扯着蛋,哈哈,其实就是不要走太快,错过了最低点。同时也要保证不要走的太慢,导致太阳下山了,还没有走到山下。所以α的选择在梯度下降法中往往是很重要的

【优化方法】拟牛顿法之DFP算法

匿名 (未验证) 提交于 2019-12-02 23:34:01
上一篇 牛顿法(Newton Method) 中介绍了牛顿法的基本思路,牛顿法具有二阶收敛性,相比较最速下降法,收敛的速度更快。 但是牛顿法也有一个缺点就是:求解Hessian矩阵复杂度比较大 对于函数 f ( X ) f(X) f ( X ) ,其中 X = [ x 1 , x 2 , … , x n ] T X=[x_1,x_2,…,x_n ]^T X = [ x 1 , x 2 , … , x n ] T 为向量。在牛顿法的求解过程中,首先是将 f ( X ) f(X) f ( X ) 函数在 X k + 1 X^{k+1} X k + 1 处展开,并且令 f ( X ) f(X) f ( X ) 函数在 X k + 1 X^{k+1} X k + 1 处的梯度为: f ( X k + 1 ) = [ f x 1 , f x 2 , … , f x n ] T f ( X k + 1 ) = [ x 1 f , x 2 f , … , x n f ] T 泰勒展开为: f ( X ) = f ( X k + 1 ) + f ( X k + 1 ) T ( X X k + 1 ) + 1 2 ( X X k + 1 ) T G k + 1 ( X X k + 1 ) + + o f ( X ) = f ( X k + 1 ) + f ( X k + 1 ) T ( X X k

牛顿法和拟牛顿法

半腔热情 提交于 2019-11-28 16:03:55
牛顿法和拟牛顿法 牛顿法(Newton method)和拟牛顿法(quasi Newton method)是求解无约束最优化问题的常用方法,收敛速度快。牛顿法是迭代算法,每一步需要求解海赛矩阵的逆矩阵,计算比较复杂。拟牛顿法通过正定矩阵近似海赛矩阵的逆矩阵或海赛矩阵,简化了这一计算过程。 牛顿法 我们假设点 x ∗ 为函数 f ( x ) 的根,那么有 f ( x ∗ ) =0。现在我们把函数 f ( x ) 在点 x k 处一阶泰勒展开有: 假设点 x k + 1 为该方程的根,则有: 可以得到 这样我们就得到了一个递归方程,我们可以通过迭代的方式不断的让 x趋近于 x ∗ 从而求得方程 f ( x ) 的解。 最优化问题 对于最优化问题,其极值点处一阶导数为0。因此我们可以在一阶导数处利用牛顿法通过迭代的方式来求得最优解,即相当于求一阶导数对应函数的根。 首先,我们对函数在 x 0 点处进行二阶泰勒展开 对x求导可得 由于在极值点处 ,于是 从而可以得出下一个x的位置 其迭代形式为 对于多维函数, 二阶导数就变成了一个海森矩阵 , 二阶泰勒展开公式如下: 图中的 便是海森矩阵 。 迭代公式就变成了 。 我们可以看到,当 H k 为正定( H k -1 也正定 )的时候,可以保证牛顿法的搜索方向是向下搜索的。 拟牛顿法 当特征特别多的时候,求海森矩阵的逆矩阵,运算量是非常大且慢