所谓向量对标量的求导,其实就是向量里的每个分量分别对标量求导,最后把求导的结果排列在一起,按一个向量表示而已。类似的结论也存在于标量对向量的求导,向量对向量的求导,向量对矩阵的求导,矩阵对向量的求导,以及矩阵对矩阵的求导等。
总而言之,所谓的向量矩阵求导本质上就是多元函数求导,仅仅是把把函数的自变量,因变量以及标量求导的结果排列成了向量矩阵的形式,方便表达与计算,更加简洁而已。
为了便于描述,后面如果没有指明,则求导的自变量用 x x x表示标量, x \text{x} x表示 n n n维向量, X X X表示 m × n m×n m×n维度的矩阵,求导的因变量用 y y y表示标量, y y y表示 m m m维向量, Y Y Y表示 p × q p\times q p×q维度的矩阵。
根据求导的自变量和因变量是标量,向量还是矩阵,我们有9种可能的矩阵求导定义
自变量\因变量 | 标量 y y y | 向量 y \text{y} y | 矩阵 Y Y Y |
---|---|---|---|
标量 x x x | ∂ y ∂ x \dfrac{\partial y}{\partial x} ∂x∂y | ∂ y ∂ x \dfrac{\partial \text{y}}{\partial x} ∂x∂y | ∂ Y ∂ x \dfrac{\partial Y}{\partial x} ∂x∂Y |
向量 x \text{x} x | ∂ y ∂ x \dfrac{\partial y}{\partial \text{x}} ∂x∂y | ∂ y ∂ x \dfrac{\partial \text{y}}{\partial\text{x}} ∂x∂y | ∂ Y ∂ x \dfrac{\partial Y}{\partial\text{x}} ∂x∂Y |
矩阵 X X X | ∂ y ∂ X \dfrac{\partial y}{\partial X } ∂X∂y | ∂ y ∂ X \dfrac{\partial \text{y}}{\partial X} ∂X∂y | ∂ Y ∂ X \dfrac{\partial Y}{\partial X} ∂X∂Y |
为了解决矩阵向量求导的结果不唯一,我们引入求导布局。最基本的求导布局有两个:分子布局和分母布局。
对于分子布局来说,我们求导结果的维度以分子为主,比如对于我们上面对标量求导的例子,结果的维度和分子的维度是一致的。也就是说,如果向量 y \text{y} y是一个 m m m维的列向量,那么求导结果 ∂ y ∂ x \dfrac{\partial \text{y}}{\partial x} ∂x∂y也是一个 m m m维列向量。如果如果向量 y \text{y} y是一个 m m m维的行向量,那么求导结果 ∂ y ∂ x \dfrac{\partial \text{y}}{\partial x} ∂x∂y也是一个 m m m维行向量。
对于分母布局来说,我们求导结果的维度以分母为主,比如对于我们上面对标量求导的例子,如果向量 y \text{y} y是一个 m m m维的列向量,那么求导结果 ∂ y ∂ x \dfrac{\partial \text{y}}{\partial x} ∂x∂y是一个 m m m维行向量。如果如果向量 y \text{y} y是一个 m m m维的行向量,那么求导结果 ∂ y ∂ x \dfrac{\partial \text{y}}{\partial x} ∂x∂y是一个 m m m维的列向量向量。
比如 m m m维列向量 y y y对 n n n维列向量 x x x求导。它的求导结果在分子布局和分母布局各是什么呢?对于这2个向量求导,那么一共有 m n mn mn个标量对标量的求导。求导的结果一般是排列为一个矩阵。如果是分子布局,则矩阵的第一个维度以分子为准,即结果是一个 m × n m\times n m×n的矩阵,如下:
∂ y ∂ x = ( ∂ y 1 ∂ x 1 ∂ y 1 ∂ x 2 ⋯ ∂ y 1 ∂ x n ∂ y 2 ∂ x 1 ∂ y 2 ∂ x 2 ⋯ ∂ y 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ y m ∂ x 1 ∂ y m ∂ x 2 ⋯ ∂ y m ∂ x n ) m × n \frac{\partial \mathbf{y}}{\partial \mathbf{x}}=\left(\begin{array}{cccc} \frac{\partial y_{1}}{\partial x_{1}} & \frac{\partial y_{1}}{\partial x_{2}} & \cdots & \frac{\partial y_{1}}{\partial x_{n}} \\ \frac{\partial y_{2}}{\partial x_{1}} & \frac{\partial y_{2}}{\partial x_{2}} & \cdots & \frac{\partial y_{2}}{\partial x_{n}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial y_{m}}{\partial x_{1}} & \frac{\partial y_{m}}{\partial x_{2}} & \cdots & \frac{\partial y_{m}}{\partial x_{n}} \end{array}\right)_{m \times n} ∂x∂y=⎝⎜⎜⎜⎜⎛∂x1∂y1∂x1∂y2⋮∂x1∂ym∂x2∂y1∂x2∂y2⋮∂x2∂ym⋯⋯⋱⋯∂xn∂y1∂xn∂y2⋮∂xn∂ym⎠⎟⎟⎟⎟⎞m×n
上边这个按分子布局的向量对向量求导的结果矩阵,我们一般叫做雅克比矩阵。如果是按分母布局,则求导的结果矩阵的第一维度会以分母为准,即结果是一个 n × m n\times m n×m的矩阵,如下:
∂ y ∂ x = ( ∂ y 1 ∂ x 1 ∂ y 2 ∂ x 1 … ∂ y m ∂ x 1 ∂ y 1 ∂ x 2 ∂ y 2 ∂ x 2 ⋯ ∂ y m ∂ x 2 ⋮ ⋮ ⋱ ⋮ ∂ y 1 ∂ x n ∂ y 2 ∂ x n … ∂ y m ∂ x n ) \frac{\partial \mathbf{y}}{\partial \mathbf{x}}=\left(\begin{array}{cccc} \frac{\partial y_{1}}{\partial x_{1}} & \frac{\partial y_{2}}{\partial x_{1}} & \ldots & \frac{\partial y_{m}}{\partial x_{1}} \\ \frac{\partial y_{1}}{\partial x_{2}} & \frac{\partial y_{2}}{\partial x_{2}} & \cdots & \frac{\partial y_{m}}{\partial x_{2}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial y_{1}}{\partial x_{n}} & \frac{\partial y_{2}}{\partial x_{n}} & \ldots & \frac{\partial y_{m}}{\partial x_{n}} \end{array}\right) ∂x∂y=⎝⎜⎜⎜⎜⎛∂x1∂y1∂x2∂y1⋮∂xn∂y1∂x1∂y2∂x2∂y2⋮∂xn∂y2…⋯⋱…∂x1∂ym∂x2∂ym⋮∂xn∂ym⎠⎟⎟⎟⎟⎞
上边这个按分母布局的向量对向量求导的结果矩阵,我们一般叫做梯度矩阵。
有了布局的概念,我们对于上面5种求导类型,可以各选择一种布局来求导。但是对于某一种求导类型,不能同时使用分子布局和分母布局求导。
一般来说我们会使用一种叫混合布局的思路,即如果是向量或者矩阵对标量求导,则使用分子布局为准,如果是标量对向量或者矩阵求导,则以分母布局为准。
自变量\因变量 | 标量 y y y | 向量 y \text{y} y | 矩阵 Y Y Y |
---|---|---|---|
标量 x x x | / | ∂ y ∂ x \dfrac{\partial \text{y}}{\partial x} ∂x∂y分子布局 | ∂ Y ∂ x \dfrac{\partial Y}{\partial x} ∂x∂Y分子布局 |
向量 x \text{x} x | ∂ y ∂ x \dfrac{\partial y}{\partial \text{x}} ∂x∂y分母布局 | ∂ y ∂ x \dfrac{\partial \text{y}}{\partial\text{x}} ∂x∂y分子布局 | ∂ Y ∂ x \dfrac{\partial Y}{\partial\text{x}} ∂x∂Y |
矩阵 X X X | ∂ y ∂ X \dfrac{\partial y}{\partial X } ∂X∂y分母布局 | ∂ y ∂ X \dfrac{\partial \text{y}}{\partial X} ∂X∂y | ∂ Y ∂ X \dfrac{\partial Y}{\partial X} ∂X∂Y |
首先我们想到的是基于矩阵求导的定义来做,由于所谓标量对向量的求导,其实就是标量对向量里的每个分量分别求导,最后把求导的结果排列在一起,按一个向量表示而已。那么我们可以将实值函数对向量的每一个分量来求导,最后找到规律,得到求导的结果向量。
首先我们来看一个简单的例子: y = a T x y = a^T \text{x} y=aTx,求解 ∂ a T x ∂ x \dfrac{\partial a^T \text{x}}{\partial \text{x}} ∂x∂aTx,根据定义,我们先对 x \text{x} x的第 i i i个分量进行求导,这是一个标量对标量的求导,如下:
∂ a T x ∂ x i = ∂ ∑ j = 1 n a j x j ∂ x i = ∂ a i x i ∂ x i = a i \dfrac{\partial \mathbf{a}^{T} \mathbf{x}}{\partial x_{i}}=\dfrac{\partial \sum\limits_{j=1}^{n} a_{j} x_{j}}{\partial x_{i}}=\dfrac{\partial a_{i} x_{i}}{\partial x_{i}}=a_{i} ∂xi∂aTx=∂xi∂j=1∑najxj=∂xi∂aixi=ai
可见,对向量的第 i i i个分量的求导结果就等于向量 a a a的第 i i i个分量。由于我们是分母布局,最后所有求导结果的分量组成的是一个 n n n维向量。那么其实就是向量 a a a。也就是说:
∂ a T x ∂ x = a \frac{\partial \mathbf{a}^{T} \mathbf{x}}{\partial \mathbf{x}}=\mathbf{a} ∂x∂aTx=a
同理
∂ x T a ∂ x = a \frac{\partial \mathbf{x}^{T} \mathbf{a} }{\partial \mathbf{x}}=\mathbf{a} ∂x∂xTa=a
∂ x T x ∂ x = 2 x \frac{\partial \mathbf{x}^{T} \mathbf{x}}{\partial \mathbf{x}}=2 \mathbf{x} ∂x∂xTx=2x
y = x T A x y=\mathbf{x}^{T} \mathbf{A} \mathbf{x} y=xTAx,求解 ∂ x T A x ∂ x \dfrac{\partial \mathbf{x}^{T} \mathbf{A} \mathbf{x}}{\partial \mathbf{x}} ∂x∂xTAx,对 x \text{x} x的第 k k k个分量进行求导如下
∂ x T A x ∂ x k = ∂ ∑ i = 1 n ∑ j = 1 n x i A i j x j ∂ x k = ∑ i = 1 n A i k x i + ∑ j = 1 n A k j x j \frac{\partial \mathbf{x}^{T} \mathbf{A} \mathbf{x}}{\partial x_{k}}=\frac{\partial \sum_{i=1}^{n} \sum_{j=1}^{n} x_{i} A_{i j} x_{j}}{\partial x_{k}}=\sum_{i=1}^{n} A_{i k} x_{i}+\sum_{j=1}^{n} A_{k j} x_{j} ∂xk∂xTAx=∂xk∂∑i=1n∑j=1nxiAijxj=i=1∑nAikxi+j=1∑nAkjxj
仔细观察一下,第一部分是矩阵 A A A的第 k k k列转置后和 x x x相乘得到,第二部分是矩阵 A A A的第 k k k行和 x x x相乘得到,排列好就是:
∂ x T A x ∂ x = A T x + A x \frac{\partial \mathbf{x}^{T} \mathbf{A} \mathbf{x}}{\partial \mathbf{x}}=\mathbf{A}^{T} \mathbf{x}+\mathbf{A} \mathbf{x} ∂x∂xTAx=ATx+Ax
标量对向量求导的一些基本法则:
常量对向量的求导结果为0。
线性法则:如果 f , g f,g f,g都是实值函数, c 1 , c 2 c_1,c_2 c1,c2为常数,则:
∂ ( c 1 f ( x ) + c 2 g ( x ) ∂ x = c 1 ∂ f ( x ) ∂ x + c 2 ∂ g ( x ) ∂ x \frac{\partial\left(c_{1} f(\mathbf{x})+c_{2} g(\mathbf{x})\right.}{\partial \mathbf{x}}=c_{1} \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}}+c_{2} \frac{\partial g(\mathbf{x})}{\partial \mathbf{x}} ∂x∂(c1f(x)+c2g(x)=c1∂x∂f(x)+c2∂x∂g(x)
乘法法则:如果 f , g f,g f,g都是实值函数,则:
∂ f ( x ) g ( x ) ∂ x = f ( x ) ∂ g ( x ) ∂ x + ∂ f ( x ) ∂ x g ( x ) \frac{\partial f(\mathbf{x}) g(\mathbf{x})}{\partial \mathbf{x}}=f(\mathbf{x}) \frac{\partial g(\mathbf{x})}{\partial \mathbf{x}}+\frac{\partial f(\mathbf{x})}{\partial \mathbf{x}} g(\mathbf{x}) ∂x∂f(x)g(x)=f(x)∂x∂g(x)+∂x∂f(x)g(x)
除法法则:如果 f , g f,g f,g都是实值函数,且 g ( x ) ≠ 0 g(x)\not=0 g(x)=0,则:
∂ f ( x ) / g ( x ) ∂ x = 1 g 2 ( x ) ( g ( x ) ∂ f ( x ) ∂ x − f ( x ) ∂ g ( x ) ∂ x ) \frac{\partial f(\mathbf{x}) / g(\mathbf{x})}{\partial \mathbf{x}}=\frac{1}{g^{2}(\mathbf{x})}\left(g(\mathbf{x}) \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}}-f(\mathbf{x}) \frac{\partial g(\mathbf{x})}{\partial \mathbf{x}}\right) ∂x∂f(x)/g(x)=g2(x)1(g(x)∂x∂f(x)−f(x)∂x∂g(x))
现在来看看定义法如何解决标量对矩阵的求导问题,其最后的结果是一个和自变量同型的矩阵。
y = a T X b , y=\mathbf{a}^{T} \mathbf{X} \mathbf{b}, y=aTXb, 求解 ∂ a T X b ∂ X \dfrac{\partial \mathbf{a}^{T} \mathbf{X} \mathbf{b}}{\partial \mathbf{X}} ∂X∂aTXb,其中, a a a是 m m m维向量, b b b是 n n n维向量, X X X是 m × n m \times n m×n 的矩阵。对矩阵 X X X的任意一个位置的 X i j X_{ij} Xij求导,如下:
∂ a T X b ∂ X i j = ∂ ∑ p = 1 m ∑ q = 1 n a p A p q b q ∂ X i j = ∂ a i A i j b j ∂ X i j = a i b j \frac{\partial \mathbf{a}^{T} \mathbf{X} \mathbf{b}}{\partial X_{i j}}=\frac{\partial \sum_{p=1}^{m} \sum_{q=1}^{n} a_{p} A_{p q} b_{q}}{\partial X_{i j}}=\frac{\partial a_{i} A_{i j} b_{j}}{\partial X_{i j}}=a_{i} b_{j} ∂Xij∂aTXb=∂Xij∂∑p=1m∑q=1napApqbq=∂Xij∂aiAijbj=aibj
即求导结果在 ( i ⋅ j ) (i \cdot j) (i⋅j)位置的求导结果是 a a a向量第 i i i个分量和 b b b第 j j j个分量的乘积,将所有的位置的求导结果排列成一个 m × n m\times n m×n的矩阵,即为 a b T ab^T abT,这样最后的求导结果为:
∂ a T X b ∂ X = a b T \frac{\partial \mathbf{a}^{T} \mathbf{X} \mathbf{b}}{\partial \mathbf{X}}=a b^{T} ∂X∂aTXb=abT
先来一个简单的例子: y = Ax \text{y = Ax} y = Ax,其中 A A A为 n × m n \times m n×m 的矩阵。 x , y x, y x,y分别为 m , n m, n m,n 维向量。需要求导 ∂ A x ∂ x \dfrac{\partial \mathbf{A x}}{\partial \mathbf{x}} ∂x∂Ax,根据定 义, 结果应该是一个 n × m n \times m n×m 的矩阵,先求矩阵的第i行和向量的内积对向量的第j分量求导,用定义法求解过程如下:
∂ A i x ∂ x j = ∂ A i j x j ∂ x j = A i j \frac{\partial \mathbf{A}_{\mathbf{i}} \mathbf{x}}{\partial \mathbf{x}_{\mathbf{j}}}=\frac{\partial A_{i j} x_{j}}{\partial \mathbf{x}_{\mathbf{j}}}=A_{i j} ∂xj∂Aix=∂xj∂Aijxj=Aij
可见矩阵 A A A 的第 i i i行和向量的内积对向量的第 j j j分量求导的结果就是矩阵 A A A的 ( i , j ) (i, j) (i,j) 位置的值。排列起来就是 一个矩阵了,由于我们分子布局, 所以排列出的结果是 A A A,而不是 A T A^{T} AT。
设多个向量存在依赖关系,比如三个向量 x → y → z x\rightarrow y\rightarrow z x→y→z存在依赖关系,则我们有下面的链式求导法则:
∂ z ∂ x = ∂ z ∂ y ∂ y ∂ x \frac{\partial \mathbf{z}}{\partial \mathbf{x}}=\frac{\partial \mathbf{z}}{\partial \mathbf{y}} \frac{\partial \mathbf{y}}{\partial \mathbf{x}} ∂x∂z=∂y∂z∂x∂y
该法则也可以推广到更多的向量依赖关系。但是要注意的是要求所有有依赖关系的变量都是向量,如果有一个 Y Y Y是矩阵,比如 x → Y → z x\rightarrow Y\rightarrow z x→Y→z, 则上式并不成立。
从维度理解链式法则
在我们的机器学习算法中,最终要优化的一般是一个标量损失函数,因此最后求导的目标是标量,无法使用上一节的链式求导法则,比如2向量,最后到1标量的依赖关系: x → y → z \text{x}\rightarrow \text{y}\rightarrow z x→y→z,此时很容易发现维度不相容。
假设 x , y x, y x,y分别是 m , n m, n m,n 维向量, 那么 ∂ z ∂ x \dfrac{\partial z}{\partial \mathbf{x}} ∂x∂z 的求导结果是一个 m × 1 m \times 1 m×1 的向量, , , , 而 ∂ z ∂ y \dfrac{\partial z}{\partial \mathbf{y}} ∂y∂z 是一个 n × 1 n \times 1 n×1 的向量, ∂ y ∂ x \dfrac{\partial \mathbf{y}}{\partial \mathbf{x}} ∂x∂y 是一 个 n × m n \times m n×m 的雅克比矩阵,右边的向量和矩阵是没法直接乘的。
但是假如我们把标量求导的部分都做一个转置,那么维度就可以相容了,也就是:
( ∂ z ∂ x ) T = ( ∂ z ∂ y ) T ∂ y ∂ x \left(\frac{\partial z}{\partial \mathbf{x}}\right)^{T}=\left(\frac{\partial z}{\partial \mathbf{y}}\right)^{T} \frac{\partial \mathbf{y}}{\partial \mathbf{x}} (∂x∂z)T=(∂y∂z)T∂x∂y
但是毕竟我们要求导的是 ( ∂ z ∂ x ) (\dfrac{\partial z}{\partial \text{x}}) (∂x∂z),而不是它的转置,因此两边转置我们可以得到标量对多个向量求导的链式法则:
∂ z ∂ x = ( ∂ y ∂ x ) T ∂ z ∂ y \frac{\partial z}{\partial \mathbf{x}}=\left(\frac{\partial \mathbf{y}}{\partial \mathbf{x}}\right)^{T} \frac{\partial z}{\partial \mathbf{y}} ∂x∂z=(∂x∂y)T∂y∂z
如果是标量对更多的向量求导,比如 y 1 → y 2 → … → y n → z \mathbf{y}_{\mathbf{1}} \rightarrow \mathbf{y}_{\mathbf{2}} \rightarrow \ldots \rightarrow \mathbf{y}_{\mathbf{n}} \rightarrow z y1→y2→…→yn→z,则其链式求导表达式可以表示为:
∂ z ∂ y 1 = ( ∂ y n ∂ y n − 1 ∂ y n − 1 ∂ y n − 2 … ∂ y 2 ∂ y 1 ) T ∂ z ∂ y n \frac{\partial z}{\partial \mathbf{y}_{1}}=\left(\frac{\partial \mathbf{y}_{\mathbf{n}}}{\partial \mathbf{y}_{\mathbf{n}-1}} \frac{\partial \mathbf{y}_{\mathbf{n}-1}}{\partial \mathbf{y}_{\mathbf{n}-2}} \ldots \frac{\partial \mathbf{y}_{2}}{\partial \mathbf{y}_{1}}\right)^{T} \frac{\partial z}{\partial \mathbf{y}_{\mathbf{n}}} ∂y1∂z=(∂yn−1∂yn∂yn−2∂yn−1…∂y1∂y2)T∂yn∂z
最小二乘法求导的例子。最小二乘法优化的目标是最小化如下损失函数:
l = ( X θ − y ) T ( X θ − y ) l=(X \theta-y)^{T}(X \theta-y) l=(Xθ−y)T(Xθ−y)
我们优化的损失函数 l l l是一个标量, 而模型参数 θ \theta θ是一个向量, 期望 L L L对 θ \theta θ求导, 并求出导数等于0时候的机制点。我们假设向量 z = X θ − y , z=X \theta-y, z=Xθ−y, 则 l = z T z , θ → z → l l=z^{T} z, \quad \theta \rightarrow z \rightarrow l l=zTz,θ→z→l 存在链式求导的关系, 因此:
∂ l ∂ θ = ( ∂ z ∂ θ ) T ∂ l ∂ z = X T ( 2 z ) = 2 X T ( X θ − y ) \frac{\partial l}{\partial \theta}=\left(\frac{\partial z}{\partial \theta}\right)^{T} \frac{\partial l}{\partial \mathbf{z}}=X^{T}(2 z)=2 X^{T}(X \theta-y) ∂θ∂l=(∂θ∂z)T∂z∂l=XT(2z)=2XT(Xθ−y)
假设有这样的依赖关系: X → Y → z \mathbf{X} \rightarrow \mathbf{Y} \rightarrow z X→Y→z,那么我们有:
∂ z ∂ x i j = ∑ k , l ∂ z ∂ Y k l ∂ Y k l ∂ X i j = tr ( ( ∂ z ∂ Y ) T ∂ Y ∂ X i j ) \frac{\partial z}{\partial x_{i j}}=\sum_{k, l} \frac{\partial z}{\partial Y_{k l}} \frac{\partial Y_{k l}}{\partial X_{i j}}=\operatorname{tr}\left(\left(\frac{\partial z}{\partial Y}\right)^{T} \frac{\partial Y}{\partial X_{i j}}\right) ∂xij∂z=k,l∑∂Ykl∂z∂Xij∂Ykl=tr((∂Y∂z)T∂Xij∂Y)
这里大家会发现我们没有给出基于矩阵整体的链式求导法则,主要原因是矩阵对矩阵的求导是比较复杂的定义,我们目前也未涉及。因此只能给出对矩阵中一个标量的链式求导方法。这个方法并不实用,因为我们并不想每次都基于定义法来求导最后再去排列求导结果。
我们来看这个常见问题: A A A, X , B , Y X, B, Y X,B,Y 都是矩阵, z z z 是标量, 其中 z = f ( Y ) , Y = A X + B z=f(Y), Y=A X+B z=f(Y),Y=AX+B,先使用上面的标量链式求导公式:
∂ z ∂ x i j = ∑ k , l ∂ z ∂ Y k l ∂ Y k l ∂ X i j \frac{\partial z}{\partial x_{i j}}=\sum_{k, l} \frac{\partial z}{\partial Y_{k l}} \frac{\partial Y_{k l}}{\partial X_{i j}} ∂xij∂z=k,l∑∂Ykl∂z∂Xij∂Ykl
再来看看后半部分的导数:
∂ Y k l ∂ X i j = ∂ ∑ s ( A k s X s l ) ∂ X i j = ∂ A k i X i l ∂ X i j = A k i δ l j \frac{\partial Y_{k l}}{\partial X_{i j}}=\frac{\partial \sum_{s}\left(A_{k s} X_{s l}\right)}{\partial X_{i j}}=\frac{\partial A_{k i} X_{i l}}{\partial X_{i j}}=A_{k i} \delta_{l j} ∂Xij∂Ykl=∂Xij∂∑s(AksXsl)=∂Xij∂AkiXil=Akiδlj
其中 δ l j \delta_{lj} δlj在 l = j l=j l=j时为1,否则为0。那么最终的标签链式求导公式转化为:
∂ Y k l ∂ X i j = ∂ ∑ s ( A k s X s l ) ∂ X i j = ∂ A k i X i l ∂ X i j = A k i δ l j \frac{\partial Y_{k l}}{\partial X_{i j}}=\frac{\partial \sum_{s}\left(A_{k s} X_{s l}\right)}{\partial X_{i j}}=\frac{\partial A_{k i} X_{i l}}{\partial X_{i j}}=A_{k i} \delta_{l j} ∂Xij∂Ykl=∂Xij∂∑s(AksXsl)=∂Xij∂AkiXil=Akiδlj
即矩阵 A T A^{T} AT 的第 i i i行和 ∂ z ∂ Y \frac{\partial z}{\partial Y} ∂Y∂z 的第 j j j列的内积。排列成矩阵即为:
∂ z ∂ X = A T ∂ z ∂ Y \frac{\partial z}{\partial X}=A^{T} \frac{\partial z}{\partial Y} ∂X∂z=AT∂Y∂z
总结下就是:
z = f ( Y ) , Y = A X + B → ∂ z ∂ X = A T ∂ z ∂ Y z=f(Y), Y=A X+B \rightarrow \frac{\partial z}{\partial X}=A^{T} \frac{\partial z}{\partial Y} z=f(Y),Y=AX+B→∂X∂z=AT∂Y∂z
这结论在 x x x是一个向量的时候也成立,即:
z = f ( y ) , y = A x + b → ∂ z ∂ x = A T ∂ z ∂ y z=f(\mathbf{y}), \mathbf{y}=A \mathbf{x}+\mathbf{b} \rightarrow \frac{\partial z}{\partial \mathbf{x}}=A^{T} \frac{\partial z}{\partial \mathbf{y}} z=f(y),y=Ax+b→∂x∂z=AT∂y∂z
如果要求导的自变量在左边,线性变换在右边,也有类似稍有不同的结论如下,证明方法是类似的
z = f ( Y ) , Y = X A + B → ∂ z ∂ X = ∂ z ∂ Y A T z = f ( y ) , y = X a + b → ∂ z ∂ X = ∂ z ∂ y a T \begin{array}{l} z=f(Y), Y=X A+B \rightarrow \frac{\partial z}{\partial X}=\frac{\partial z}{\partial Y} A^{T} \\ z=f(\mathbf{y}), \mathbf{y}=X \mathbf{a}+\mathbf{b} \rightarrow \frac{\partial z}{\partial \mathbf{X}}=\frac{\partial z}{\partial \mathbf{y}} a^{T} \end{array} z=f(Y),Y=XA+B→∂X∂z=∂Y∂zATz=f(y),y=Xa+b→∂X∂z=∂y∂zaT