矩阵求导常用公式解析:标量、向量与矩阵的导数计算
- 矩阵求导常用公式解析:标量、向量与矩阵的导数计算
-
- 矩阵求导的布局问题
-
- [1. 分子布局 vs 分母布局对比表](#1. 分子布局 vs 分母布局对比表)
- [2. 布局冲突的典型场景分析](#2. 布局冲突的典型场景分析)
- [3. 混合布局的兼容性处理](#3. 混合布局的兼容性处理)
- 一、标量对向量求导
-
- [1. 线性函数求导](#1. 线性函数求导)
- [2. 二次型函数(对称矩阵)](#2. 二次型函数(对称矩阵))
- [3. 二次型函数(非对称矩阵)](#3. 二次型函数(非对称矩阵))
- 二、向量对向量求导(分子布局)
-
- [1. 线性变换的雅可比矩阵(详细推导)](#1. 线性变换的雅可比矩阵(详细推导))
- [2. 一般向量函数的雅可比矩阵(补充关键说明)](#2. 一般向量函数的雅可比矩阵(补充关键说明))
- [3. 链式法则的矩阵形式](#3. 链式法则的矩阵形式)
- 三、标量对矩阵求导
-
- [1. 标量函数 y = tr ( A ) y = \text{tr}(\mathbf{A}) y=tr(A) 对矩阵 A \mathbf{A} A 求导](#1. 标量函数 y = tr ( A ) y = \text{tr}(\mathbf{A}) y=tr(A) 对矩阵 A \mathbf{A} A 求导)
- [2. 标量函数 y = tr ( A B ) y = \text{tr}(\mathbf{A} \mathbf{B}) y=tr(AB) 对矩阵 A \mathbf{A} A 求导(假设 A \mathbf{A} A 和 B \mathbf{B} B 可相乘)](#2. 标量函数 y = tr ( A B ) y = \text{tr}(\mathbf{A} \mathbf{B}) y=tr(AB) 对矩阵 A \mathbf{A} A 求导(假设 A \mathbf{A} A 和 B \mathbf{B} B 可相乘))
- [3. 标量函数 y = x T A x y = \mathbf{x}^T \mathbf{A} \mathbf{x} y=xTAx 对矩阵 A \mathbf{A} A 求导( x \mathbf{x} x 为向量)](#3. 标量函数 y = x T A x y = \mathbf{x}^T \mathbf{A} \mathbf{x} y=xTAx 对矩阵 A \mathbf{A} A 求导( x \mathbf{x} x 为向量))
矩阵求导常用公式解析:标量、向量与矩阵的导数计算
矩阵求导是机器学习、优化理论中的重要数学工具。本文将系统推导标量对向量、向量对向量、标量对矩阵的求导公式,并解析分子布局与分母布局的核心差异。
矩阵求导的布局问题
1. 分子布局 vs 分母布局对比表
特性 | 分子布局 (Numerator Layout) | 分母布局 (Denominator Layout) |
---|---|---|
导数维度 | m × n m \times n m×n | n × m n \times m n×m |
元素排列规则 | ∂ y i ∂ x j \frac{\partial y_i}{\partial x_j} ∂xj∂yi | ∂ y j ∂ x i \frac{\partial y_j}{\partial x_i} ∂xi∂yj |
线性变换示例 | ∂ A x ∂ x = A \frac{\partial \mathbf{Ax}}{\partial \mathbf{x}} = \mathbf{A} ∂x∂Ax=A | ∂ A x ∂ x = A T \frac{\partial \mathbf{Ax}}{\partial \mathbf{x}} = \mathbf{A}^T ∂x∂Ax=AT |
链式法则顺序 | 从左到右自然顺序 | 需要转置调整顺序 |
2. 布局冲突的典型场景分析
场景 :计算 ∂ z ∂ x \frac{\partial \mathbf{z}}{\partial \mathbf{x}} ∂x∂z,其中 z = W x + b \mathbf{z} = \mathbf{W}\mathbf{x} + \mathbf{b} z=Wx+b
-
分子布局 :
∂ z ∂ x = W ( 维度 m × n ) \frac{\partial \mathbf{z}}{\partial \mathbf{x}} = \mathbf{W} \quad (\text{维度 } m \times n) ∂x∂z=W(维度 m×n) -
分母布局 :
∂ z ∂ x = W T ( 维度 n × m ) \frac{\partial \mathbf{z}}{\partial \mathbf{x}} = \mathbf{W}^T \quad (\text{维度 } n \times m) ∂x∂z=WT(维度 n×m)
应用建议:
- 在反向传播算法中,分母布局更自然(梯度维度与参数维度一致)
- 在理论推导中,分子布局更便于公式链式展开
3. 混合布局的兼容性处理
当不同文献使用不同布局时,可通过以下规则转换:
( ∂ y ∂ x ) Denominator = ( ∂ y ∂ x ) Numerator T \left( \frac{\partial \mathbf{y}}{\partial \mathbf{x}} \right){\text{Denominator}} = \left( \frac{\partial \mathbf{y}}{\partial \mathbf{x}} \right){\text{Numerator}}^T (∂x∂y)Denominator=(∂x∂y)NumeratorT
一、标量对向量求导
1. 线性函数求导
设向量 a = [ a 1 , a 2 , ... , a n ] T \mathbf{a} = [a_1, a_2, \dots, a_n]^T a=[a1,a2,...,an]T, x = [ x 1 , x 2 , ... , x n ] T \mathbf{x} = [x_1, x_2, \dots, x_n]^T x=[x1,x2,...,xn]T,标量函数为:
y = a T x = ∑ i = 1 n a i x i y = \mathbf{a}^T \mathbf{x} = \sum_{i=1}^n a_i x_i y=aTx=i=1∑naixi
求导结果 :
梯度向量为系数向量本身:
∂ y ∂ x = [ a 1 a 2 ⋮ a n ] = a \frac{\partial y}{\partial \mathbf{x}} = \begin{bmatrix} a_1 \\ a_2 \\ \vdots \\ a_n \end{bmatrix} = \mathbf{a} ∂x∂y= a1a2⋮an =a
2. 二次型函数(对称矩阵)
设对称矩阵 A ∈ R n × n \mathbf{A} \in \mathbb{R}^{n \times n} A∈Rn×n,标量函数:
y = x T A x = ∑ i = 1 n ∑ j = 1 n a i j x i x j y = \mathbf{x}^T \mathbf{A} \mathbf{x} = \sum_{i=1}^n \sum_{j=1}^n a_{ij} x_i x_j y=xTAx=i=1∑nj=1∑naijxixj
求导过程 :
对分量 x k x_k xk 求偏导:
∂ y ∂ x k = 2 ∑ i = 1 n a i k x i \frac{\partial y}{\partial x_k} = 2 \sum_{i=1}^n a_{ik} x_i ∂xk∂y=2i=1∑naikxi
梯度向量 :
∂ y ∂ x = 2 A x \frac{\partial y}{\partial \mathbf{x}} = 2 \mathbf{A} \mathbf{x} ∂x∂y=2Ax
3. 二次型函数(非对称矩阵)
当 A \mathbf{A} A 非对称时,标量函数展开同上。对 x k x_k xk 求偏导:
∂ y ∂ x k = ( A x ) k + ( A T x ) k \frac{\partial y}{\partial x_k} = (\mathbf{A}\mathbf{x})_k + (\mathbf{A}^T \mathbf{x})_k ∂xk∂y=(Ax)k+(ATx)k
梯度向量 :
∂ y ∂ x = ( A + A T ) x \frac{\partial y}{\partial \mathbf{x}} = (\mathbf{A} + \mathbf{A}^T) \mathbf{x} ∂x∂y=(A+AT)x
二、向量对向量求导(分子布局)
1. 线性变换的雅可比矩阵(详细推导)
设 y = A x + b \mathbf{y} = \mathbf{A}\mathbf{x} + \mathbf{b} y=Ax+b,其中:
- A ∈ R m × n \mathbf{A} \in \mathbb{R}^{m \times n} A∈Rm×n 为系数矩阵
- x ∈ R n \mathbf{x} \in \mathbb{R}^n x∈Rn 为输入向量
- b ∈ R m \mathbf{b} \in \mathbb{R}^m b∈Rm 为偏置向量
分量化表示 :
y i = ∑ j = 1 n a i j x j + b i ( i = 1 , 2 , ... , m ) y_i = \sum_{j=1}^n a_{ij} x_j + b_i \quad (i=1,2,\dots,m) yi=j=1∑naijxj+bi(i=1,2,...,m)
对分量求偏导 :
对每个 y i y_i yi 关于 x j x_j xj 求偏导:
∂ y i ∂ x j = a i j \frac{\partial y_i}{\partial x_j} = a_{ij} ∂xj∂yi=aij
雅可比矩阵构造 :
将所有偏导数按如下规则排列:
- 行索引 对应输出分量 y i y_i yi
- 列索引 对应输入分量 x j x_j xj
∂ 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 ] = A \frac{\partial \mathbf{y}}{\partial \mathbf{x}} = \begin{bmatrix} \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{bmatrix} = \mathbf{A} ∂x∂y= ∂x1∂y1∂x1∂y2⋮∂x1∂ym∂x2∂y1∂x2∂y2⋮∂x2∂ym⋯⋯⋱⋯∂xn∂y1∂xn∂y2⋮∂xn∂ym =A
2. 一般向量函数的雅可比矩阵(补充关键说明)
对向量函数 y = f ( x ) = [ f 1 ( x ) , f 2 ( x ) , ... , f m ( x ) ] T \mathbf{y} = \mathbf{f}(\mathbf{x}) = [f_1(\mathbf{x}), f_2(\mathbf{x}), \dots, f_m(\mathbf{x})]^T y=f(x)=[f1(x),f2(x),...,fm(x)]T,其雅可比矩阵的构造规则为:
- 每个元素 ∂ f i ∂ x j \frac{\partial f_i}{\partial x_j} ∂xj∂fi 表示第 i i i 个输出对第 j j j 个输入的偏导
- 行维度 m m m 由输出向量维度决定
- 列维度 n n n 由输入向量维度决定
关键特性:
- 若 f ( x ) \mathbf{f}(\mathbf{x}) f(x) 为线性函数(即 f ( x ) = A x \mathbf{f}(\mathbf{x}) = \mathbf{A}\mathbf{x} f(x)=Ax),雅可比矩阵退化为系数矩阵 A \mathbf{A} A
- 若 f ( x ) \mathbf{f}(\mathbf{x}) f(x) 为非线性函数(如神经网络激活函数),需逐元素计算偏导数
3. 链式法则的矩阵形式
设复合函数 z = g ( y ) = g ( f ( x ) ) \mathbf{z} = \mathbf{g}(\mathbf{y}) = \mathbf{g}(\mathbf{f}(\mathbf{x})) z=g(y)=g(f(x)),则链式法则的矩阵形式为:
∂ z ∂ x = ∂ z ∂ y ⋅ ∂ y ∂ x \frac{\partial \mathbf{z}}{\partial \mathbf{x}} = \frac{\partial \mathbf{z}}{\partial \mathbf{y}} \cdot \frac{\partial \mathbf{y}}{\partial \mathbf{x}} ∂x∂z=∂y∂z⋅∂x∂y
其中:
- ∂ z ∂ y ∈ R p × m \frac{\partial \mathbf{z}}{\partial \mathbf{y}} \in \mathbb{R}^{p \times m} ∂y∂z∈Rp×m
- ∂ y ∂ x ∈ R m × n \frac{\partial \mathbf{y}}{\partial \mathbf{x}} \in \mathbb{R}^{m \times n} ∂x∂y∈Rm×n
- 最终结果维度为 p × n p \times n p×n
三、标量对矩阵求导
1. 标量函数 y = tr ( A ) y = \text{tr}(\mathbf{A}) y=tr(A) 对矩阵 A \mathbf{A} A 求导
-
矩阵的迹 :
tr ( A ) = ∑ i = 1 n a i i \text{tr}(\mathbf{A}) = \sum_{i=1}^n a_{ii} tr(A)=i=1∑naii -
对矩阵元素 a i j a_{ij} aij 求偏导:
- 当 i ≠ j i \neq j i=j 时,
∂ y ∂ a i j = 0 \frac{\partial y}{\partial a_{ij}} = 0 ∂aij∂y=0 - 当 i = j i = j i=j 时,
∂ y ∂ a i i = 1 \frac{\partial y}{\partial a_{ii}} = 1 ∂aii∂y=1
- 当 i ≠ j i \neq j i=j 时,
-
梯度矩阵 :
∂ y ∂ A = I \frac{\partial y}{\partial \mathbf{A}} = \mathbf{I} ∂A∂y=I(其中 I \mathbf{I} I 是与 A \mathbf{A} A 同维度的单位矩阵)
2. 标量函数 y = tr ( A B ) y = \text{tr}(\mathbf{A} \mathbf{B}) y=tr(AB) 对矩阵 A \mathbf{A} A 求导(假设 A \mathbf{A} A 和 B \mathbf{B} B 可相乘)
-
迹的性质 :
tr ( A B ) = tr ( B A ) ( 若维度合适 ) \text{tr}(\mathbf{A} \mathbf{B}) = \text{tr}(\mathbf{B} \mathbf{A}) \quad (\text{若维度合适}) tr(AB)=tr(BA)(若维度合适) -
展开形式 :
设 A \mathbf{A} A 为 m × n m \times n m×n 矩阵, B \mathbf{B} B 为 n × m n \times m n×m 矩阵,则
y = ∑ i = 1 m ∑ j = 1 n a i j b j i y = \sum_{i=1}^m \sum_{j=1}^n a_{ij} b_{ji} y=i=1∑mj=1∑naijbji -
对 a k l a_{kl} akl 求偏导 :
∂ y ∂ a k l = b l k \frac{\partial y}{\partial a_{kl}} = b_{lk} ∂akl∂y=blk -
梯度矩阵 :
∂ y ∂ A = B T \frac{\partial y}{\partial \mathbf{A}} = \mathbf{B}^T ∂A∂y=BT
3. 标量函数 y = x T A x y = \mathbf{x}^T \mathbf{A} \mathbf{x} y=xTAx 对矩阵 A \mathbf{A} A 求导( x \mathbf{x} x 为向量)
-
展开形式 :
y = ∑ i = 1 n ∑ j = 1 n a i j x i x j y = \sum_{i=1}^n \sum_{j=1}^n a_{ij} x_i x_j y=i=1∑nj=1∑naijxixj -
对 a k l a_{kl} akl 求偏导 :
∂ y ∂ a k l = x k x l \frac{\partial y}{\partial a_{kl}} = x_k x_l ∂akl∂y=xkxl -
梯度矩阵 :
∂ y ∂ A = x x T \frac{\partial y}{\partial \mathbf{A}} = \mathbf{x} \mathbf{x}^T ∂A∂y=xxT