梯度之上:Hessian 矩阵

news2024/11/14 14:01:37

原文链接:原文

文章目录

  • 梯度之上:Hessian 矩阵
    • 梯度、雅克比矩阵
    • 海森矩阵
    • 海森矩阵应用

梯度之上:Hessian 矩阵

本文讨论研究梯度下降法的一个有力的数学工具:海森矩阵。在讨论海森矩阵之前,需要首先了解梯度和雅克比矩阵的基本概念。

⭐️本文假设读者已经熟悉梯度下降法和简单的数值分析、线性代数知识

梯度、雅克比矩阵

梯度下降算法需要当前函数点的导数信息,当此函数点包含多个方向时,梯度是包含所有方向的(偏)导数向量。

上述情况对应于输出为一个的情况,当函数的输出也为一个向量时,我们需要把输出向量的每一个元素对于多个输入的梯度罗列在一起,罗列形成的矩阵就是雅克比矩阵(Jacobian Matrix)

举例说明:

  • 若函数 f f f接受三个输入 x 1 、 x 2 、 x 3 x1、x2、x3 x1x2x3,产生一个输出 y y y,则其梯度为:

G r a d = [ ∂ y ∂ x 1 , ∂ y ∂ x 2 , ∂ y ∂ x 3 ] \begin{equation} Grad = [\frac{\partial y}{\partial x_1}, \frac{\partial y}{\partial x_2}, \frac{\partial y}{\partial x_3}] \end{equation} Grad=[x1y,x2y,x3y]

  • 若函数 f 2 f2 f2接受三个输入 x 1 、 x 2 、 x 3 x1、x2、x3 x1x2x3,产生三个输出 y 1 、 y 2 、 y 3 y1、y2、y3 y1y2y3,则其雅克比矩阵为:

J a c o b i a n = [ ∂ y 1 ∂ x 1 ∂ y 1 ∂ x 2 ∂ y 1 ∂ x 3 ∂ y 2 ∂ x 1 ∂ y 2 ∂ x 2 ∂ y 2 ∂ x 3 ∂ y 3 ∂ x 1 ∂ y 3 ∂ x 2 ∂ y 3 ∂ x 3 ] \begin{equation} Jacobian = \begin{bmatrix} \frac{\partial y_1}{\partial x_1} & \frac{\partial y_1}{\partial x_2}&\frac{\partial y_1}{\partial x_3} \\ \frac{\partial y_2}{\partial x_1} & \frac{\partial y_2}{\partial x_2}&\frac{\partial y_2}{\partial x_3} \\ \frac{\partial y_3}{\partial x_1} & \frac{\partial y_3}{\partial x_2}&\frac{\partial y_3}{\partial x_3} \end{bmatrix} \end{equation} Jacobian= x1y1x1y2x1y3x2y1x2y2x2y3x3y1x3y2x3y3

利用二阶导数,我们可以知道关于函数在特定方向 d d d 上的凹凸信息,利用凹凸信息可以在一定程度上预判梯度下降法的表现效果。如果在特定方向 d d d 上:

  • 二阶导数为正,则函数在方向 d d d上一阶导数增加,函数值下降更慢;

  • 二阶导数为负,则函数在方向 d d d上一阶导数减少,函数值下降更快;

  • 二阶导数为零,则函数在方向 d d d上一阶导数不变,函数值匀速下降;

    ⭐️注意在梯度下降法中是对损失函数进行下降,因此需要使用减函数来分析函数中某一小段(经常使用二次函数的减半部近似:二阶泰勒展开、牛顿法)中的导数变化情况;

海森矩阵

和雅克比矩阵类似,海森矩阵(Hessian 矩阵)可以包含函数中二阶导的信息:
H e s s i a n = [ ∂ 2 y ∂ x 1 ∂ x 1 ∂ 2 y ∂ x 1 ∂ x 2 ∂ 2 y ∂ x 1 ∂ x 3 ∂ 2 y ∂ x 2 ∂ x 1 ∂ 2 y ∂ x 2 ∂ x 2 ∂ 2 y ∂ x 2 ∂ x 3 ∂ 2 y ∂ x 3 ∂ x 1 ∂ 2 y ∂ x 3 ∂ x 2 ∂ 2 y ∂ x 3 ∂ x 3 ] Hessian = \begin{bmatrix} \frac{\partial^2y}{\partial x_1\partial x_1} & \frac{\partial^2y}{\partial x_1\partial x_2}&\frac{\partial^2y}{\partial x_1\partial x_3} \\ \frac{\partial^2y}{\partial x_2\partial x_1} & \frac{\partial^2y}{\partial x_2\partial x_2}&\frac{\partial^2y}{\partial x_2\partial x_3} \\ \frac{\partial^2y}{\partial x_3\partial x_1} & \frac{\partial^2y}{\partial x_3\partial x_2}&\frac{\partial^2y}{\partial x_3\partial x_3} \end{bmatrix} Hessian= x1x12yx2x12yx3x12yx1x22yx2x22yx3x22yx1x32yx2x32yx3x32y
同时由于二阶导数计算顺序的可交换性,即 ∂ 2 y ∂ x 1 ∂ x 2 = ∂ 2 y ∂ x 2 ∂ x 1 \frac{\partial^2y}{\partial x_1\partial x_2}=\frac{\partial^2y}{\partial x_2\partial x_1} x1x22y=x2x12y,因此
海森矩阵是一个对称矩阵
,对于对称矩阵我们可以使用特征分解来研究特征值和二阶导数的关系,便于我们快速获得某个方向的二阶导数。

