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

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

矩阵求导是机器学习与深度学习的基础,它是高等数学、线性代数知识的综合,并推动了概率论与数理统计向多元统计的发展。在一般的线性代数的课程中,很少会提到矩阵导数的概念;而且在网上寻找矩阵求导的知识点,也是五花八门,各有各的说法,各有各自的定义,好多东西也是很容易弄得混淆。那么兔兔今天就从头到尾详细讲解矩阵求导的本质,原理与一般解法的推导。

 一:认识函数,认识自变量(变元)

认识函数,认识自变量是非常重要的,这是我们的立足点。回顾高数中的知识,我们大部分情况下遇到的都是自变量是一个数,值是一个数,函数的作用是把一个数映射成另一个数。但是也有自变量是多个数,值是一个数(即多元函数)。

那么在从传统的高等数学向矩阵延伸时,自变量就不一定是一个数了。自变量可以是一个数,可以是多个数(多个数是一个向量或是一个矩阵);经函数映射处理后得到的值以是一个数,一个向量或矩阵。至于值是数还是向量、矩阵,与函数function有关。

这样我们就把自变量分成数,向量,矩阵三种,我们也可以把自变量叫做函数function的变元。把函数function分成三种:function是标量、向量、矩阵,我们就把function分别叫做——实值标量函数(映射成数)、实向量函数(映射成向量)、实矩阵函数(映射成矩阵)。

(1)function是实标量函数(用f表示),其变元是标量(用x表示)

这个其实就是我们最最常见的一元函数。比如f(x)=x^{^{2}}+x+1,f(x)=2x+3等。它就是把一个数映射成另一个数。

(2)function是实标量函数(用f表示),其变元是向量(用x\underset{x}{\rightarrow}表示)

如果我们纸上书写,最好用\underset{x}{\rightarrow}表示,便于区分,而在电脑上一般用加粗表示向量。

对于这种情况,就是高数中的多元函数。只不过自变量的多元我们用向量表示,并且我们通常都认为是列向量(这个是约定俗成的东西,而且大家用同样的标准,交流起来也很方便)。例如f(\boldsymbol{\mathbf{}x})=x^{^{2}}+y^{^{2}},变元x就是(x,y)^{^{T}}f(\mathbf{x})=2x_{1}+x_{2}-3x_{3}^{2},变元x就是(x_{1},x_{2},x_{3})^{T}

(3)function是实标量函数(用f表示),其变元是矩阵(用X表示)

比如函数f(X)=u^{2}+2v^{3}+w+4x,变元X=\begin{pmatrix} u& v & \\w&x \end{pmatrix}。函数f(X)=x_{11}+4x_{12}+2x_{21}+x_{22},变元X=\begin{pmatrix} x_{11}&x_{12}\\ x_{21}&x_{22} \end{pmatrix}

(4)function是实向量函数(用f\underset{f}{\rightarrow}表示),其变元是标量(用x表示)。

这时function就是把一个数x映射成向量。例如\mathbf{f}(x)=\begin{pmatrix} f_{1}(x)\\f_{2}(x)\\f_{3}(x)\end{pmatrix}= \begin{pmatrix} x^{2}\\ 3x\\ 2x^{3}\end{pmatrix},里面的f1,f2,f3其实就是前面讲的实标量函数。组合成向量形成的就是一个实向量函数。

(5)function是实向量函数(用f\underset{f}{\rightarrow}表示),其变元是向量(用x\underset{x}{\rightarrow}表示)。

这时function把向量映射成向量。例如\mathbf{f}(\mathbf{x})=\begin{pmatrix}f_{1}(\mathbf{x})\\f_{2}(\mathbf{x}) \\f_{3}(\mathbf{x})\end{pmatrix}=\begin{pmatrix} x_{1}+x_{2}+x{3}\\ 2x_{1}^{2}+3x_{2}\\x_{1}^{3}+2x_{2}+x_{3}+1\end{pmatrix},x=\begin{pmatrix} x_1&x_{2}&x_{3}\end{pmatrix}^{T}。和刚才一样,里面f1,f2,f3是实标量函数,每个都把向量映射成数,又把数排列一起成向量。

