牛顿法

2023-11-19

牛顿法被称为牛顿-拉夫逊(Newton-Raphson)方法。牛顿在17世纪提出用来求解方程的根。

假设点x*位函数f(x)的根,则f(x*)=0。

将函数f(x)在点处进行一阶泰勒展开有:

假设点为函数f(x)的根,则有:

那么可以得到:

牛顿法通过迭代的方式求解方程f(x)=0的解。

 

牛顿法求解目标函数极值

对于最优化问题,极值点处函数的一阶导数为0

可以对一阶导数利用牛顿法通过迭代的方式来求得最优解,即相当于求一阶导数对应函数的根。

牛顿法是二阶最优化算法。

对多元函数,一阶导数换成梯度:,二阶导数换成海森(Hessian)矩阵H,

则牛顿法迭代公式为:

牛顿法求解目标函数极值步骤:

1、从t=0开始,初始化为随机值;

2、计算目标函数f(x)在点的梯度和海森矩阵

3、计算移动方向:(一般用线性方程组计算。线性方程组求解可用共轭梯度等方法求解)。

4、根据迭代公式,更新x的值:

5、判断是否满足迭代终止条件。如果满足,循环结束,返回最佳参数和目标函数最小值;否则转到第2步。

与一阶梯度法,移动方向为:

 

拟牛顿法

牛顿法比一般的梯度下降法收敛速度快。

但在高维情况下,计算目标函数的二阶偏导数的复杂度大,而且有时候目标函数的海森矩阵无法保持正定,不存在逆矩阵,此时牛顿法将不再能使用

因此,人们提出了拟牛顿法(Quasi-Newton Methods):不用二阶偏导数构造出可以近似Hessian矩阵(或Hessian矩阵的逆矩阵)的正定对称矩阵,进而再逐步优化目标函数。

不同的Hessian矩阵构造方法产生了不同的拟牛顿法:

BFGS/L-BFGS

 

拟牛顿条件

在t次迭代后,得到

将目标函数f(x)在处进行二阶泰勒展开:

两边同时取梯度运算▽,得到

,令,则

引入记号,则

令B表示H的近似,D表示的近似,根据

得到拟牛顿条件为:

或:

 

BFGS

BFGS算法是Broyden,Fletcher,Goldfarb,Shanno四位研究者发明出来的,被认为是数值效果最好的拟牛顿法,并且具有全局收敛性和超线性收敛速度。

BFGS算法使用迭代法逼近Hessian矩阵:

初始值为单位矩阵,因此关键是如何构造

为了保证矩阵B的正定性,令,代入

,得到:

代入

得到:

不防令,代入

代入:

牛顿法中需要计算Hessian矩阵的逆矩阵。

根据Sherman-Morrison公式,可得到

Sherman-Morrison公式:若A为非奇异方阵,,则

BFGS更新参数的流程:

1、从t=0开始,初始化

2、计算移动方向:

3、更新x的值:

4、

5、若,迭代终止;

6、计算:

7、t=t+1,转第2步。

 

L-BFGS

L-BFGS(limited memory BFGS)不直接存储Hessian矩阵,而是通过存储计算过程中产生的来计算Hessian矩阵,从而减少参数存储所需空间。

BFGS中Hessian矩阵更新公式为:

则:

展开:

一般地:

计算将需要用到。如果只能存储m组,从0开始,可以计算

要丢弃一部分的话,丢弃较早生成的那些

则计算,只存储了,丢弃了

由于丢弃了部分信息,只能近似计算

当t>m+1时,构造近似公式:

计算是为了得到搜索方向

利用上面的公式,设计快速计算的方法

1、初始化:

2、向后循环:

3、向前循环:

4、

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

