标量/向量/矩阵求导方法

2023-05-16

这篇博客源于在看论文时遇到了一个误差向量欧氏距离的求导,如下:

在看了一堆资料后得出以下结论:

这个结论是怎么来的呢?这就涉及标量/向量/矩阵的求导了。由于标量、向量都可以看做特殊的矩阵,因此就统称为矩阵求导啦。

目录

1、矩阵如何求导

2、矩阵求导的分母布局

3、分母布局求导常用公式

4、分子布局

5、雅可比矩阵 及 雅可比行列式


1、矩阵如何求导

对于一般常见的标量函数 f(x) 对标量 x 的求导为:

 矩阵A对矩阵B的求导 dA/dB 本质上就是矩阵A中的每一个元素分别对矩阵B中的每一个元素的求导。根据这个本质可以得出以下几种情况中的导数的数量。

1、当A与B都是1×1的矩阵时,此时A对B求导就是标量函数对标量的求导,结果为1个导数;

 2、当A为m×1的向量,B为1×1的标量时,此时A对B求导就是向量函数对标量的求导,结果有m个导数;

3、当A为m×1的向量,B为p×1的向量时,如:

 结果有m×p个导数;

4、当A为m×n的向量,B为p×q的向量时,结果有m×n×p×q个导数

以上四种情况中,除了第一种结果是一个标量外,其他的三种的导数都有多个。在实际的应用中,我们经常会期望矩阵对矩阵求导的结果也是一个矩阵的形式以便参与后续的运算。以第4种情况为例,最终的m×n×p×q个导数要怎样排列成矩阵形式呢?是排列成m×n行p×q列还是m行n×p×q列还是其他形式呢?这就要引出矩阵(向量)求导的分子布局分母布局了。

分子布局分母布局本质上是两种人为规定的两种求导结果的布局方式,并没有好坏之分,具体使用那种布局可根据运算习惯选择。对于导数 dA/dB分子布局就是求导结果以分子位置上的矩阵A的形式为准(求导结果的第一维与分子位置保持一致),分母布局就是求导结果以分母位置上的矩阵B的形式为准。下面以分母布局为例展开讲解。

2、矩阵求导的分母布局

对于导数 df/dx 来说,f 在分子位置,x 在分母位置,可以分为以下情况讨论:

(一般用字母表示的向量都默认为列向量,除非加了转置符号)

1为标量函数,为列向量:

 此时,由于分母部分是一个p×1的列向量形式,因此最后的结果也是p×1的列向量。

2为标量函数,为行向量:

 此时,由于分母部分是一个1×p的行向量形式,因此最后的结果也是1×p的行向量。

3为列向量,为标量:

 此时得出的结果是1×p的行向量形式,这个结果等价于​​​​​​​

 4为列向量,为列向量:

此时可以分两步推导出最终的结果的形式。

首先第一步将 f 看作一个整体,按照分母位置的 x 的布局展开

 此时可以将​​​​​​​按照情况3中的形式进行展开如下:

对于分母布局来说就是最终结果与分母的形式保持一致,有一种简单形象的说法叫做XY拉伸术,结果的形式可以通过以下两个准则来判断:

  • 标量不变,向量拉伸
  • X 纵向拉伸,Y 横向拉伸

针对上式的拉伸解释如下图所示:

以上即为矩阵求导分母布局的几种情况,其他复杂些的组合情况都可以由上面的规则推导出来。分母布局只是对矩阵求导结果的一种人为的布局规定,求导结果就那么几个确定的值,在具体应用中我们对这些值布局成一维向量、二维矩阵还是更高维的形式都是根据自己的需要进行设置的,只是分母/分子布局的形式在一般应用中更为常用一点而已。

3、分母布局求导常用公式

(1)求其中

  这个问题可以先看一下 f(x) 的展开式,注意其结果是个标量

  按照分母布局的规则,此时的求导结果应该是一个 p×1 的列向量,此时

(2)其中:

 可以推出此时:​​​​​​​

(3)这个也是文章开头提到的那个计算(可通过先展开再各项求导的方法推导出)

(4)

(5)

(6)对自身求导

4、分子布局

对于分子布局来说就是最终结果与分子的形式保持一致,类似分母布局的XY拉伸术,分子布局也有一种简单易记的方法即YX拉伸术,结果的形式可以通过以下准则来判断:

  • 标量不变,向量拉伸
  • Y纵向拉伸,X横向拉伸(注意分母布局中是X纵向拉伸,Y横向拉伸)

通常来说分子布局与分母布局的结果互为转置关系。这两种布局没有优劣之分,找一种自己习惯的使用就行。

5、雅可比矩阵 及 雅可比行列式

矩阵按分子布局求导的结果就构成了雅可比矩阵(分母布局的结果是雅可比行列式的转置)。当雅可比矩阵是一个方阵时,该方阵的行列式则可称为雅可比行列式。在矩阵论中,线性变换矩阵的行列式代表变换前后空间面积的变化倍数,但是对于非线性变换矩阵来说,其雅可比行列式的建立就是为了解决局部空间的伸缩问题,用微元法(微元变换实际上可以看做是线性的)代表某点附近的空间伸缩的倍数。

===================================================================

有关 矩阵线性变换的几何原理 以及 雅可比行列式的几何原理 可以参考如下视频:

【俗说矩阵】行列式的本质意义居然是这样的!数学老师绝不会告诉你!_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Hb4y1q7Sp?from=search&seid=9625805080710138609&spm_id_from=333.337.0.0《雅可比矩阵下:所谓的雅可比行列式》3Blue1Brown Grant Sanderson,搬自可汗学院。 【自制中文字幕】_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18J41157X8/?spm_id_from=333.788.recommend_more_video.12