注意:我们在高数等其它教材或是网上看到的向量函数(vector function)对应的就是该(5)条的情形。那里的向量函数定义是:从R^{n}\rightarrow R^{m}的映射。对应这里就是function是m维的,把n维向量x在function作用下映射成m维向量。

(6)function是实向量函数(用f\underset{f}{\rightarrow}表示),其变元是矩阵(用X表示)

例子就是f(X)=\begin{pmatrix}f_{1}(X)\\f_{2}(X)\\f_{3}(X) \end{}=\begin{pmatrix} x_{11}+x_{12}+x_{21}+x_{22}\\3x_{11}+4x_{21}+x_{22}^{2}\\ x_{11}^{2}+3x_{12}+x_{21}+4x_{22}+1\end{pmatrix}。变元就是X=\begin{pmatrix} x_{11}&x_{12}\\x_{21}&x_{22}\end{}。它其实就是把矩阵映射成了向量。里面f1,f2,f3分别把矩阵X映射成数,也就是(3)那一部分。

(7)function是实矩阵函数(用F表示),其变元是标量(用x表示)。

比如F(x)=\begin{pmatrix} f_{11}&f_{12}\\f_{21}&f_{22}\end{pmatrix}= \begin{pmatrix}x+1&x^{2}+2x\\ 3x-4&x^{3}+3 \end{},就是在实矩阵函数的映射下,变成了相应的矩阵。

(8)function是实矩阵函数(用F表示),其变元是向量(用x\underset{x}{\rightarrow}表示)。

把向量映射成矩阵。向量维数是变元维数,矩阵维数是实矩阵函数维数。F(\mathbf{x})= \begin{pmatrix}f_{11}(x)&f_{12}(x)\\f_{21}(x)&f_{22}(x) \end{pmatrix}= \begin{pmatrix}x_{1}+2x_{2}-x_{3}&x_{1}^{2}+x_{2}+3x_{3}\\x_{2}-3x_{3}&3x_{1}+4x_{2}^{2}+x_{3}\end{pmatrix},其中变元\mathbf{x}=\begin{pmatrix} x_{1}&x_{2}&x_{3}\end{}^{T}

(9)function是实矩阵函数(用F表示),其变元是矩阵(用X表示)。

到这里应该就很好理解了,F(X)=\begin{pmatrix}f_{11}(X)&f_{12}(X)\\f_{21}(X)&f_{22}(X) \end{}=\begin{pmatrix}x_{11}+x _{12}+3x_{21}-x_{22}&2x_{11}^{2}-x_{22}+3x_{21}+1\\x_{12}+x_{21}^{3}+4x_{22}&3x_{11}+4x_{12}-2x_{21}+x_{22}\end{},

其中,变元X=X=\begin{pmatrix}x_{11}&x_{12}\\x_{21}&x_{22}\end{}

总结:我们可以发现,最终的值是数、向量还是矩阵与函数有关——函数是几维的向量或矩阵,相应值就是几维的数或矩阵。并且我们在写的过程中都是把向量f或矩阵F拆解成最小单元f,用一元函数f分别计算数x、向量x或矩阵X,得到的数按原来对应的f位置堆叠。无论变元是向量还是矩阵,我们最终都是把它拆成单个数x,集体代入f中计算。

标量变元向量变元矩阵变元
实值标量函数f(x)f(\mathbf{\mathbf{}x})f(X)
实向量函数\mathbf{f}(x)\mathbf{f}(\textbf{x})\textbf{f}(X)
实矩阵函数F(x)F(\mathbf{x})F(X)

一会儿兔兔会告诉你们,我们之后很少遇到给定的这样的复杂的函数。更多的是AX、bxa等这样的函数,把它们展开其实就是对应上面的样子啦。

二:理解这些函数的导数。

 导数,无外乎就是函数对自变量求导。由于函数与自变量在这里已经延申到向量、矩阵,肯定与以往既有区别,又有联系。

对于(1)的情况,兔兔不必再讲了,它就是普通的一元函数求导。