牛顿法 的相关文章

  • 浏览器播放rtsp视频流:3、rtsp转webrtc播放

    浏览器播放rtsp视频流 3 rtsp转webrtc播放 文章目录 浏览器播放rtsp视频流 3 rtsp转webrtc播放 1 前言 2 rtsp转webRTC 3 初步测试结果 4 结合我们之前的onvif gSoap cgo的方案做修
  • z-index 与 元素的层叠顺序

    z index 属性设置元素的堆叠顺序 拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面 注释 元素可拥有负的 z index 属性值 注释 Z index 仅能在定位元素上奏效 例如 position absolute 说明 该属
  • Basic Level 1018 锤子剪刀布 (20分)

    题目 大家应该都会玩 锤子剪刀布 的游戏 两人同时给出手势 胜负规则如图所示 现给出两人的交锋记录 请统计双方的胜 平 负次数 并且给出双方分别出什么手势的胜算最大 输入格式 输入第 1 行给出正整数 N 1 0 5
  • c++ 学习之set和multiset区别

    区别 set不允许有重复的值 multiset可以有重复的值 代码示例 include
  • 技术干货分享,万字长文深度解读机器翻译

    编者按 在 机器翻译是如何炼成的 上 的文章中 我们回顾了机器翻译的发展史 在本篇文章中 我们将分享机器翻译系统的理论算法和技术实践 讲解神经机器翻译具体是如何炼成的 读完本文 您将了解 神经机器翻译模型如何进化并发展成令NLP研究者万众瞩
  • CF、SF、OF、ZF标志位

    没学汇编 这种题我真是做一道错一道 OF overflow flag 溢出标志位 溢出标志位 OF 1 表示带符号整数运算时结果发生溢出 对于无符号整数运算 OF没有意义 对于有符号数的溢出判断方式有 1 采用一位符号位 思想为 或 则为溢
  • 利用dbnet分割条形码与文字(代码+模型)+知识蒸馏+tensorrt推理+利用pyzbar和zxing进行条形码解析

    一 DBnet 1 代码链接 分割条形码与文字代码 github链接 GitHub zonghaofan dbnet torch you can use dbnet to detect word or bar code Knowledge
  • CocosCreator之KUOKUO带你做小小赛车-摄像机跟随

    本次引擎2 0 5 编辑工具VSCode 目标 小小赛车 先亮素材 很简单 就两个 爱给网中的赛道 以及一个小车 好了 让我们新建工程然后把赛道放进去 调整方向与大小 然后把小车拖上去 这样 我是把赛道放大了2倍 旋转了90度 拖一拖位置
  • onclick传参使用function()

    对于有需要传参的按钮 需要按照以下的方式进行 直接上代码
  • 9、Linux(Ubuntu 18)安装Redis以及C操作Redis

    扩展知识 头文件搜索 Linux中库的头文件 首先include有两种写法 一种是 include 另一种是 include xxx 这两种写法的区别是 include xxx 会首先在当前目录下搜索头文件 不递归 如果找不到的话再去系统目
  • 3分钟玩转:ES6 模块化

    ES6 模块 ES6 使用 export 和 import 导出和导入模块 导出模块 一个模块就是一个独立的 JS 文件 该文件内的变量外部无法获取 若希望能让外部获取模块内的变量 则要用 export 关键字暴露变量 分别暴露 命名行内导
  • Windows11右键菜单太烦人,简单几步即可恢复旧版完整菜单

    Windows 11已经推出一段时间了 相比Windows 10 界面确实美观了不少 同时也有很多新的设计 但是并不是每个人都能很快适应这种新设计 被广泛吐槽的一点就是右键菜单的改变 增加了显示更多选项 原来的很多右键选项被隐藏起来了 原本
  • tkinter 的界面美化库:ttkbootstrap 使用教程

    嗨害大家好鸭 我是芝士 tkbootstrap 是一个基于 tkinter 的界面美化库 使用这个工具可以开发出类似前端 bootstrap 风格的 kinter 桌面程序 如果会 tkinter 学习起来就会非常简单 如果不会的话只要先花
  • opencv python contours结构

    opencv python contours结构 经常需要构造 如果没记住内部具体结构 需要到网上处找 且找不到 就要自己findcontours然后打印出来 比较麻烦 contours的结构 比如一个box有xmin ymin xmax
  • 今天发现一个好网站 http://www.phpv.net/

    该网站的空间速度快 资料丰富 容易搜索 更新快 爽
  • 运维之道

    方法一 rc local 1 由于在centos7中 etc rc d rc local的权限被降低了 所以需要赋予其可执行权 chmod x etc rc d rc local 2 赋予脚本可执行权限 假设 opt script auto
  • pytorch训练error

    问题一 在pytorch上训练分割模型时 出现cuda runtime error 59 device side assert triggered at xxx 解决办法 通过CUDA LAUNCH BLOCKING 1 python3 m
  • python----小数点精度控制round()

    python版本也会影响结果 python2把x四舍五入为远离0的最近倍数 如round 0 5 1 round 0 5 1 python3则会把x四舍五入为最近的偶数倍数 如round 0 5 0 round 1 5 2 0 round
  • 查看解决inode使用率100%的问题

    今天登录后端服务器查看 发现程序报错日志中存在磁盘空间不足的情况 df h后发现磁盘空间充足 df ih发现 app分区inode使用率100 开始查找原因 进到 app 下 然后 for i in do echo i find i wc
  • hashMap常见的问题解答

    1 HashMap的数据结构 hashmap采取数组 链表的数据结构 在遇到哈希冲突的时候采用链表结构来解决哈希冲突 jdk1 8后分成了两种情况 bucket中元素个数大于8的时候 自动转换为红黑树的结构 目的是因为链表的查询速度比较慢