矩阵求导参考视频:

计量经济学入门专题2——矩阵求导(分母布局)【上】_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1fK411W7oh/?spm_id_from=333.788.recommend_more_video.0

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

标量/向量/矩阵求导方法 的相关文章

  • ACFly A9飞控使用T265作为位置传感器

    使用一块Jetson nano读取T265数据发送给飞控代替光流实现室内定点飞行 1 Jetson nano数据发送 sudo apt get install ros melodic serial cd ros ws src catkin
  • In grDevices::dev.off() : agg could not write to the given file

    R语言画图保存是报的错误 stackoverflow和github上都没有相关问题 原因是 xff0c 保存的名字字符或标点不对 名字中的标点符号之类的不符合命名原则
  • C++ 创建txt文件,并实现读写txt文件

    最近在逐渐接触C 43 43 xff0c 看了网上很多回答 xff0c 做个汇总的记录 xff0c 方便以后查看 include lt fstream gt include lt iostream gt include lt string
  • eslint:vue报错 error Component name ““ should always be multi-word

    在使用vue cli创建项目 xff0c 命名好组件的时候 xff0c 报错 xff1a error Component name xxx should always be multi word xff0c 解决办法看最后 原因是官方的建议
  • PX4仿真

    XTDrone仿真 运行PX4仿真 span class token builtin class name cd span PX4 Firmware roslaunch px4 mavros posix sitl launch 通过下条命令
  • 安卓期末考试复习题

    安卓试题题型 1 选择题 xff08 10x1 39 xff09 2 填空题 xff08 5x2 39 xff09 3 简答题 xff08 4x5 39 xff09 4 程序分析题 xff08 10 39 xff09 5 编程题 xff08
  • GNURadio 运行报错:ERROR thread[thread-per-block[12]: <block ofdm_cyclic_prefixer(8)>]: Buffer too small

    在修改 GR 的 OFDM 例程时 xff0c 将 OFDM 子载波数从原来的 64 调整为 128 后运行出现了这个问题 xff0c 更全的错误提示如下 xff1a gr log ERROR thread body wrapper ERR
  • kalibr标定realsenseD435i(三)--imu+双目标定

    步骤一 xff1a 编写camchain yaml 具体的参数参考上面得到的yaml文件 xff0c 没有的参数可以删除 cam0 camera model pinhole distortion coeffs 0 3741003900681
  • VINS定位和即时八叉树建图步骤

    在工作空间catkin ws终端运行 1 先source一下 xff0c 以免报错 xff08 注 xff1a 后面每一步都可以source一下 xff09 source catkin ws devel setup bash 2 打开D43
  • ros中的launch文件

    对照运行的mav path plan launch文件进行一个学习 xff08 一 xff09 什么是roslaunch roslaunch是ROS提供的一个启动工具 xff0c 它能够使得启动多个ROS节点的过程变得简单 xff0c 同时
  • EGO Planner代码解析----CMakeLists.txt和package.xml

    ROS本质上就是由一个又一个的package组成的 xff0c package可以说是ROS的细胞 在catkin make的时候它会一个一个的去找package然后生成目标文件 一个package可以有多个节点 判断是否为Package
  • EGO Planner代码解析bspline_optimizer部分(3)

    1 int BsplineOptimizer earlyExit void func data const double x const double g const double fx const double xnorm const d
  • EGO Swarm翻译

    目录 摘要 介绍 相关工作 A 单四旋翼局部规划 B 拓扑规划 C 分布式无人机集群 基于梯度的局部规划隐式拓扑轨迹生成 A 无需ESDF梯度的局部路径规划 B 隐式拓扑轨迹生成 无人机集群导航 A 机间避碰 B 定位漂移补偿 C 从深度图
  • 嵌入式刷题训练1——牛客网

    嵌入式软件工程师面试常考题 文章目录 Q1 xff1a extern关键字的作用是什么 xff1f Q2 xff1a 关于virtual void Draw 61 0 xff0c 下面说法正确的有几个 xff1f Q3 xff1a 对于类的
  • Ubuntu桌面卡死解决办法

    Ubuntu桌面卡死解决办法 我采用这种方式圆满解决 同时按住 Ctrl 和 Alt 键 xff0c 按住不要放
  • sonic 编译

    本文是转载 xff0c sonic 编译 sonic编译过程讲解 xff0c 点击这里
  • arduino总线舵机+实时串口通信控制

    arduino语法 digitalWrite 函数 digitalWrite pin value 定义引脚的电平 pin xff1a 你希望设置模式的引脚的编号 0 xff5e 13 value xff1a 表示为HIGH 高电平 或LOW
  • GNURadio3.9.4创建OOT模块实例

    目录 1 创建自己的block xff08 注意 module 与 block 的区别 xff09 1 1 创建 module 1 2 在创建的 myDemux 中创建 block 2 修改相应的代码 2 1 修改 C 43 43 代码 2
  • LibreOffice具体用法

    1 在命令行执行libreoffice version xff0c 检查是否已经安装LibreOffice span class token comment Linux 下的安装方法 span span class token commen
  • 《1.9.ARM裸机第九部分-定时器、看门狗和RTC》

    第一部分 章节目录 1 9 1 什么是定时器 1 9 2 S5PV210中的定时器 1 9 3 S5PV210的PWM定时器1 1 9 4 S5PV210的PWM定时器2 1 9 5 S5PV210的PWM定时器3 1 9 6 蜂鸣器和PW

随机推荐