针对于特定方向d,已知此方向的二阶导数可以写成 d T H d d^THd dTHd ,则:

🔗 基于Hessian矩阵的二阶方向导数与性质_Hi 喀什噶尔的胡杨的博客-CSDN博客_二阶方向导数

  • 若d是H对应特征值λ的特征向量:

    因为d为对应λ的特征向量(以下简称特征向量),则据定义有:
    H d = λ d ⇒ d T H d = d T λ d = λ d T d = λ    对称矩阵 d T = d − Hd = \lambda d\\ \Rightarrow d^THd=d^T\lambda d = \lambda d^Td=\lambda \ \ \ 对称矩阵d^T = d^- Hd=λddTHd=dTλd=λdTd=λ   对称矩阵dT=d

    因此特征向量对应的特征值λ即为此方向的二阶导数;

  • 若d为其他方向:设 e i e_i ei H H H对应特征值 λ i \lambda_i λi的特征向量,由上可知,
    λ i = e i T H e i \lambda_i=e_i^THe_i λi=eiTHei
    可知任何一个方向 d = ∑ i m t i e i d=\sum_i^mt_ie_i d=imtiei为特征向量的线性组合,其中m为特征值个数, t i t_i ti为第 i i i个特征向量的加权数,则:
    d T H d = ( ∑ i m t i e i ) T H ( ∑ i m t i e i ) = ∑ i m t i e i T H t i e i = ∑ i m t i 2 λ i d^THd=(\sum_i^mt_ie_i)^TH(\sum_i^mt_ie_i)=\sum_i^mt_ie_i^THt_ie_i=\sum_i^mt_i^2\lambda_i dTHd=(imtiei)TH(imtiei)=imtieiTHtiei=imti2λi
    因此任意非特征向量方向的二阶导数是所有特征值的加权和,特别的,此时的加权和是一个椭球体,在二维的特征值情况下,二阶导数是一个椭圆,椭圆方程为:
    y = λ 1 1 t 1 2 + λ 2 1 t 2 2 y=\frac{\lambda_1}{\frac{1}{t_1^2}}+\frac{\lambda_2}{\frac{1}{t_2^2}} y=t121λ1+t221λ2
    在这里插入图片描述

    由图可知,最大二阶导数由最大特征值决定(长半轴),而最小二阶导数由最小特征值决定(短半轴)。

海森矩阵应用

在弄清海森矩阵的基本定义后,就可以使用海森矩阵的一些性质来分析优化方法中的一些问题了。如确定局部最大点、局部最小点和鞍点、确定学习率、以及使用病态条件来确定梯度下降的表现等,同时我们还可以利用Hessian矩阵来实现牛顿法这种优化算法,。

(本节完)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/177689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基础知识一览3

这里写目录标题1.Servlet1.1 入门1.2 什么是Servlet1.3 Servlet的作用1.4 Servlet生命周期1.5 Servler的体系结构1.6 Servler的两种配置方式2.Filter2.1 Filter拦截路径配置2.2 过滤器链2.2 入门2.3 过滤器链2.4 过滤器生命周期3.Listener3.1 监听器分类3.1.1 一类监听器4.Serv…

ESP32设备驱动-GA1A12S202光线传感器驱动

GA1A12S202光线传感器驱动 1、GA1A2S202介绍 GA1A1S202 对数刻度模拟光传感器使用起来非常简单,只需添加电源,然后监控模拟输出。大多数光传感器对光强度具有线性响应,这意味着它们对低光水平非常不敏感,然后在高光水平下达到最大值。另一方面,该传感器具有对数响应,这…

第九届蓝桥杯省赛 C++ B组 - 乘积最大

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:蓝桥杯题解集合 📝原题地址:乘积最大 📣专栏定位:为想参加蓝桥杯的小伙伴整理常考算法题解,祝大家…

Thread的join()方法的作用

文章目录官方文档对join()的解释:结合实例解释官方文档对join()的解释: Thread.join() method javadocs(点击跳转) join() Waits for this thread to die. 线程类的 join()方法将等待子线程完成,然后继续当前线程。j…

