0. 前言

\quad\;\; 本文主要对标量对向量和矩阵以及向量对向量求导三种场景进行求解,标量对向量和矩阵求导以分母布局为默认布局,向量对向量求导以分子布局为默认布局,所有向量默认为列向量。

1. 定义法

1.1 标量对向量求导

\quad\;\; 定义实值函数 f : R n → R f:R^n\to R f:Rn→R,自变量 x \mathbf{x} x是n维向量,输出 y y y是标量,求解 ∂ a T x ∂ x \frac{\partial \mathbf{a}^T \mathbf{x}} {\partial \mathbf{x}} ∂x∂aTx​。
\quad\;\; 标量对向量的求导,其实就是标量对向量里的每个分量分别求导,最后把求导结果组合起来,通过向量来表示。

  1. y = a T x y=\mathbf{a}^T \mathbf{x} y=aTx,求解 ∂ y ∂ x \frac{\partial y} {\partial \mathbf{x}} ∂x∂y​。
    根据定义,我们先对 x \mathbf{x} x的第 i {i} i分量求导,这是一个标量对标量的求导,如下:
    ∂ a T x ∂ x i = ∂ ∑ j = 1 n a j x j ∂ x i = a i \frac {\partial \mathbf{a}^T \mathbf{x}} {\partial x_i} = \frac {\partial \sum_{j=1}^n a_j x_j} {\partial x_i} = a_i ∂xi​∂aTx​=∂xi​∂∑j=1n​aj​xj​​=ai​
    可见,对向量 x \mathbf{x} x的第 i i i分量求导就是向量 a \mathbf{a} a的第 i i i个分量。根据分母布局将所有求导结果组合起来就是向量 a \mathbf{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 ∂ x T x ∂ x = 2 x \frac {\partial \mathbf{x}^T \mathbf{a}} {\partial \mathbf{x}} = \mathbf{a} \\ \; \\ \frac {\partial \mathbf{x}^T \mathbf{x}} {\partial \mathbf{x}} = 2 \mathbf{x} ∂x∂xTa​=a∂x∂xTx​=2x

  2. y = x T A x y=\mathbf{x}^T A \mathbf{x} y=xTAx,求解 ∂ y ∂ x \frac{\partial y} {\partial \mathbf{x}} ∂x∂y​。
    对向量 x 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 A \mathbf{x}} {\partial x_k} = \frac {\partial \sum_{i=1}^n \sum_{j=1}^n x_i A_{ij} x_j} {\partial x_k} = \sum_{i=1}^n A_{ik} x_i + \sum_{j=1}^n A_{kj} x_j ∂xk​∂xTAx​=∂xk​∂∑i=1n​∑j=1n​xi​Aij​xj​​=i=1∑n​Aik​xi​+j=1∑n​Akj​xj​
    上式中,第一部分为矩阵 A A A的第 k k k列转置后和 x x x相乘得到,第二部分为矩阵 A A A的第 k k k行和 x x x相乘得到,将所有的结果组合后为:
    ∂ x T A x ∂ x k = A T x + A x \frac {\partial \mathbf{x}^T A \mathbf{x}} {\partial x_k}=A^T \mathbf{x} + A \mathbf{x} ∂xk​∂xTAx​=ATx+Ax