对于(2)和(3)的情况,其实就是求偏导了。比如f(\mathbf{x})=x_{1}^{2}+x_2^{2}+x_{3}^{2},分别对x1,x2,x3求偏导(也就是对变元\mathbf{x}=\begin{pmatrix} x_{1}&x_{2}&x_{3}\end{}^{T}求导),再排列成向量,结果就是\begin{pmatrix}2x_{1}\\2x_{2}\\2x_{3} \end{},其实写成列向量和行向量关系倒不是很大(一会儿讲布局时细说)。

如果是f(X)对X求导,那就分别对里面xij求导,结果分别写在矩阵i行j列处(这个就是梯度矩阵)梯度矩阵:\begin{bmatrix}\frac{\partial f}{\partial x_{11}}&...\tfrac{\partial f}{\partial x_{1n}} \\....\\\frac{\partial f}{\partial x_{m1}}&...\frac{\partial f}{\partial x_{mn}}\end{}_{m\times n}。把梯度矩阵转置,就是Jacobian矩阵。第三种就是把矩阵按列堆栈向量化,比如X=\begin{pmatrix}x_{11}&....x_{1n}\\x_{21}&....x_{2n} \\...\\x_{m1}&....x_{mn}\end{}_{m\times n},vec(X) (堆栈化)后就是\begin{pmatrix}x_{11} &x_{21}...x_{m1}&x_{21}&x_{22}...x_{2,m}....x_{1n}..x_{mn}\end{}^{T}。之后操作就是向量求导了。如果是这样的列向量,求导后的列向量就叫做梯度向量,把它转置就叫做行向量偏导。除了堆栈向量化,这四个矩阵稍微了解就好,不同特意去记它们。

当实向量函数f(x)对数x求导,就是\begin{pmatrix} \frac{\partial f_{1}}{x}\\\frac{\partial f_{2}}{x}\\.\\.\frac{\partial f_{n}}{x}\end{},其中\mathbf{x}=\begin{pmatrix} x_{1}&x_2...x_{n}\end{}^{T}。实矩阵函数对单个数的求导,把实矩阵函数堆栈化,像刚才一样分别抽走第1列,2列...首尾连接成一个向量,然后求导。

那么对于(1)(2)(3)(4)(7)的情况,不是函数是单个的,就是变元是单个数,求导也很容易理解。其中(3)需要对变元堆栈化,(7)对函数堆栈化。

那么问题就来了,其它的该怎样求导呢?求导又该怎样排布呢?

 这里又一个很大的坑——分子布局、分母布局与混合布局

由于在布局方面没有统一的标准,导致我们在看其它文章时各有各的结果,很容易把我们搞糊涂。所以我们十分有必要了解这三种布局的情况。

我们先看(5),实向量函数对向量变元求导。‘

比如f(x),向量函数为2维,即f(\mathbf{x})=\begin{pmatrix}f_{1}(\textbf{x})\\f_{2}(\textbf{x}) \end{},变元\mathbf{x}=\begin{pmatrix}x_{1} &x_{2}&x_{3}\end{}^{T}为3维的向量。那么\textbf{f}(\textbf{x})x求导,就是f1分别对x1,x2,x3求偏导,再f2对x1,x2,x3求偏导。分子布局,就是分子是列向量形式,分母是行向量形式。对这个例子来说,就是求导后的矩阵第1行全是f1分别对x1,x2,x3求导,第2行是f2对x求导,那么矩阵就是2x3维(行数是函数维数,列数是变元维数)。\frac{\partial\textbf{ f}_{2\times 1}(\textbf{x})}{\partial\textbf{ x}_{3\times 1}^{T}}=\begin{pmatrix}\frac{\partial f_{1}}{x_{1}} &\frac{\partial f_{1}}{x_{2}}&\frac{\partial f_{1}}{x_{3}}\\\frac{\partial f_{2}}{x_{1}}&\frac{\partial f_{2}}{x2}&\frac{\partial f_{2}}{x_{3}}\end{}分母布局,就是分母是列向量,分子是行向量。求导后是刚才分子分布的转置。\frac{\partial\textbf{ f}_{2\times 1}^{T}(\textbf{x})}{\partial\textbf{ x}_{3\times1}}=\begin{pmatrix} \frac{\partial f_{1}}{x_{1}}&\frac{\partial f_{2}}{x_{1}}\\\frac{\partial f_{2}}{x_{1}}&\frac{\partial f2}{x_{2}}\\\frac{\partial f_{3}}{x_{1}}&\frac{\partial f_{3}}{x_{2}}\end{}_{3\times2}。那么,对于刚才(2)的情况,咱们当时说无论排成行还是列向量,关系不是很大,准确来说就是——如果是分子布局,结果就是列向量;分母布局,结果就是行向量(因为分母布局定义:分母是行向量形式,分子是列向量,此时只不过分母是一个数)。