【Python】常见的时间操作(时间区间、时间相加减、指定年月天数等。。。

前言 记录在Python中使用的时间操作,方便以后查找。 在使用Python中,常会遇到关于时间的操作。 虽说每次都能借助搜索引擎找到解决的方法,但好记性不如烂笔头,遂有此文。 暂时记录了笔者所使用过的Python关于时间的操作&#xff0…

人世正道沧桑,她亦奋力向前 --读《李清照传》有感

有一次陪小孩晨读,朗诵诗歌,读到了李清照的《夏日绝句》:“生当作人杰,死亦为鬼雄。至今思项羽,不肯过江东”。这首诗是1129年,李清照在芜湖的乌江县触景生情,有感而作的。这首诗写得大气磅礴&a…

JQuery总结(一)

JQUERY概述: JQUERY和DOM相互转换: 基础选择器: 筛选选择器: show hide toggle方法 jQuery hover方法 jQuery stop()方法 例子:显示、隐藏、切换 button{/* 随着字体大小变化,button跟着变化大小 */font-size: 20px;ba…

【Git】国内代码托管中心码云(Gitee)

9、国内代码托管中心码云(Gitee) 9.1、简介 众所周知,GitHub 服务器在国外,使用 GitHub 作为项目托管网站,如果网速不好的话,严重影响使用体验,甚至会出现登录不上的情况。针对这个情况,大家也可以使用国…

边界框回归 Bounding-Box Regression

文章目录边界框回归(Bounding-Box Regression)一、边界框回归简介二、边界框回归细节三、相关问题思考1. 为什么使用相对坐标差?2. 为什么宽高比要取对数?3. 为什么IoU较大时边界框回归可视为线性变换?边界框回归(Bounding-Box …

协调中心性能大对比:zookeeper是如何解决负载均衡问题的

作为分布式系统的一个长久话题,协调中心的性能是一个很有意思的突破口。 作为java的分布式协调中心,常见的有zookeeper,redis ,memcache等全局性功能的组件,也有MySQL,mongoDB之类的数据库形持久存储。 两…

PyCharm无法打开,提示Internal error错误。

安装LeetCode插件后,重新打开PyCharm后,出现该错误。 删除安装目录下的 plugins 文件夹后,重新打开后,又出现该错误。 重新把回收站的文件夹恢复后,再次打开还是之前那个错误。 尝试了 cmd ,powershell,管…

Python Flask构建微信小程序订餐系统 (五)

🔥 微信小程序登录态 🔥 所谓登录态,就是程序在运行时,能够识别当前用户,能够证明自己的唯一性且合法。 WEB服务器通过浏览器携带的cookie获取session来判断是否是同一用户(或浏览器);Restful服务通过客户端传过来唯一ID,来识别调用用户。 维护登录态的原因 有自身…

行为型模式-模板方法模式

1.概述 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。 例如&…

机器学习(五):机器学习算法分类

文章目录 机器学习算法分类 一、监督学习 1、回归问题 2、分类问题 二、无监督学习 三、半监督学习 四、强化学习 机器学习算法分类 根据数据集组成不同,可以把机器学习算法分为: 监督学习无监督学习半监督学习强化学习一、监督学习 定义&…

Python初学者看过来啊,老油条来复习

嗨嗨嗨,我又又又又来了 目录 一、Python常用的基本语句 1、format字符串格式化 2、连接字符串 3、if...else条件语句 4、for...in、while循环语句 5、import导入 2.详细介绍 对于初学者来说,想要学好Python语言,必须从最基本的知识开…

为了方便项目打包,我用Node写了个git-tag工具

目录 前言 实现过程 起步 npm全局命令 功能实现 功能验证 代码发布 写在最后 前言 在使用git执行打包操作时,我们常常会根据场景在tag中增加一些标识。 以基准版本为1.0.0为例:软件开发初期可以定义1.0.0-alpha.0,开发阶段是1.0.0-b…

【面试克星】【公式少代码少话多】Vins-Mono预积分相关知识点总结与概述

前言 Vins-Mono预积分相关的公式和代码可以在各个博客中找到。本文将充当一个帮助大家快速理解预积分、中值积分相关概述的角色,带大家理解代码,应对面试。 下面会分成三步,来帮助大家充分理解这个过程。步骤是按照顺序来写的。 中值积分和…

学习MapStruct

概述 MapStruct是一个Java注释处理器,用于生成类型安全的bean映射类。 您要做的就是定义一个映射器接口,该接口声明任何必需的映射方法。在编译期间,MapStruct将生成此接口的实现。此实现使用简单的Java方法调用在源对象和目标对象之间进行映…

<<零入门容器云网络实战>>技术专栏之文章目录

建议: 1、资源 零入门容器云网络实战 链接: https://pan.baidu.com/s/1nPLRkAwjItAHmtEU2T1F4g 提取码: rrpd 2、技术沟通渠道 342498897 3、字体颜色说明 绿色字体&#xff0c; 表示已经发表&#xff0c;可以观看 灰色字体&#xff0c; 表示未发表 4、专栏介绍 1 <<…

【小知识点】如何在 git 中取消 __pycache__ 文件

文章目录如何在 git 中取消 **pycache** 文件CryptographyDeprecationWarning 异常如何在 git 中取消 pycache 文件 如果使用 PyCharm 运行代码&#xff0c;会在 Python 脚本所在目录生成 __pycache__ &#xff0c;每次提交到 git 都会包含该目录&#xff0c;本篇博客我们要将其…