-矩阵求导-

article/2025/9/15 16:17:07

一、为什么需要矩阵求导

  • 参数的向量化
    向量化会使代码、式子更加简洁;
    使用向量化代替for循环,向量化能够加速你的代码;
  • 求导在优化算法中的广泛应用
    优化算法需要反向传播,需要对参数矩阵进行求导

二、向量函数与矩阵求导初印象

  • 标量函数:输出为标量的函数
    f ( x ) = x 2 , R → R f(x)=x^2,R \rightarrow R f(x)=x2,RR
    .
    f ( x ) = x 1 2 + x 2 2 , R 2 → R f(x)=x_1^2+x_2^2,R^2 \rightarrow R f(x)=x12+x22,R2R
  • 向量函数:输出为向量(矩阵)
    f ( x ) = [ f 1 ( x ) = x f 2 ( x ) = x 2 ] , R → R 2 f(x)= \begin{bmatrix} f_1(x)=x \\ f_2(x)=x^2 \\ \end{bmatrix},R \rightarrow R^2 f(x)=[f1(x)=xf2(x)=x2],RR2
    .
    f ( x ) = [ f 11 ( x ) = x f 12 ( x ) = x 2 f 21 ( x ) = x 3 f 22 ( x ) = x 4 ] , R → R 2 × 2 f(x)= \begin{bmatrix} f_{11}(x)=x&&f_{12}(x)=x^2 \\f_{21}(x)=x^3&&f_{22}(x)=x^4 \\ \end{bmatrix},R \rightarrow R^{2 \times 2} f(x)=[f11(x)=xf21(x)=x3f12(x)=x2f22(x)=x4],RR2×2

输入 x x x可以是标量、向量、矩阵,输出 f ( x ) f(x) f(x)也可以是标量、向量、矩阵。讨论的问题是 d f ( x ) d x = ? \frac{df(x)}{dx}=? dxdf(x)=?

矩阵求导主要讨论的是【输入 x x x是标量、向量】和【输出 f ( x ) f(x) f(x)是标量、向量】组合在一起的 4 4 4种情况。

矩阵求导的本质
d A d B \frac{dA}{dB} dBdA:矩阵 A A A中每个元素对矩阵 B B B中的每个元素求导。

从求导后的个数看矩阵求导本质:

  • A : 1 × 1 、 B : 1 × 1 A:1 \times1、B:1 \times1 A:1×1B:1×1
    d A d B : 1 × 1 \frac{dA}{dB}:1 \times1 dBdA1×1

  • A : 1 × p 、 B : 1 × n A:1 \times p、B:1 \times n A:1×pB:1×n
    d A d B : p × n \frac{dA}{dB}:p \times n dBdAp×n(排列组合一下)

  • A : q × p 、 B : m × n A:q \times p、B:m \times n A:q×pB:m×n
    d A d B : p × q × m × n \frac{dA}{dB}:p \times q\times m \times n dBdAp×q×m×n

三、求导秘术:YX拉伸

