优化算法

优化算法比较

https://zhuanlan.zhihu.com/p/32230623

adam缺点

https://zhuanlan.zhihu.com/p/32262540

优化算法的选择

https://zhuanlan.zhihu.com/p/32338983

牛顿法

只用到了目标函数的一阶导数信息(迭代方向),而牛顿法则用到了二阶导数信息
牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
数据量大的时候会很慢。

  • 牛顿法起始点不能离局部极小值点太远,否则可能不收敛
  • 更新二阶hessian 矩阵,维度高的时候耗内存
  • 梯度下降靠近最优点时候有震荡,牛顿法一步到位(最明显是二阶函数)

对函数f(x)进行泰勒展开到二阶,得到

求导,令为


得:

基本牛顿法的流程:

  1. 给定终止误差值 0 \leq \varepsilon \ll 1, 初始点 x_{0} \in \mathbb{R}^{n},k=0
  2. 计算 g_{k}=\nabla f\left(x_{k}\right),\left\|g_{k}\right\| \leq \varepsilon, 则停止, 输出 x^{*} \approx x_{k}
  3. 计算 G_{k}=\nabla^{2} f\left(x_{k}\right), 并求解线性方程组得解 d_{k}: G_{k} d=-g_{k}
  4. \widehat{\mathbf{\gamma}}^{x_{k+1}}=x_{k}+d_{k,}, k=k+1, 并转2。

全局牛顿法的流程:

  1. 给定终止误差值 0 \leq \varepsilon \ll 1, \delta \in(0,1), \sigma \in(0,0.5), 初始点 x_{0} \in \mathbb{R}^{n},k=0
  2. 计算 g_{k}=\nabla f\left(x_{k}\right), 若| \left|g_{k}\right| \mid \leq \varepsilon, 则停止, 输出 x^{*} \approx x_{k}
  3. 计算 G_{k}=\nabla^{2} f\left(x_{k}\right), 并求解线性方程组得解 d_{k}: G_{k} d=-g_{k}
  4. m_{k} 是不满足下列不等式的最小非负整数 m: \quad f\left(x_{k}+\delta^{m} d_{k}\right) \leq f\left(x_{k}\right)+\sigma \delta^{m} g_{k}^{T} d_{k}
  5. \hat{>} \alpha_{k}=\delta^{m_{k}}, x_{k+1}=x_{k}+\alpha_{k} d_{k}, k=k+1, 并转2。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。