随机推荐

  • vue+element table 合并列

    vue element table 合并列
  • 【TCP/IP详解 卷一:协议】TCP的小结

    前言 TCP学习的综述 在学习TCP IP协议的大头 TCP协议 的过程中 遇到了很多机制和知识点 详解中更是用了足足8章的内容介绍它 TCP协议作为 应用层 和 网络层 中间的 传输层协议 既要为下面的网络层协议保证连接的可靠性 IP协议
  • 通过Jib将Springboot应用通过Docker部署

    一 安装Docker 1 更新Yum包 yum update 2 卸载旧版本 如果安装过旧版本的话 1 删除软件包 yum remove y docker docker client docker client latest docker
  • 【Espruino】NO.14 温湿度传感器DHT11

    http blog csdn net qwert1213131 article details 35828873 本文属于个人理解 能力有限 纰漏在所难免 还望指正 小鱼有点电
  • 环境变量是如何生效的——以Linux操作系统为例

    什么是环境变量 从我们学习Java开始 就经常接触一个东西 PATH 也叫环境变量 环境变量是操作系统提供给应用程序访问的简单 key value字符串 windows linux mac都有同样的概念 环境变量的作用 当我们拥有一个可执行
  • Git版本回退并强制推送到远端

    Git版本回退并强制推送到远端 本文参考廖雪峰的Git教程 前言 本文章解决问题的前提是本人不小心修改了本地代码仓库的最外层目录权限 不知道原权限是什么 导致本地git提示几十个文件被修改过 实际内容并未修改 可能是目录权限改变被git识别
  • C++ - 继承 一些 细节 - 组合 和 继承的区别

    前言 本篇博客基于 C 继承 chihiro1122的博客 CSDN博客 之上列出一些例子 如果有需要请看以上博客 继承的例子 例1 上述例子应该选择 C 首先不用说 p3肯定是指向 d 对象的开头的 p1 也是指向 d 对象的开头的 不同
  • 机器学习即服务:关于情感分析的10个应用场景和4个服务

    情感分析是什么 用户生成内容的爆炸式增长和档案材料的数字化创造了大量的数据集 其中包含了许多人对几乎每一个主题发表的观点 在某些情况下 该数据的生成是通过用户界面构造的 例如 在电子商务网站上处理客户评论相对容易 因为用户需要在产品评论的文
  • C++模板基础(六)

    类模板与成员函数模板 使用 template 关键字引入模板 template class B 类模板的声明与定义 翻译单元的一处定义原则 template
  • html5页面刷新时显示新数据,用ajax使网页不刷新就可以显示新数据

    用AjaxPro的 1 在引用中添加引用AjaxPro dll 我用的是这个 支持asp net 1 1 和asp net 2 0 2 web config中建立HttpHandler 3 新建一个类Demo 这个类里面提供了查询数据库和输
  • 怎么在html中复制粘贴图片,如何复制其他网页上的文章和图片

    首先 我们并不建议直接复制别人的内容 以免侵权 但是不排除在某些情况下 需要将其他网页上的内容完整的复制到你的网站中 比如 将自己的微博文章复制到自己的网站 大部分人都知道这个简单的方法 先选中目标文字按CTRL C快捷键 然后再网站后台文
  • AngularJS学习之全局API(应用程序编程接口)

    1 AngularJS全局API用于执行常见任务的Javascript函数集合 比较对象 迭代对象 转换对象 2 全局API函数使用angularJS对象进行访问 以下是通用API函数 angular lowercase 转换字符串为小写
  • Unity用Vuforia做AR实现脱卡效果

    有时在识别目标丢失后我们仍希望虚拟物体能够出现在摄像机前 或者到一个特定的位置 我们能对其进行操作 这就是脱卡功能 自带的脱卡功能应该是ExtendedTracking 允许模型在识别图丢失的时候还存在 位置不变 在丢失的时候的位置 这样也
  • 用Python实现火车票查询(含票价版)

    用Python实现火车票查询 含票价版 写在前面 网上关于用Python3编写火车查询脚本的版本众多 我在前人的基础上编写了自己的这个版本 我觉得的写的这个版本有以下几个特色 1 智能引导输入 我一直比较喜欢这种方式 如果直接做成GUI的图
  • 基于分位数回归的门控循环单元QRGRU时间序列区间预测。(主要应用于风速,负荷,功率)包含评价指标R2,MAE,MBE,区间覆盖率,区间平均宽度。

    清空环境变量 warning off 关闭报警信息 close all 关闭开启的图窗 clear 清空变量 clc 清空命令行 导入数据 时间序列的单列数据 result xlsread 数据集 xlsx 数据分析 num samples
  • Sublime Text配置anaconda环境

    Ref https blog csdn net pptde article details 110791950 spm 1001 2101 3001 6661 1 utm medium distribute pc relevant t0 n
  • docker创建CentOS云主机(docker实践)

    基于Ubuntu操作系统 从零开始构建一套docker虚拟化平台 docker的产物为 容器 docker构建容器 Nginx WEB docker启动虚拟机 创建CentOS云主机 同样是容器 对之前内容的总结熟悉 要求 CentOS 7
  • Android实现裁剪

    Android自定义View实现图片缩放旋转移动裁剪 灰信网 软件开发博客聚合 freesion com SuppressLint AppCompatCustomView public class CorpToView extends Im
  • java前后端传递日期类型不一致的转换问题

    今天在做学生信息的展示时发现展示的日期和数据库中日期不同 本来最开始是用SimpleDateFormat进行转换的 但是转换之后的是字符串类型的 与date类型对不上 所以就上网查了一下 发现可以用 DateTimeFormat和 Json
  • 牛顿法

    牛顿法被称为牛顿 拉夫逊 Newton Raphson 方法 牛顿在17世纪提出用来求解方程的根 假设点x 位函数f x 的根 则f x 0 将函数f x 在点处进行一阶泰勒展开有 假设点为函数f x 的根 则有 那么可以得到 牛顿法通过迭