秘术口诀 { 1 、标量不变、向量拉伸 2 、前面 ( Y ) 横向拉,后面 ( X ) 纵向拉 秘术口诀\begin{cases}\color{RED}{1、标量不变、向量拉伸} \\\color{RED}{2、前面(Y)横向拉,后面(X)纵向拉} \\ \end{cases} 秘术口诀{1、标量不变、向量拉伸2、前面(Y)横向拉,后面(X)纵向拉

例1:求 f ( x ) d x \frac{f(x)}{dx} dxf(x)

  • f ( x ) f(x) f(x)是标量函数, f ( x ) = f ( x 1 , x 2 , … … , x n ) f(x)=f(x_1,x_2,……,x_n) f(x)=f(x1,x2,……,xn)
  • x x x是列向量

这里的 f ( x ) f(x) f(x)就是口诀里的Y,它是标量不变且不用拉伸; x x x是向量,需要拉伸,根据第二条口诀要纵向拉伸。
所以 f ( x ) d x = [ ∂ f ( x ) ∂ x 1 ∂ f ( x ) ∂ x 2 … … ∂ f ( x ) ∂ x n ] \frac{f(x)}{dx}=\begin{bmatrix} \frac{\partial f(x)}{\partial x_1} \\\\ \frac{\partial f(x)}{\partial x_2} \\ …… \\ \\ \frac{\partial f(x)}{\partial x_n} \end{bmatrix} dxf(x)= x1f(x)x2f(x)……xnf(x)

实际拉伸就是将多元函数的偏导写在一个列向量里。


例2:求 f ( x ) d x \frac{f(x)}{dx} dxf(x)

  • f ( x ) f(x) f(x)是向量函数, f ( x ) = [ f 1 ( x ) f 2 ( x ) … … f n ( x ) ] f(x)=\begin{bmatrix} f_1(x) \\ \\ f_2(x) \\ \\……\\ \\f_n(x) \end{bmatrix} f(x)= f1(x)f2(x)……fn(x)
  • x x x是标量

这里的 f ( x ) f(x) f(x)就是口诀里的Y,它是向量需要拉伸,横向拉; x x x是标量不变且不用拉伸。
所以 f ( x ) d x = [ ∂ f 1 ( x ) ∂ x ∂ f 2 ( x ) ∂ x … … ∂ f n ( x ) ∂ x ] \frac{f(x)}{dx}=\begin{bmatrix} \frac{\partial f_1(x)}{\partial x} & \frac{\partial f_2(x)}{\partial x} & …… & \frac{\partial f_n(x)}{\partial x} \end{bmatrix} dxf(x)=[xf1(x)xf2(x)……xfn(x)]


例3:求 f ( x ) d x \frac{f(x)}{dx} dxf(x)

  • f ( x ) f(x) f(x)是向量函数, f ( x ) = [ f 1 ( x ) f 2 ( x ) … … f n ( x ) ] f(x)=\begin{bmatrix} f_1(x) \\ \\ f_2(x) \\ \\……\\ \\f_n(x) \end{bmatrix} f(x)= f1(x)f2(x)……fn(x)
  • x x x是列向量

f ( x ) d x = [ ∂ f ( x ) ∂ x 1 ∂ f ( x ) ∂ x 2 … ∂ f ( x ) ∂ x n ] \frac{f(x)}{dx}=\begin{bmatrix} \frac{\partial f(x)}{\partial x_1} \\\\ \frac{\partial f(x)}{\partial x_2} \\ … \\ \\ \frac{\partial f(x)}{\partial x_n} \end{bmatrix} dxf(x)= x1f(x)x2f(x)xnf(x) = [ ∂ f 1 ( x ) ∂ x 1 ∂ f 2 ( x ) ∂ x 1 … ∂ f n ( x ) ∂ x 1 ∂ f 1 ( x ) ∂ x 2 ∂ f 2 ( x ) ∂ x 2 … ∂ f n ( x ) ∂ x 2 … … … … ∂ f 1 1 ( x ) ∂ x n ∂ f 2 ( x ) ∂ x n … ∂ f n ( x ) ∂ x n ] \begin{bmatrix} \frac{\partial f_1(x)}{\partial x_1}&&\frac{\partial f_2(x)}{\partial x_1} &&…\frac{\partial f_n(x)}{\partial x_1}\\\\ \frac{\partial f_1(x)}{\partial x_2} && \frac{\partial f_2(x)}{\partial x_2}&&… \frac{\partial f_n(x)}{\partial x_2} \\ …&&…&&…… \\ \\ \frac{\partial f_11(x)}{\partial x_n}&&\frac{\partial f_2(x)}{\partial x_n}&&…\frac{\partial f_n(x)}{\partial x_n} \end{bmatrix} x1f1(x)x2f1(x)xnf11(x)x1f2(x)x2f2(x)xnf2(x)x1fn(x)x2fn(x)……xnfn(x)

四、常见矩阵求导公式举例

  1. f ( x ) = A T ⋅ X f(x)=A^T\cdot X f(x)=ATX A = [ a 1 a 2 … a n ] A=\begin{bmatrix} a_1 \\ a_2 \\…\\a_n \end{bmatrix} A= a1a2an , X = [ x 1 x 2 … x n ] X=\begin{bmatrix} x_1 \\ x_2 \\…\\x_n \end{bmatrix} X= x1x2xn
    .
    f ( x ) f(x) f(x)是标量, X X X是向量,所以:
    在这里插入图片描述
    f ( x ) = A T ⋅ X = X T ⋅ A = ∑ i = 1 n a i x i \color {red} {f(x)=A^T\cdot X=X^T\cdot A=\sum\limits_{i=1}^n a_ix_i} f(x)=ATX=XTA=i=1naixi
    d A T ⋅ X d X = d X T ⋅ A d X = A \color {red} {\frac{d\ A^T\cdot X}{dX}=\frac{d\ X^T\cdot A}{dX}=A} dXd ATX=dXd XTA=A

2. f ( X ) = X T ⋅ A ⋅ X f(X)=X^T\cdot A\cdot X f(X)=XTAX , X = [ x 1 x 2 … x n ] X=\begin{bmatrix} x_1 \\ x_2 \\…\\x_n \end{bmatrix} X= x1x2xn , A = [ a 11 a 12 … a 1 n a 21 a 22 … a 2 n … … … a n 1 a n 1 … a n n ] A=\begin{bmatrix} a_{11} & a_{12} & …a_{1n}\\ a_{21} & a_{22} & …a_{2n}\\…&…&…\\a_{n1}& a_{n1}&…a_{nn} \end{bmatrix} A= a11a21an1a12a22an1a1na2nann .
.
f ( X ) = ∑ i = 1 n ∑ j = 1 n a i j x i x j f(X)=\sum\limits_{i=1}^n \sum\limits_{j=1}^n a_{ij}x_ix_j f(X)=i=1nj=1naijxixj是标量,X是向量。
在这里插入图片描述

d X T ⋅ A ⋅ X d X = ( A + A T ) ⋅ X \color {red} {\frac{d X^T\cdot A\cdot X}{dX}=(A+A^T) \cdot X} dXdXTAX=(A+AT)X

五、求导细节补充

分母布局和分子布局

  • 分母布局:YX拉伸术
    口诀一致,其实就是Y横向拉伸,X纵向拉伸
  • 分子布局:XY拉伸术
    口诀一致,其实就是X横向拉伸,Y纵向拉伸

这两个拉伸求导后元素排列不同,通常 (分母布局)T=(分子布局),互为转置关系。

如下图的 f ( X ) = X T X f(X)=X^TX f(X)=XTX的例子:
在这里插入图片描述

补充公式:(分母布局)

U = [ u 1 ( x ) u 2 ( x ) … u n ( x ) ] n × 1 U=\begin{bmatrix} u_1(x) \\ u_2(x) \\…\\u_n(x) \end{bmatrix}_{n\times1} U= u1(x)u2(x)un(x) n×1, V = [ v 1 ( x ) v 2 ( x ) … v n ( x ) ] n × 1 V=\begin{bmatrix} v_1(x) \\ v_2(x) \\…\\v_n(x) \end{bmatrix}_{n\times1} V= v1(x)v2(x)vn(x) n×1, X = [ x 1 ( x ) x 2 ( x ) … x n ( x ) ] n × 1 X=\begin{bmatrix} x_1(x) \\ x_2(x) \\…\\x_n(x) \end{bmatrix}_{n\times1} X= x1(x)x2(x)xn(x) n×1

  1. 矩阵求导的乘法公式:
    d V T U d X = ∂ U ∂ X V + ∂ V ∂ X U \color {red} {\frac{d\ V^T U}{d X}=\frac{∂U}{∂X}V+\frac{∂V}{∂X}U} dXd VTU=XUV+XVU
  2. 矩阵的加法公式:
    d V + U d X = d U d X + d V d X \color {red} {\frac{d\ V +U}{d X}=\frac{dU}{dX}+\frac{dV}{dX}} dXd V+U=dXdU+dXdV

电子书查阅
可以通过这个电子书查公式
目录导航: D e r i v a t i v e s − > D e r i v a t i v e s o f M a t r i c e s , V e c t o r s a n d S c a l a r F o r m s Derivatives->Derivatives\ of\ Matrices, Vectors\ and\ Scalar\ Forms Derivatives>Derivatives of Matrices,Vectors and Scalar Forms
公式中 a a a表示标量,a表示列向量, A A A表示矩阵


http://chatgpt.dhexx.cn/article/lZ8OlpZ9.shtml

相关文章

矩阵求导简析

大家好,这是我的第一篇博客。 矩阵求导(Matrix Derivation,或者Matrix Differential),在机器学习、图像处理、最优化领域经常会遇到。其本质是多元变量的微积分,只是把求导应用在了矩阵上,不同在…

矩阵求导法则

转载自:https://blog.csdn.net/dinkwad/article/details/72819832 矩阵求导的技术,在统计学、控制论、机器学习等领域有广泛的应用。鉴于我看过的一些资料或言之不详、或繁乱无绪,本文来做个科普,分作两篇,上篇讲标量…

矩阵求导总结

文章目录 1.分子为标量1.1 ∂ 标量 ∂ 标量 \frac{\partial 标量}{\partial标量} ∂标量∂标量​1.2 ∂ 标量 ∂ 向量 \frac{\partial 标量}{\partial向量} ∂向量∂标量​1.3 ∂ 标量 ∂ 矩阵 \frac{\partial 标量}{\partial矩阵} ∂矩阵∂标量​ 2.分子为向量2.1 ∂ 向量…

矩阵求导方法

矩阵求导方法 在机器学习过程中,我们经常会对矩阵进行相关的操作,现对矩阵求导方法进行概况与推导。 首先总结矩阵求导的本质,即矩阵A中每个元素对矩阵B中每个元素求导。我们先从宏观上理解这个公式,即从求导后元素的个数来理解…

矩阵求导

一、矩阵和向量求导 参考地址:https://cloud.tencent.com/developer/article/1668818 求导公式大全:https://cloud.tencent.com/developer/article/1551901 机器学习中最常用的矩阵求导有:标量对矩阵的求导,矩阵对标量求导以…

矩阵求导、几种重要的矩阵及常用的矩阵求导公式

一、矩阵求导 一般来讲,我们约定x(x1,x2,...xN)Tx(x1,x2,...xN)T,这是分母布局。常见的矩阵求导方式有:向量对向量求导,标量对向量求导,向量对标量求导。 1、向量对向量求导 2、标量对向量求导 3、向量对标量求导 其他…

矩阵求导(本质、原理与推导)详解

矩阵求导是机器学习与深度学习的基础,它是高等数学、线性代数知识的综合,并推动了概率论与数理统计向多元统计的发展。在一般的线性代数的课程中,很少会提到矩阵导数的概念;而且在网上寻找矩阵求导的知识点,也是五花八…

矩阵求导常用公式

矩阵求导常用公式 1 引言2 向量的导数2.1 向量对标量求导 Vector-by-scalar2.2 标量对向量求导 Scalar-by-vector2.3 向量对向量求导 Vector-by-vector 3 矩阵的导数3.1 矩阵对标量求导 Matrix-by-scalar3.2 标量对矩阵求导 Scalar-by-matrix 4 常用求导公式4.1 向量对向量求导…

矩阵的求导

目录 1 布局(Layout) 1.1 矩阵向量求导引入 1.2 矩阵向量求导定义 1.3 矩阵向量求导布局 1.4 分母布局的另一种求解方法 1.5 总结 2 基本的求导规则 2.1 向量对标量求导(相对于数量变量的微分,即自变量是数量变量) 2.1.1 定义 2.1.…

JAVA—IO流详解

1. 流概述 1.1. 什么是IO IO:Input/Output即输入&输出,也称之为流(河流,水流),指的是数据从一个地点到另一个地点过程;对于计算机来说文件的拷贝过程,文件的编写保存,显示功能…

Java高级特性-IO流

文章目录 前言一、什么是IO流二、字节流-输入输出三、字符流 - 输入输出四、复制文件五、总结 前言 在Java开发中我们经常会涉及到文件方面的操作,不论是网站的上传文件,还是服务器提供给客户端下载文件,这些都需要我们来处理,那J…

java IO流之BufferedReader和BufferedWriter

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:笑霸final的主页 📕系列专栏::本文写在java专栏 📧如果文章知识点有错误的地方&#…

IO流详解

文章目录 IO流IO流分类FileInputStream输入流框架相对路径读取过程详解available()skip(long n) FileOutputStream输入流框架 FileReaderFileWriter文件复制FileInputStream 、FileOutputStreamFileReader 、FileWriter 缓冲流BufferedReader 数据专属流DataOutputStreamDataIn…

java中的io流

文章目录 1. IO流,什么是IO?2.IO流的分类?3.IO流都在java.io.*包下4.java IO流有四个家族5.java.io包下需要掌握的流有16个6.FileInputStream的1个字节读入法7.FileInputStream的byte[]读入法8.FileInputStream的其他方法9.FileOutputStream用…

Java读写IO流详解

一、IO流要明确的几点 (1)明确要操作的数据是数据源还是数据目的(是读还是写) 源/读 InputStream Reader 目的/写 OutputStream Writer (2)明确操作设备上的数据是字节还是文本 源/读 字节&…

python IO流

python io流 总的来说就说计算机输入和输出的操作,一般来说是内存与磁盘之间的输入输出 一种虚拟世界的物质。 IO流操作是一种持久化操作,是将数据持久化在磁盘上。 这里用了open函数 函数的第一个引号内放的是运行的python文件目录下的一个名为1.txt的…

IO流的概念

IO流的概念 IO就是Input和Output的简写,也就是输入和输出的含义 IO流就是读写数据时像流水一样从一端流到另外一端,因此得名为"流" 基本分类 按照读写数据的基本单位不同,分为字节流和字符流 其中字节流主要指以字节为单位进行…

什么是IO流?

大家好,我是IT修真院北京分院第27期的JAVA学员,一枚正直纯洁善良的java程序员。 今天给大家分享一下,修真院官网Java任务10,深度思考中的知识点———什么是IO流? 1.背景介绍 什么是流 流就是一系列的数据 当不同的介质之间有数据交互的时候,JAVA就使用流来实现。 数…

JavaIO流详解

转载:https://www.cnblogs.com/LittleHann/p/3678685.html Java输入、输入、IO流 类层次关系梳理 本文主要关注在Java编程中涉及到的IO相关的类库、方法。以及对各个层次(抽线、接口继承)的流之间的关系进行梳理 相关学习资料 http://baike.baidu.com/view/100795…

IO流的介绍

一:IO流的介绍 1.IO流属于一种Java技术,主要用于处理数据传输。通过IO与外界进行数据交互,通信等。 2.IO流适用于文件,图片,音乐,视频等等的传输任务。 3.通信的目标也存在多种。例如&…