简单来说,分子就代表函数,分母就是变元,是什么分布,什么就是列向量,另一个就是行向量。而且如果是分子布局,实向量函数是列向量形式,导数结果当中f1,f2,f3也相应是竖着的,第一行是f1对x求导,第二行是f2对x求导......。分母布局对应也是如此。至于选哪种布局计算,其实都可以的。一旦求导时分子和分母的形式确定了,布局也就确定了,结果也就是唯一的。

其实,只要知道实向量函数对向量求导的方法。其余的就容易很多了。只要碰到矩阵,堆栈化成向量就可以了,之后再考虑用哪个布局。比如实矩阵函数对矩阵求导,分别把函数、矩阵变元堆栈化就可以了。

三:由定义尝试求一些导数,尝试发现规律:

兔兔在这里以几个例子说明。

例1:求f(x)=ax 的导数。a是常数。

 很显然,导数就是a。

例2:求\mathbf{f}(\mathbf{x})=a\mathbf{x}的导数,其中a是常数,\mathbf{x}=\begin{pmatrix}x_{1}&x_{2}&x_{3} \end{}^{T}

很显然,它是由向量映射向量,对应(5)。求导是向量对向量求导。按分子分布,就是\frac{d\mathbf{f}(\mathbf{x})}{d\mathbf{x}^{T}}=\frac{d\begin{pmatrix} ax_{1}&ax_{2}&ax_{3}\end{}^{T}}{d\begin{pmatrix}x_{1}&x_{2}&x_{3} \end{}}=\begin{pmatrix}a&0&0\\0&a&0\\0&0&a \end{}

例3:求f(\textbf{x})=\mathbf{a}^{T}\mathbf{x}的导数,其中\mathbf{a}=\begin{pmatrix}a_{1} &a_{2}&a_{3}\end{}^{T},a1,a2,a3是常数。x=\begin{pmatrix}x_{1}&x_{2}&x_{3} \end{}^{T}

 可以看出,它是把向量映射成数,对应(2)。按分母布局(分母x是列向量形式)计算,就是

\frac{df(\mathbf{x})}{d\mathbf{x}}=\frac{d\begin{pmatrix}a_{1}x_{1}+a_{2}x_{2}+a_{3}x_{3} \end{}}{d\begin{pmatrix}x_{1}&x_{2}&x_{3} \end{}^{T}}=\begin{pmatrix}a_{1} &a_{2}&a_{3}\end{}^{T}

例4:求\mathbf{f}(\mathbf{x})=A\textbf{x}的导数,其中A=\begin{pmatrix}a_{11}&a_{12}\\a_{21}&a_{22} \end{},\mathbf{x}=\begin{pmatrix}x_{1}&x_{2} \end{}^{T}

 可以看出,它是把向量映射成向量。对应(5)。可以按分子布局求导(Ax是列向量,对\mathbf{x}^{T}求导),就是\frac{d\textbf{f}(\mathbf{x})}{d\mathbf{x}}=\frac{d\begin{pmatrix}a_{11}x_{1}+a_{12}x_{2}\\a_{21}x_{1}+a_{22}x_{2} \end{}}{d\begin{pmatrix} x_{1}&x_{2} \end{}}=\begin{pmatrix}a_{11}&a_{12}\\a_{21}&a_{22} \end{}

例5:求F(X)=aX的导数,其中a是常数,X=\begin{pmatrix}x_{11}&x_{12}\\x_{21}&x_{22} \end{}