1.2 标量对向量求导的基本法则

  1. 常量对向量求导的结果为零;
  2. 线性法则:如果 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 (c_1 f(x) + c_2 g(x))} {\partial x}=c_1 \frac {\partial f(x)} {\partial x} + c_2 \frac {\partial g(x)} {\partial x} ∂x∂(c1​f(x)+c2​g(x))​=c1​∂x∂f(x)​+c2​∂x∂g(x)​
  3. 乘法法则:如果 f , g f, g f,g均为实值函数,则:
    ∂ f ( x ) g ( x ) ∂ x = f ( x ) ∂ g ( x ) ∂ x + ∂ f ( x ) ∂ x g ( x ) \frac {\partial f(x)g(x)} {\partial x} = f(x) \frac {\partial g(x)} {\partial x} + \frac {\partial f(x)} {\partial x} g(x) ∂x∂f(x)g(x)​=f(x)∂x∂g(x)​+∂x∂f(x)​g(x)
  4. 除法法则:如果 f , g f, g f,g均为实值函数,则:
    ∂ f ( x ) / g ( x ) ∂ x = 1 g 2 ( x ) ( g ( x ) ∂ f ( x ) ∂ x − f ( x ) ∂ g ( x ) ∂ x ) \frac {\partial f(x) / g(x)} {\partial x} = \frac {1} {g^2(x)} (g(x) \frac {\partial f(x)} {\partial x} - f(x) \frac {\partial g(x)} {\partial x}) ∂x∂f(x)/g(x)​=g2(x)1​(g(x)∂x∂f(x)​−f(x)∂x∂g(x)​)

1.3 标量对矩阵求导

\quad\;\; 标量对矩阵求导和标量对向量求导思路类似,只是最后的结果为一个和自变量同型的矩阵。
\quad\;\; 假设 y = a T X b y=\mathbf{a}^T \mathbf{X} b y=aTXb,其中 a \mathbf{a} a是m维向量, b \mathbf{b} b 为n维向量, X \mathbf{X} X 为 m × n m \times n m×n 的矩阵,则:
∂ a T X b ∂ X i j = ∂ ∑ p = 1 m ∑ q = 1 n a p X p q b q ∂ X i j = ∂ a i X i j b j ∂ X i j = a i b j \frac {\partial \mathbf{a}^T \mathbf{X} b} {\partial X_{ij}} = \frac {\partial \sum_{p=1}^m \sum_{q=1}^n a_p X_{pq} b_q} {\partial X_{ij}} = \frac {\partial a_i X_{ij} b_j} {\partial X_{ij}} = a_i b_j ∂Xij​∂aTXb​=∂Xij​∂∑p=1m​∑q=1n​ap​Xpq​bq​​=∂Xij​∂ai​Xij​bj​​=ai​bj​

\quad\;\; 即在第 (i, j) 处的求导结果为向量 a a a的第 i i i 个分量和向量 b b b 的第 j j j 个分量相乘所得,将所有的结果组合为一个 m × n m \times n m×n 的矩阵,则:
∂ a T X b ∂ X i j = a b T \frac {\partial \mathbf{a}^T \mathbf{X} b} {\partial X_{ij}} = \mathbf{a} \mathbf{b}^T ∂Xij​∂aTXb​=abT

1.4 向量对向量求导

\quad\;\; 假设 y = A x \mathbf{y}=A \mathbf{x} y=Ax,其中 A A A为 m × n m \times n m×n 矩阵, x \mathbf{x} x 为 n 维向量, y \mathbf{y} y 为 m 维向量,先求矩阵 A A A的第 i i i行和向量 x \mathbf{x} x的内积对向量 x \mathbf{x} x的第 j 个分量的求导结果,即:
∂ A i x ∂ x j = ∂ A i j x j ∂ x j = A i j \frac {\partial A_i \mathbf{x}} {\partial x_j} = \frac {\partial A_{ij}x_j} {\partial x_j} = A_{ij} ∂xj​∂Ai​x​=∂xj​∂Aij​xj​​=Aij​
\quad\;\; 可见,矩阵 A A A的第 i i i行和向量 x \mathbf{x} x的内积对向量 x \mathbf{x} x的第 j 个分量的求导结果就是矩阵 A A A在 (i, j) 位置处的。根据分子布局将所有的结果组合排列后的结果为矩阵 A A A。

2. 微分法

2.1 矩阵微分

