划重点!十分钟掌握牛顿法凸优化

简介: 之前,我发过一篇文章,通俗地解释了梯度下降算法的数学原理和推导过程,推荐一看。链接如下:简单的梯度下降算法,你真的懂了吗?

我们知道,梯度下降算法是利用梯度进行一阶优化,而今天我介绍的牛顿优化算法采用的是二阶优化。本文将重点讲解牛顿法的基本概念和推导过程,并将梯度下降与牛顿法做个比较。


1   牛顿法求解方程的根


有时候,在方程比较复杂的情况下,使用一般方法求解它的根并不容易。牛顿法通过迭代的方式和不断逼近的思想,可以近似求得方程较为准确的根。


牛顿法求根的核心思想是泰勒一阶展开。例如对于方程 f(x) = 0,我们在任意一点 x0 处,进行一阶泰勒展开:

image.png

image.png

image.png

image.png


2   牛顿法凸优化


上一部分介绍牛顿法如何求解方程的根,这一特性可以应用在凸函数的优化问题上。


机器学习、深度学习中,损失函数的优化问题一般是基于一阶导数梯度下降的。现在,从另一个角度来看,想要让损失函数最小化,这其实是一个最值问题,对应函数的一阶导数 f'(x) = 0。也就是说,如果我们找到了能让 f'(x) = 0 的点 x,损失函数取得最小值,也就实现了模型优化目标。


现在的目标是计算 f'(x) = 0 对应的 x,即 f'(x) = 0 的根。转化为求根问题,就可以利用上一节的牛顿法了。


与上一节有所不同,首先,对 f(x) 在 x0 处进行二阶泰勒展开:

image.png

image.png

3  梯度下降 VS 牛顿法


现在,分别写出梯度下降和牛顿法的更新公式:

image.png


梯度下降算法是将函数在 xn 位置进行一次函数近似,也就是一条直线。计算梯度,从而决定下一步优化的方向是梯度的反方向。而牛顿法是将函数在 xn 位置进行二阶函数近似,也就是二次曲线。计算梯度和二阶导数,从而决定下一步的优化方向。一阶优化和二阶优化的示意图如下所示:

image.png


以上所说的是梯度下降和牛顿法的优化方式差异。那么谁的优化效果更好呢?


首先,我们来看一下牛顿法的优点。第一,牛顿法的迭代更新公式中没有参数学习因子,也就不需要通过交叉验证选择合适的学习因子了。第二,牛顿法被认为可以利用到曲线本身的信息, 比梯度下降法更容易收敛(迭代更少次数)。如下图是一个最小化一个目标方程的例子, 红色曲线是利用牛顿法迭代求解, 绿色曲线是利用梯度下降法求解。显然,牛顿法最优化速度更快一些。


image.png


然后,我们再来看一下牛顿法的缺点。我们注意到牛顿法迭代公式中除了需要求解一阶导数之外,还要计算二阶导数。从矩阵的角度来说,一阶导数和二阶导数分别对应雅可比矩阵(Jacobian matrix)和海森矩阵(Hessian matrix)。

image.png


牛顿法不仅需要计算 Hessian 矩阵,而且需要计算 Hessian 矩阵的逆。当数据量比较少的时候,运算速度不会受到大的影响。但是,当数据量很大,特别在深度神经网络中,计算 Hessian 矩阵和它的逆矩阵是非常耗时的。从整体效果来看,牛顿法优化速度没有梯度下降算法那么快。所以,目前神经网络损失函数的优化策略大多都是基于梯度下降。


值得一提的是,针对牛顿法的缺点,目前已经有一些改进算法。这类改进算法统称拟牛顿算法。比较有代表性的是 BFGS 和 L-BFGS。


BFGS 算法使用近似的方法来计算 Hessian 矩阵的逆,有效地提高了运算速度。但是仍然需要将整个 Hessian 近似逆矩阵存储起来,空间成本较大。


L-BFGS 算法是对BFGS 算法的改进,不需要存储 Hessian 近似逆矩阵, 而是直接通过迭代算法获取本轮的搜索方向,空间成本大大降低。


总的来说,基于梯度下降的优化算法,在实际应用中更加广泛一些,例如 RMSprop、Adam等。但是,牛顿法的改进算法,例如 BFGS、L-BFGS 也有其各自的特点,也有很强的实用性。

相关文章
|
敏捷开发 Devops 测试技术
构建软件质量保障体系
构建软件质量保障体系
1009 0
|
负载均衡 前端开发 算法
聊聊高并发应用中电商秒杀场景的方案实现
聊聊高并发应用中电商秒杀场景的方案实现
896 0
|
机器学习/深度学习 人工智能 算法
一文了解人工智能中常用的优化算法
优化算法包含很多种,如果按梯度类型进行划分,可以分为有梯度优化算法和无梯度优化算法,在大多数人工智能技术中常用有梯度优化算法,当然也会有些场景也会用到无梯度优化算法,比如在强化学习中会用到黑盒优化算法cma-es、贝叶斯优化等,有些时候也会用到遗传算法和粒子群优化算法。本文主要讲解机器学习\深度学习中一些常用的优化算法,梯度下降法、动量法momentum、Adagrad、RMSProp、Adadelta、Adam,介绍不同算法之间的关联和优缺点,后续会继续分享其他的算法,
一文了解人工智能中常用的优化算法
|
机器学习/深度学习 数据可视化 算法
【视频】支持向量机SVM、支持向量回归SVR和R语言网格搜索超参数优化实例
【视频】支持向量机SVM、支持向量回归SVR和R语言网格搜索超参数优化实例
|
11月前
|
人工智能 安全 测试技术
信条:阿里云AI攻防安全启示录
解读AI时代下的安全攻防新态势
1586 12
|
11月前
|
存储 数据可视化 数据库
低代码开发如何快速入门?今天做一期详细介绍
低代码平台旨在解决传统开发中业务需求频繁变更、技术加班严重及上线周期长等问题。织信平台作为一款强大的“业务系统搭建工具箱”,通过拖拽式配置与逻辑设定,让业务人员参与基础功能构建,加速系统实现。其核心模块包括团队管理、应用开发、数据表设计、工作流配置、角色权限控制等,支持多场景应用如问卷调查与数据分析。新手仅需3-5天即可完成基础系统搭建,逐步扩展复杂功能,实现高效协同开发。
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
331 5
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
477 3
|
网络协议 应用服务中间件 nginx
Nginx的http块sendfile,keepalive_timeout的配置指令说明
Nginx的http块sendfile,keepalive_timeout的配置指令说明
|
网络协议 应用服务中间件 Shell
HTTPS之acme.sh申请证书
1.关于let's encrypt和acme.sh的简介 1.1 let's encrypt Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。
11046 2

热门文章

最新文章