这个是把矩阵映射矩阵,对应(9)。把F(X)堆栈化得vec(F(X))=\begin{pmatrix}ax_{11}&ax_{21}&ax_{12}&ax_{22} \end{}^{T},X堆栈化得vec(X)=\begin{pmatrix}x_{11}&x_{21}&x_{12}&x_{22} \end{}^{T}。按分子布局,求导后就是\begin{pmatrix}a&0&0&0\\0&a&0&0\\0&0&a&0\\0&0&0&a \end{}。可以尝试,分母布局计算也是这个结果的。

例6:求\mathbf{f}(X)=\mathbf{a}^{T}X的导数,其中\mathbf{a}=\begin{pmatrix}a_{1}&a_{2} \end{}^{T},X=\begin{pmatrix}x_{11}&x_{12} \\x_{21}&x_{22}\end{}

这个是把矩阵映射成行向量。按照分母分布计算导数,结果就是\begin{pmatrix}a_{1}&0 \\a_{2}&0\\0&a_{1}\\0&a_{2}\end{}=\begin{pmatrix}\textbf{a}&O\\O&\textbf{a}\end{}。若按照分子分布,结果就是分母分布的转置:\begin{pmatrix}a_{1}&a_{2}&0&0 \\0&0&a_{1}&a_{2}\end{}=\begin{pmatrix} \textbf{a}^{T}&O\\O&\mathbf{a}^{T}\end{}

例7:求F(X)=AX的导数。其中A=\begin{pmatrix}a_{11}&a_{12}\\a_{21}&a_{22} \end{},X=\begin{pmatrix}x_{11}&x_{12}\\x_{21}&x_{22} \end{}

到这里同学们应该已经知道如何计算了,把函数和变元都堆栈化,然后求导。按分子布局,我们发现是\begin{pmatrix}A&O\\O&A\end{},分母布局是\begin{pmatrix}A^{T}&O\\O&A^{T} \end{}。和6的结论是一致的。

