首页 > 其他分享 >矩阵求导(一)

矩阵求导(一)

时间:2024-04-19 09:22:05浏览次数:25  
标签:导数 矩阵 标量 求导 我们 向量

前言


在大学的微积分课程中,我们学习过关于标量函数的导数。但是当我们求解一个多元函数的极值时,单独一个自变量的偏导数往往不能告诉我们太多信息,于是我们有一种天然的想法是要把每个自变量的偏导数放在一起,看看他们的联合效果如何。这个过程其实是一个向量求导的过程。也就是说,我们把每个元素单独求偏导的结果按照一个顺序放入一个向量,与用这些元素组成的向量对函数直接求导,结果是一样的。因为这些非标量的求导过程实在太重要,我把他们整理到了这个博客中。

  • 矩阵求导的分类

由于我们现在有三种不同维度的数据容器,我们一共可以求出3*3=9种不同类型的导数,这几种导数的形状也各不相同。幸运的是,通常我们只需要了解其中一部分,就可以满足工作中的大部分需求。

上图是九种组合的情况,其中小写字母x、加粗小写字母x以及加粗大写字母X分别表示标量、向量和矩阵。
标量对标量的导数是自变量在变化一个微小值时函数值的变化比例,我们已经在学校里接触过了,这里九不再赘述。剩余的还有五种求导形式较为简单,是我们首先应该掌握的:

  1. 标量对向量和矩阵求导
  2. 向量或矩阵对标量求导
  3. 向量对向量求导

而向量对矩阵的求导,矩阵对向量的求导,以及矩阵对矩阵的求导则更加繁琐,我们在这里不做进一步介绍。

  • 求导结果的布局

然而还有一件事应该先解决,即求导结果的形式。我们在前言里说过,标量对向量的求导,等于标量对每个分量求导再把求导的结果放到一个向量中。但这其实是不严谨的,因为我们没有说明按照列向量来放置这些结果,还是按照行向量来放。事实上,两者都可以,取决于一个概念:矩阵求导的布局。通常大部分时候,我们在谈论到一个向量时,除了特殊说明,都默认这是一个列向量。当我们用标量对向量求导时,如果我们选择将求导结果依然按照列排列,那么我们把这种布局方式称为分母布局(求导结果的行数与分母相同)。显而易见,分子布局下求导的结果应该是分母布局的转置。具体来说,这九种求导的形状如下:

  • 标量对向量和矩阵的求导

正如我们前文所述,当一个标量是一个向量中分量的函数时,我们可以尝试拿这个标量对向量进行求导。
图一:标量对向量的求导
标量对矩阵的求导,推导过程是相似的。首先,我们将矩阵分块成一个列向量的形式,然后按照向量求导进行处理;对于每个求导后的分量,再次用向量求导的方式去处理。那么对于一个m*n的矩阵,我们的求导结果就是标量对矩阵中每个元素求导的结果,按照原矩阵形状放到一起而已。

  • 向量或矩阵对标量的求导

向量或者矩阵对标量的求导,只需要将前者的每个元素对标量进行求导,再按照指定的布局方式放置即可。

以上,就是涉及到标量的四种求导。剩下还有一种向量对向量的求导,以及一些相关的常用公式,我们放到下一节再介绍。

参考文献:https://www.cnblogs.com/pinard/p/10750718.html
https://www.jianshu.com/p/d4277f9db7a0

标签:导数,矩阵,标量,求导,我们,向量
From: https://www.cnblogs.com/maninfirer/p/18144679

相关文章

  • 1050 螺旋矩阵
    和力扣上一道题差不多,不过的当时没写出来,这次出来了。注释写好了。#include<bits/stdc++.h>usingnamespacestd;constintinf=0x3f3f3f3f;#definelllonglongintarr[100010];inta[10010][10010];intdx[]={0,1,0,-1};intdy[]={1,0,-1,0};intmain(){ in......
  • 游游的you矩阵(携程24秋招研发岗第一批)
    题面游游拿到了一个字符矩阵,她想知道有多少个三角形满足以下条件:三角形的三个顶点分别是y、o、u字符。三角形为直角三角形,且两个直角边一个为水平、另一个为垂直。输入第一行输入两个正整数n,m,用空格隔开,代表矩阵的行数和列数。接下来的n行,每行输入一个长度为m的字......
  • 卷积/池化、全连接、矩阵乘法/行列式乘法
    卷积https://zhuanlan.zhihu.com/p/76606892不考虑padding填充input矩阵,左边是卷积核,右边是输入:\[\left[\begin{matrix}1&2\\3&4\\\end{matrix}\right]*\left[\begin{matrix}11&22&33\\44&55&66\\77&88&99......
  • 1010 一元多项式求导
    测试点2应该是只输入1对并且是一个常数,如30这种。应该输出00。#include<bits/stdc++.h>usingnamespacestd;vector<int>a,b;//系数指数intmain(){ intxs,zs; while(cin>>xs>>zs){ a.push_back(xs); b.push_back(zs); } if(a.size()==1&&b[0]==0){ ......
  • PythonOCC基础使用:建模——矩阵变换(平移/旋转/缩放/镜像)
    此处特别感谢小昌做出的贡献!PythonOCC基础使用:建模——矩阵变换(平移/旋转/缩放/镜像)-卡核(caxkernel.com) 1.平移效果图:fromOCC.Core.BRepPrimAPIimportBRepPrimAPI_MakeConefromOCC.Core.TopLocimportTopLoc_LocationfromOCC.Core.TopoDSimportTopoDS_Shapefr......
  • 基于矩阵分解的协同过滤算法
    引言随着互联网、大数据等新技术的迅速发展,人们的生活变得更加便捷,但同时也导致网络数据爆炸式增长。为了快速帮助用户找到感兴趣的内容,越来越多的研究者致力于推荐算法的研究,以提高推荐质量,向用户推荐更符合其喜好的内容。然而,目前的推荐算法仍存在数据稀疏性、隐私保护和冷启动......
  • 项目三简易计算器 任务3-1矩阵键盘测试
    任务描述:单片机连接8位共阳极数码管和4*4矩阵键盘,编写键盘测试程序,按下任意按键,显示8个相同数字。线与线之间是立体的,交叉但不相连,没有结点,相当于立交桥。每一个按键相当于上桥下桥口,连接两条路。起到短路开关作用,按下将对应的行列连在一起。 悬空为1,1与0,相连时,1会变0,即......
  • 螺旋矩阵II(力扣59)
    给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 nxn 正方形矩阵 matrix 。示例1:输入:n=3输出:[[1,2,3],[8,9,4],[7,6,5]]示例2:输入:n=1输出:[[1]]提示:1<=n<=20解题思路:明白怎么循环输出,并且每次循环的边界在......
  • LeetCode题练习与总结:螺旋矩阵Ⅱ--59
    一、题目描述给你一个正整数 n,生成一个包含1到 n^2 所有元素,且元素按顺时针顺序螺旋排列的 nxn正方形矩阵matrix。示例1:输入:n=3输出:[[1,2,3],[8,9,4],[7,6,5]]示例2:输入:n=1输出:[[1]]提示:1<=n<=20二、解题思路初始化一个nxn的矩阵,所......
  • 矩阵树定理求所有生成树的边权和
    把一条边\(w\)写成\(wx+1\),则生成树边权积的一次项就是答案。求逆:\((ax+b)^{-1}\equiv(-\frac{a}{b^2}x+\frac{1}{b})\pmod{x^2}\)Codeusingll=longlong;constintN=31;constintMOD=998244353;structPoly{ lla,b; Poly(lla=0,llb=0):a(a),......