\quad\;\; 在高数里我们学习过标量的微分和导数,它们之间的关系为: d f = f ′ ( x ) d x df=f^{'}(x)dx df=f′(x)dx。如果是对多变量求微分,可以写成:
d f = ∑ i = 1 n ∂ f ∂ x i d x i = ( ∂ f ∂ x ) T d x df=\sum_{i=1}^n \frac {\partial f} {\partial x_i}dx_i = (\frac {\partial f} {\partial \mathbf{x}})^Td \mathbf{x} df=i=1∑n​∂xi​∂f​dxi​=(∂x∂f​)Tdx
\quad\;\; 从上式可以发现,标量对向量的求导和它的向量微分之间有一个转置的关系。
\quad\;\; 推广到矩阵,矩阵微分的定义为:
d f = ∑ i = 1 m ∑ j = 1 n ∂ f ∂ X i j d X i j = t r ( ( ∂ f ∂ X ) T d X ) df=\sum_{i=1}^m \sum_{j=1}^n \frac {\partial f} {\partial X_{ij}} dX_{ij} = tr((\frac {\partial f} {\partial \mathbf{X}})^T d \mathbf{X}) df=i=1∑m​j=1∑n​∂Xij​∂f​dXij​=tr((∂X∂f​)TdX)
\quad\;\; 上式的第二步用到了矩阵迹的性质,迹函数等于主对角线之和,即:
t r ( A T B ) = ∑ i , j A i j B i j tr(A^T B) = \sum_{i,j}A_{ij} B_{ij} tr(ATB)=i,j∑​Aij​Bij​
\quad\;\; 从上式同样可以发现,标量对矩阵的求导和它的矩阵微分之间有一个转置的关系,只是外面多了一个迹函数公式。由于标量的迹函数值就是它本身,因此矩阵微分和向量微分可以统一表示:
d f = t r ( ( ∂ f ∂ X ) T d X ) d f = t r ( ( ∂ f ∂ x ) T d x ) df = tr((\frac {\partial f} {\partial \mathbf{X}})^T d\mathbf{X}) \\\; \\ df = tr((\frac {\partial f} {\partial \mathbf{x}})^T d \mathbf{x}) df=tr((∂X∂f​)TdX)df=tr((∂x∂f​)Tdx)

2.2 矩阵微分的性质

  1. 微分加减法: d ( X + Y ) = d X + d Y , d ( X + Y ) = d X − d Y d(\mathbf{X} + \mathbf{Y}) = d\mathbf{X} + d\mathbf{Y}, d(\mathbf{X} + \mathbf{Y}) = d\mathbf{X} - d\mathbf{Y} d(X+Y)=dX+dY,d(X+Y)=dX−dY
  2. 微分乘法: d ( X Y ) = ( d X ) Y + X ( d Y ) d(\mathbf{XY}) = (d\mathbf{X})Y + \mathbf{X} (d\mathbf{Y}) d(XY)=(dX)Y+X(dY)
  3. 微分转置: d ( X T ) = ( d ( X ) ) T d(\mathbf{X}^T)=(d(\mathbf{X}))^T d(XT)=(d(X))T
  4. 微分的迹: d t r ( X ) = t r ( d X ) d tr(\mathbf{X})=tr(d\mathbf{X}) dtr(X)=tr(dX)
  5. 微分哈达马乘积: d ( X ⊙ Y ) = X ⊙ d Y + d X ⊙ Y d(\mathbf{X} \odot \mathbf{Y}) = \mathbf{X} \odot d\mathbf{Y} + d\mathbf{X} \odot \mathbf{Y} d(X⊙Y)=X⊙dY+dX⊙Y
  6. 逐元素求导: d σ ( X ) = σ ′ ( X ) ⊙ d X d\sigma( \mathbf{X}) = \sigma ^{'}(\mathbf{X}) \odot d\mathbf{X} dσ(X)=σ′(X)⊙dX
  7. 逆矩阵微分: d X − 1 = − X − 1 d X X − 1 d\mathbf{X}^{-1} = -\mathbf{X}^{-1}d\mathbf{X}\mathbf{X}^{-1} dX−1=−X−1dXX−1
  8. 行列式微分: d ∣ X ∣ = ∣ X ∣ t r ( X − 1 d X ) d|\mathbf{X}| = |\mathbf{X}|tr(\mathbf{X}^{-1}d\mathbf{X}) d∣X∣=∣X∣tr(X−1dX)

2.3 迹函数性质

  1. 标量的迹等于自己: t r ( x ) = x tr(x) = x tr(x)=x。
  2. 转置不变: t r ( A T ) = t r ( A ) tr(A^T) = tr(A) tr(AT)=tr(A)。
  3. 交换律: t r ( A B ) = t r ( B A ) tr(AB) = tr(BA) tr(AB)=tr(BA), 这个需要 A , B T A, B^T A,BT同纬度。
  4. 加减法: t r ( X + Y ) = t r ( X ) + t r ( Y ) , t r ( X − Y ) = t r ( X ) − t r ( Y ) tr(\mathbf{X} + \mathbf{Y}) = tr(\mathbf{X}) + tr(\mathbf{Y}), tr(\mathbf{X} - \mathbf{Y}) = tr(\mathbf{X}) - tr(\mathbf{Y}) tr(X+Y)=tr(X)+tr(Y),tr(X−Y)=tr(X)−tr(Y)。
  5. 矩阵乘法和迹交换: t r ( ( A ⊙ B ) T C ) = t r ( A T ( B ⊙ C ) ) tr((A \odot B)^T C) = tr(A^T (B \odot C)) tr((A⊙B)TC)=tr(AT(B⊙C)),需要满足 A , B , C A,B,C A,B,C 同纬度。

2.4 标量对向量矩阵求导

\quad\;\; 若标量函数 f f f是矩阵经加减乘除、逆、行列式、逐元素函数等运算组成,则使用相应的运算法则对 f f f求微分,再使用迹函数技巧给 d f df df套上迹并将其它项交换至 d X dX dX左侧,那么对于迹函数里面 d X dX dX左侧的部分,只需要加一个转置就可以得到导数了。

  1. y = a T X b , ∂ y ∂ X y=\mathbf{a}^T \mathbf{X} \mathbf{b}, \; \frac{\partial y} {\partial \mathbf{X}} y=aTXb,∂X∂y​
    首先,使用微分法的性质对 f f f求微分,得到:
    d y = d ( a T X b ) = a T d X b dy = d(\mathbf{a}^T \mathbf{X} \mathbf{b}) = \mathbf{a}^T d \mathbf{X} \mathbf{b} dy=d(aTXb)=aTdXb
    第二步,两边套上迹函数,即:
    d y = t r ( d y ) = t r ( a T X b ) = t r ( b a T d X ) dy = tr(dy) = tr(\mathbf{a}^T \mathbf{X} \mathbf{b}) = tr(\mathbf{b} \mathbf{a}^T d \mathbf{X}) dy=tr(dy)=tr(aTXb)=tr(baTdX)
    其中第一到第二步使用了上面迹函数性质1,第三步到第四步用到了上面迹函数的性质3。
    根据矩阵微分和导数的定义,迹函数里面在 d X d\mathbf{X} dX左边的部分 b a T \mathbf{b} \mathbf{a}^T baT,加上一个转置即为我们要求的导数,即:
    ∂ f ∂ x = ( b a T ) T = a b T \frac {\partial f} {\partial x} = (\mathbf{b} \mathbf{a} ^T)^T = \mathbf{a} \mathbf{b} ^T ∂x∂f​=(baT)T=abT

  2. y = a T e x p ( X b ) , ∂ y ∂ X y=\mathbf{a}^T exp(\mathbf{X} \mathbf{b}), \; \frac{\partial y} {\partial \mathbf{X}} y=aTexp(Xb),∂X∂y​
    d y = t r ( d y ) = t r ( a T d e x p ( X b ) ) = t r ( a T ( e x p ( X b ) ⊙ d ( X b ) ) ) = t r ( ( a ⊙ e x p ( X b ) ) T d X b ) = t r ( b ( a ⊙ e x p ( X b ) ) T d X ) dy = tr(dy) = tr(\mathbf{a}^T dexp(\mathbf{X} \mathbf{b})) = tr(\mathbf{a}^T (exp(\mathbf{X} \mathbf{b}) \odot d(\mathbf{Xb}))) = tr((\mathbf{a} \odot exp(\mathbf{Xb}))^T d\mathbf{Xb}) = tr(b(\mathbf{a} \odot exp(\mathbf{Xb}))^T d\mathbf{X}) dy=tr(dy)=tr(aTdexp(Xb))=tr(aT(exp(Xb)⊙d(Xb)))=tr((a⊙exp(Xb))TdXb)=tr(b(a⊙exp(Xb))TdX)
    其中第三步到第4步使用了上面迹函数的性质5. 这样我们的求导结果为:
    ∂ y ∂ X = ( a ⊙ e x p ( X b ) ) b T \frac {\partial y} {\partial \mathbf{X}} = (\mathbf{a} \odot exp(\mathbf{Xb})) \mathbf{b}^T ∂X∂y​=(a⊙exp(Xb))bT

3. 链式法

3.1 向量对向量求导的链式法则

\quad\;\; 假设多个向量存在依赖关系,比如三个向量 x → y → z \mathbf{x} \to \mathbf{y} \to \mathbf{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​
\quad\;\; 该法则也可以推广到更多的向量依赖关系,但要求所有有依赖关系的变量都是向量。
\quad\;\; 从矩阵纬度相容的角度也很容易理解上面的链式法则,假设 x , y , z \mathbf{x}, \mathbf{y}, \mathbf{z} x,y,z 分别是 m , n , p m, n, p m,n,p 纬的向量,则求导结果 ∂ z ∂ x \frac{\partial \mathbf{z}} {\partial \mathbf{x}} ∂x∂z​ 是一个 p × m p \times m p×m 的雅克比矩阵,而右边 ∂ z ∂ y \frac{\partial \mathbf{z}} {\partial \mathbf{y}} ∂y∂z​ 是一个 p × n p \times n p×n 的雅克比矩阵, ∂ y ∂ x \frac{\partial \mathbf{y}} {\partial \mathbf{x}} ∂x∂y​ 是一个 n × m n \times m n×m 的雅可比矩阵,两个雅克比矩阵的乘积纬度刚好是 p × m p \times m p×m ,和左边相容。

3.2 标量对多个向量的链式求导法则

\quad\;\; 假设 x , y \mathbf{x}, \mathbf{y} x,y 分别是 m , n m, n m,n 维向量, z z z 是一个标量, 那么 ∂ z ∂ x \frac{\partial z} {\partial \mathbf{x}} ∂x∂z​的求导结果是一个 m × 1 m \times 1 m×1 的向量, ∂ y ∂ x \frac {\partial \mathbf{y}} {\partial \mathbf{x}} ∂x∂y​ 是一个 n × m n \times m n×m 的雅克比矩阵,它们是没法直接相乘的。标量对多个向量求导的链式法则为:
∂ z ∂ x = ( ∂ y ∂ x ) T ∂ z ∂ y \frac{\partial z}{\partial \mathbf{x}} = (\frac{\partial \mathbf{y}} {\partial \mathbf{x}})^T \frac{\partial z} {\partial \mathbf{y}} ∂x∂z​=(∂x∂y​)T∂y∂z​
\quad\;\; 如果标量对更多的向量求导,比如 y 1 → y 2 → . . . → y n → z \mathbf{y_1} \to \mathbf{y_2} \to ... \to \mathbf{y_n} \to 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}} = (\frac{\partial \mathbf{y_n}} {\partial \mathbf{y_{n-1}}} \frac{\partial \mathbf{y_{n-1}}} {\partial \mathbf{y_{n-2}}} \dots \frac{\partial \mathbf{y_2}} {\partial \mathbf{y_1}})^T \frac{\partial z} {\partial \mathbf{y_n}} ∂y1​∂z​=(∂yn−1​∂yn​​∂yn−2​∂yn−1​​…∂y1​∂y2​​)T∂yn​∂z​
\quad\;\; 举一个最常见的最小二乘法求导的例子。最小二乘法的目标是最小化如下损失函数:
J = ( X θ − y ) T ( ( X θ − y ) J = (\mathbf{X \theta} - \mathbf{y})^T((\mathbf{X \theta} - \mathbf{y}) J=(Xθ−y)T((Xθ−y)
\quad\;\; 优化的目标函数 J J J 是一个变量,而模型参数 θ \mathbf{\theta} θ 是一个向量,期望 J J J 对 θ \mathbf{\theta} θ 求导,并求出倒数等于零时候的极值点。我们假设 z = X θ − y \mathbf{z} = \mathbf{X \theta} - \mathbf{y} z=Xθ−y ,则 J = z T z , θ → z → J J = \mathbf{z} ^T \mathbf{z}, \mathbf{\theta} \to \mathbf{z} \to J J=zTz,θ→z→J 存在链式求导的关系,因此:
∂ J ∂ θ = ( ∂ z ∂ θ ) T ∂ J ∂ z = X T ( 2 z ) = 2 X T ( X θ − y ) \frac {\partial J} {\partial \mathbf{\theta}} = (\frac {\partial \mathbf{z}} {\partial \mathbf{\theta}})^T \frac {\partial J} {\partial \mathbf{z}} = \mathbf{X}^T (2\mathbf{z}) = 2\mathbf{X}^T (\mathbf{X \theta} - \mathbf{y}) ∂θ∂J​=(∂θ∂z​)T∂z∂J​=XT(2z)=2XT(Xθ−y)

3.3 标量对多个矩阵的链式求导法则

\quad\;\; 假设有这样的依赖关系: X → Y → z \mathbf{X} \to \mathbf{Y} \to z X→Y→z,那么我们有:
∂ z ∂ X i j = ∑ k , l ∂ z ∂ Y k l ∂ Y k l ∂ X i j = t r ( ( ∂ z ∂ Y ) T ∂ Y ∂ X i j ) \frac{\partial z}{\partial X_{ij}} = \sum\limits_{k,l}\frac{\partial z}{\partial Y_{kl}} \frac{\partial Y_{kl}}{\partial X_{ij}} =tr((\frac{\partial z}{\partial Y})^T\frac{\partial Y}{\partial X_{ij}}) ∂Xij​∂z​=k,l∑​∂Ykl​∂z​∂Xij​∂Ykl​​=tr((∂Y∂z​)T∂Xij​∂Y​)
\quad\;\; 这里没有给出基于矩阵整体的链式求导法则,主要原因是矩阵对矩阵的求导是比较复杂的定义,目前只能给出对矩阵中一个标量的链式求导方法。这个方法并不实用,因为我们并不想每次都基于定义法来求导最后再去排列求导结果。
\quad\;\; 虽然我们没有全局的标量对矩阵的链式求导法则,但是对于一些线性关系的链式求导,我们还是可以得到一些有用的结论的。
\quad\;\; 我们来看这个常见问题: A , X , B , Y A,X,B,Y A,X,B,Y都是矩阵, z z z是标量,其中 z = f ( Y ) , Y = A X + B z= f(Y), Y=AX+B z=f(Y),Y=AX+B,我们要求出 ∂ z ∂ X \frac{\partial z}{\partial X} ∂X∂z​,这个问题在机器学习中是很常见的。此时,我们并不能直接整体使用矩阵的链式求导法则,因为矩阵对矩阵的求导结果不好处理。
\quad\;\; 这里使用定义法试一试,先使用上面的标量链式求导公式:
∂ z ∂ X i j = ∑ k , l ∂ z ∂ Y k l ∂ Y k l ∂ X i j \frac{\partial z}{\partial X_{ij}} = \sum\limits_{k,l}\frac{\partial z}{\partial Y_{kl}} \frac{\partial Y_{kl}}{\partial X_{ij}} ∂Xij​∂z​=k,l∑​∂Ykl​∂z​∂Xij​∂Ykl​​
\quad\;\; 我们再来看看后半部分的导数:
∂ 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_{kl}}{\partial X_{ij}} = \frac{\partial \sum\limits_s(A_{ks}X_{sl})}{\partial X_{ij}} = \frac{\partial A_{ki}X_{il}}{\partial X_{ij}} =A_{ki}\delta_{lj} ∂Xij​∂Ykl​​=∂Xij​∂s∑​(Aks​Xsl​)​=∂Xij​∂Aki​Xil​​=Aki​δlj​
\quad\;\; 其中 δ l j \delta_{lj} δlj​在 l = j l=j l=j时为1,否则为0。
\quad\;\; 那么最终的标签链式求导公式转化为: ∂ z ∂ X i j = ∑ k , l ∂ z ∂ Y k l A k i δ l j = ∑ k ∂ z ∂ Y k j A k i \frac{\partial z}{\partial X_{ij}} = \sum\limits_{k,l}\frac{\partial z}{\partial Y_{kl}} A_{ki}\delta_{lj} = \sum\limits_{k}\frac{\partial z}{\partial Y_{kj}} A_{ki} ∂Xij​∂z​=k,l∑​∂Ykl​∂z​Aki​δlj​=k∑​∂Ykj​∂z​Aki​
\quad\;\; 即矩阵 A T A^T AT的第i行和 ∂ z ∂ Y \frac{\partial z}{\partial Y} ∂Y∂z​的第j列的内积。排列成矩阵即为: ∂ z ∂ X = A T ∂ z ∂ Y \frac{\partial z}{\partial X} = A^T\frac{\partial z}{\partial Y} ∂X∂z​=AT∂Y∂z​
\quad\;\; 总结下就是: z = f ( Y ) , Y = A X + B → ∂ z ∂ X = A T ∂ z ∂ Y z= f(Y), Y=AX+B \to \frac{\partial z}{\partial X} = A^T\frac{\partial z}{\partial Y} z=f(Y),Y=AX+B→∂X∂z​=AT∂Y∂z​
\quad\;\; 这结论在 x \mathbf{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} \to \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​
\quad\;\; 如果要求导的自变量在左边,线性变换在右边,也有类似稍有不同的结论如下,证明方法是类似的,这里直接给出结论:
z = f ( Y ) , Y = X A + B → ∂ z ∂ X = ∂ z ∂ Y A T z= f(Y), Y=XA+B \to \frac{\partial z}{\partial X} = \frac{\partial z}{\partial Y}A^T z=f(Y),Y=XA+B→∂X∂z​=∂Y∂z​AT
z = f ( y ) , y = X a + b → ∂ z ∂ X = ∂ z ∂ y a T z= f(\mathbf{y}), \mathbf{y}=X\mathbf{a}+\mathbf{b} \to \frac{\partial z}{\partial \mathbf{X}} = \frac{\partial z}{\partial \mathbf{y}}a^T z=f(y),y=Xa+b→∂X∂z​=∂y∂z​aT
\quad\;\; 使用好上述四个结论,对于机器学习尤其是深度学习里的求导问题可以非常快的解决,大家可以试一试。

参考: https://www.cnblogs.com/pinard/category/894690.html

标量、向量和矩阵的求导法则相关推荐

  1. 张量、标量、向量和矩阵

    张量.标量.向量和矩阵 https://github.com/bovem/publications/tree/master/Linear%20Algebra 张量是一个数据数组(数字.函数等),它以任 ...

  2. 复数 标量/向量/矩阵 求导

    Wirtinger derivative: 对复标量求导 Wirtinger derivative: 令 z=x+jyz=x+jyz=x+jy,则 f(z)f(z)f(z) 对 zzz 和 zzz 的 ...

  3. 数学基础(向量和矩阵)

    原文地址:OpenGL 2d旋转坐标公式为:newx = x*cos(a) - y * sin(a)   newy = x*sin(a) + y * cos(a) 推导这个公式主要用到了sin(a + ...

  4. python求向量函数的雅可比矩阵_在python Numpy中求向量和矩阵的范数实例

    np.linalg.norm(求范数):linalg=linear(线性)+algebra(代数),norm则表示范数. 函数参数 x_norm=np.linalg.norm(x, ord=None, ...

  5. 3D数学 向量和矩阵

    向量和矩阵 坐标系 左手系.右手系 向量常用公式 向量的模(长度) 标准化向量 点积 叉积 矩阵常用性质 逆矩阵性质 正交矩阵 齐次空间 坐标空间变换推到过程 MVP矩阵 局部空间 世界空间 模型矩阵 ...

  6. python二维元素向量_详解python Numpy中求向量和矩阵的范数

    在python Numpy中求向量和矩阵的范数实例 np.linalg.norm(求范数):linalg=linear(线性)+algebra(代数),norm则表示范数. 函数参数 x_norm=n ...

  7. 内部矩阵维度必须一致simulink_深度学习/目标检测之numpy——向量和矩阵乘法相关...

    numpy中表示向量和矩阵乘法的有四种"*".outer.dot.multiply. 1.关于 "*" 的用法 "*" 也为对于元素的乘积, ...

  8. c++向量和数组的区别_Spark机器学习-Java版(一)-向量和矩阵

    1.概述 Spark早期版本时,MLlib是基于RDD来进行分析的,其使用的是 spark. mllib包.而言2.0版本后,由RDD这种抽象数据结构转换到了基于 dataframe上,其相关API也 ...

  9. 模式识别中的特征向量和矩阵的特征向量有什么关系

    模式识别中的特征向量和矩阵的特征向量有什么关系 特征向量是个什么东西?学过矩阵论的人都知道,一个可逆的矩阵可以分解为特征值和特征向量的乘积,即AV=lambaV,其中V是特征向量矩阵:这个的好处是可以 ...

最新文章

  1. RISC-V 正在成为芯片世界中的 Linux
  2. php写邮件空格_PHP 邮件漏洞小结
  3. IDC_EDIT控件输入数字改变IDC_SCROLLBAR滑块位置
  4. PHP开发环境MAMP for Windows
  5. mysql的数据类型——待写
  6. python3----列表
  7. 常用数学特殊符号,复制到word中使用
  8. 观察者模式Observer
  9. 热门话题“看第一学历招人公平吗?”数据告诉你,网友们都是如何想的
  10. C++_类和对象_C++运算符重载_赋值运算符重载_利用深拷贝实现对象深度赋值运算---C++语言工作笔记058
  11. centos6.5 搭建时间服务器
  12. 如何获得CSDN积分
  13. ‘’vr‘’全景抓鸡游戏总结
  14. sqlh和mysql的区别_HSQL和MySQL的区别
  15. 如何用C语言在控制台输出437代码页编码下的ASCII字符
  16. 有关Android插件化的一些总结思考,html5在移动端开发优势更明显
  17. python 机器视觉测量_用Opencv python实现精密测量
  18. day51 列表、表格、form标签
  19. python报错:patsy.PatsyError: error tokenizing input (maybe an unclosed string?)
  20. dgl源码阅读笔记(3)——DeepWalk

热门文章

  1. 区分LPCTSTR和LPTSTR和char *
  2. Hibernate架包的下载
  3. PHP 函数、类声明和调用
  4. 关于asc、txt格式到pcd、ply格式数据转换
  5. 用Css3实现旋转的立方体
  6. RGB565 RGB888
  7. Codeup最长公共子序列(LCS):最长公共子序列
  8. 关于数据治理的读书笔记 - 企业数据治理的“道、法、术、器”
  9. 振铃效应(ringing artifacts)
  10. 学会这些思维模型,窥见查理·芒格的致胜秘笈(二)