此时同学们应该发现其中的规律了,无论是矩阵还是向量还是数,他们求导后都显示出与我们曾经的一元函数求导有着很相似的地方——曾经一元的(ax)^{'}=a,当把a和x分别变成向量、矩阵,也是有着类似的形式。那么对于复杂的函数呢?比如aXA的导数,axx^{T}b对x或x^{T}的导数呢。我们用这种方法显然就麻烦许多。那么有没有像我们曾经学过的求导法则一样,针对这一类函数的求导方法呢?答案是肯定的。

四:矩阵求导的通用方法。

兔兔在讲公式之前先补充一些知识点。

(1)矩阵的的迹(trace)

n\times n的方阵A的主对角线之和就是矩阵A的迹,记作tr(A)。

tr(A_{n \times n})=a_{11}+a_{22}+...+a_{nn}

性质:(重点,之后会用到的)

tr(c_{1}A+c_{2}B)=c_{1}tr(A)+c_{2}tr(B),即线性性质.

tr(A)=tr(A^{T})

tr(AB)=tr(BA)

tr(ABC)=tr(CAB)=tr(BAC):就是把其中相邻两个看作整体,与第三个做交换,本质就是上一条结论

对于A_{m\times n}B_{m\times n},tr(AB^{T})=a_{11}b_{11}+a_{12}b_{12}+...+a_{mn}b_{mn}:就是两个矩阵对应位置相乘求和。对于里面AB^{T}我们也是可以用转置、交换律的,结果不变。

(2)微分

微分只要掌握高数里面那些知识就足够了。这里用到了微分的一些性质。

微分性质:(重点)

dc=0, c可以是常数、常向量、常矩阵。

d(c_{1}u+c_{2}v)=c_{1}du+c_{2}dv:即线性性质,与迹相同,u,v可以是一元函数f,也可以是f,F。

d(uv)=d(u)v+ud(v):注意:对于向量或矩阵不可以随便交换乘积先后顺序,他们是不满足交换律的。

d(uvw)=d(u)vw+ud(v)w+uvd(w):上面的推广,多个函数乘积也是如此。u、v、w可以是f,F。

d(\frac{u}{v})=\frac{d(u)v-ud(v)}{v^{2}}

dF(X)^{T}=(dF(X))^{T}:转置性质,与迹的性质相同。

df(X)=tr(df(X))

d(tr(F(X)))=tr(d(F(X))),F为p\times p维。

矩阵微分:

大概了解一下微分过程与微分形式,后面几条需要记一下。

df(\mathbf{x})=\frac{\partial f}{\partial x_{1}}dx_{1}+\frac{\partial f}{\partial x_{2}}dx_{2}+....+\frac{\partial f}{\partial x_{n}}dx_{n}=\begin{pmatrix} \frac{\partial f}{\partial x_{1}}&\frac{\partial f}{\partial x_{2}}&....&\frac{\partial f}{\partial x_{n}}\end{}\begin{pmatrix}dx_{1}\\dx_{2}\\..\\dx_{n} \end{}=tr(\begin{pmatrix} \frac{\partial f}{\partial x_{1}}&\frac{\partial f}{\partial x_{2}}&....&\frac{\partial f}{\partial x_{n}}\end{}\begin{pmatrix}dx_{1}\\dx_{2}\\..\\dx_{n} \end{})

df(X)=\frac{\partial f}{\partial x_{11}}dx_{11}+\frac{\partial f}{\partial x_{12}}dx_{12}+...+\frac{\partial f}{\partial x_{mn}}dx_{mn}=tr(\begin{pmatrix}\frac{\partial f}{\partial x_{11}}&\frac{\partial f}{\partial x_{21}}...\frac{\partial f}{\partial x_{m1}} \\...\\\frac{\partial f}{\partial x_{1n}}&\frac{\partial f}{\partial x_{2n}}...\frac{\partial f}{x{mn}}\end{}\begin{pmatrix}dx_{11}&dx_{12}...dx_{1n} \\...\\dx_{m1}&dx_{m2}...dx_{mn}\end{})

dF_{p\times q}(X)=\begin{pmatrix}df_{11}(X)&df_{12}(X)...df_{1q}(X)\\...\\df_{p1}(X)&df_{p2}(X)...df_{pq}(X)\end{}_{p\times q}

d(AXB)=d(A)XB+Ad(X)B+AXd(B)=Ad(X)B:A,B是常数阵,微分是零矩阵。

d|X|=|X|tr(X^{-1}dX)=tr(|X|X^{-1}dX):按第一行展开,即元素乘代数余子式,求偏导即可。

d|F(X)|=|F(X)|tr(F(X)^{-1}dF(X))=tr(|F(X)|F(X)^{-1}dF(X))

d|X^{-1}|=-X^{-1}d(X)X^{-1}:X是n\times n方阵。用XX^{-1}=E,两边微分移项即可。

dF(X)^{-1}=-F(X)^{-1}dF(X)F(X)^{-1}

我们看到上面的几个情况,不难发现,函数微分等于函数对变元导数乘变元的微分(变元的微分就是按原来的形式把里面xi或xij都变成dxi或dxij)。有时外面加上tr也是成立的。

矩阵微分与导数关系:

这里就是本次矩阵导数的重点结论:

df(X)=tr(\frac{\partial f(X)}{\partial X^{T}}dX)\\ df(\mathbf{x})=tr(\frac{\partial f(\mathbf{x})}{\partial\mathbf{ x}^{T}}d\mathbf{x})

用类似这样形式的式子就可以通过微分来求矩阵导数啦。但对于F,我们可以求tr(F(X))的对X或X^{T}导数。

举例(这里式子很长,兔兔就用纸质书写推导了):

 

 

 

 

同学们要注意一下数学矩阵论中的矩阵函数:它和我们这里其实还是很不一样的。那里的矩阵函数是把函数展开成幂级数进行计算的。而我们在深度学习或机器学习过程中,往往是函数作用与向量或矩阵中的每一个元素。而这两种操作结果是完全不一样的。比如对于f(A)=e^{A}当A=\begin{pmatrix}1&2\\3&4 \end{}。用幂级数去计算。

import numpy as np
from math import factorial
A=np.mat([[1,2],[3,4]])
s=np.zeros((2,2))
for i in range(10):s+=A**i/factorial(i) #求级数,先求前十项
print(s) #按数学中矩阵函数的方法求解
print(np.exp(A)) #按机器学习中常用的方法,即对每个元素操作求解

运行结果

s=[[ 49.52944224  71.18115079][106.77172619 156.30116843]]exp(A)=[[ 2.71828183  7.3890561 ][20.08553692 54.59815003]]

可见的确是不一样的,它们也似乎没有什么太大的关联。而在矩阵论中关于矩阵函数乘积的求导,也有着它的定义,它的导数公式是\frac{d(FG)}{dX}=\frac{dF}{dX}(I_{n}\bigotimes G)+(I_{m}\times F)\frac{dG}{dX}。它理论应该可以用于咱们这里两个实矩阵函数乘积对变元矩阵的求导,但是它这里由于导数定义和咱们这里有一些区别,所以这个式子应该也是需要调整的,感兴趣的同学可以试一下。

五:总结

我们通过了解函数与变元的形式以及导数的定义,知道了这些导数的形式,并且掌握用微分方法求一般的矩阵导数。以上内容虽多,但真正运用的时候应该还是仅仅其中几个。而且在一般模型的推导中,例如BP神经网络的反向传递公式的推导,里面还涉及了很多东西,与今天所讲的矩阵导数可能还是有一定区别,到时候兔兔会详细讲解的。总之,同学们还是需要抓住本质,从根本上去理解。


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

相关文章

矩阵求导常用公式

矩阵求导常用公式 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.通信的目标也存在多种。例如&…

最全最详细的IO流教程

前言 io流用到的地方很多,就比如上传下载,传输,设计模式等…基础打扎实了,才能玩更高端的。 在博主认为真正懂IO流的优秀程序员每次在使用IO流之前都会明确分析如下四点: (1)明确要操作的数据…

IO流详解.

目录: 一、IO流概述 二、FileInputStream初步 三、FileOutStream的使用 四、文件复制 五、FileReader的使用 六、FileWriter的使用 七、复制普通文本文件 八、带有缓冲区的字符流 九、标准输出流(掌握) / 写日志 十、File类 一、IO流概述…

IO流 (字节流、字符流)

目录 一、IO流概述 1.1 IO流概述 1.2 FileInputStream读取一个字节 1.3 FileInputStream读取多个字节 1.4 FileInputStream读取全部字节 1.5 FileOutputStream写字节 1.6 字节流复制文件 二、IO流资源释放 2.1 JDK7以前的资源释放 2.2 JDK7以后的资源释放 三、字符流…

面试官:请讲一讲IO流核心模块与基本原理是什么?

前言 一、IO流与系统 IO技术在JDK中算是极其复杂的模块,其复杂的一个关键原因就是IO操作和系统内核的关联性,另外网络编程,文件管理都依赖IO技术,而且都是编程的难点,想要整体理解IO流,先从Linux操作系统…

java IO流

目录 序 一、IO流开篇 1、概念 2、流的分类 3、IO流的作用 4、IO流的使用场景 二、字节流 1、字节流抽象基类 2、字节流写数据 (1)基本步骤 (2)三种方式 (3)两个问题 (4&#xff0…

【Java基础-3】吃透Java IO:字节流、字符流、缓冲流

Java IO流 前言1 初识Java IO1.1 IO流分类1.2 案例实操 2 IO流对象2.1 File类2.2 字节流2.3 字符流2.4 序列化 3 IO流方法3.1 字节流方法3.2 字符流方法 4 附加内容4.1 位、字节、字符4.2 IO流效率对比4.3 NIO 前言 有人曾问fastjson的作者(阿里技术专家高铁&#x…

2.2.5 操作系统之调度算法(时间片轮转调度算法、优先级调度算法、多级反馈队列调度算法)

文章目录 0.思维导图1.时间片轮转---RR2.优先级调度算法3.多级反馈队列调度算法4.三种算法的对比总结 0.思维导图 1.时间片轮转—RR Round-Robin 时间片为2举例 以时间片为5举例 可能出现的问题,比如与FCFS对比 2.优先级调度算法 非抢占式例子 - 抢占式例子 补充…