文章目录
- 前言
- 一些约定
- 规则零: ∂ c ∂ θ = 0 \frac{\partial c}{\partial \theta}=0 ∂θ∂c=0
- 规则一: ∂ ( X T θ ) ∂ θ = X T ; ∂ ( θ T X ) ∂ θ = X \frac{\partial \left(X^T\theta\right)}{\partial \theta}=X^T;\frac{\partial \left(\theta^TX\right)}{\partial \theta}=X ∂θ∂(XTθ)=XT;∂θ∂(θTX)=X
- 规则二: ∂ ( A T B ) ∂ θ = ∂ A T ∂ θ ⋅ B + ∂ B T ∂ θ ⋅ A = A ′ B + B ′ A \frac{\partial (A^TB)}{\partial \theta}=\frac{\partial A^T}{\partial \theta}\cdot B+\frac{\partial B^T}{\partial \theta}\cdot A=A'B+B'A ∂θ∂(ATB)=∂θ∂AT⋅B+∂θ∂BT⋅A=A′B+B′A
- 规则三: ∂ ( θ T X T X θ ) ∂ θ = 2 X T X θ \frac{\partial \left(\theta^TX^TX\theta\right)}{\partial \theta}=2X^TX\theta ∂θ∂(θTXTXθ)=2XTXθ
- 规则四: ∂ ( X T θ ) m ∂ θ = m X ( X T θ ) m − 1 \frac{\partial \left( X^T\theta\right)^m}{\partial \theta}=mX\left(X^T\theta\right)^{m-1} ∂θ∂(XTθ)m=mX(XTθ)m−1
- 应用求导公式
前言
在学习最小二乘法线性回归时,对利用矩阵求逆计算最优解的做法感到疑惑,于是试图总结了一点点关于“标量对向量求导”的方法。由于没有参考太多资料,文章中可能充满了大大小小的错误,因此,如有谬误,欢迎各位读者以各种形式指出。
感谢我的室友胡佬的大力支持,没有他的支持,我可能没有勇气把这些公式整理成一篇博客。
一些约定
- 不加说明的,提到“向量”,都指“列向量”;
- 不加说明的,下文中所有求导过程均以 θ \theta θ 为自变量;
- 倘若 y y y 是标量函数, θ = ( θ 1 ⋯ θ n ) T \theta=(\theta_1\cdots \theta_n)^T θ=(θ1⋯θn)T 是变量向量,我们称 y y y 对 θ \theta θ 的导数为 ∂ y ∂ θ = ( ∂ y ∂ θ 1 , ⋯ , ∂ y ∂ θ n ) T \frac{\partial y}{\partial \theta}=\left(\frac{\partial y}{\partial \theta_1},\cdots,\frac{\partial y}{\partial \theta_n}\right)^T ∂θ∂y=(∂θ1∂y,⋯,∂θn∂y)T。更一般地,我们要求梯度向量 ∂ y ∂ θ \frac{\partial y}{\partial \theta} ∂θ∂y 与 θ \theta θ 的系数向量具有 相同的形状(即行数、列数分别对应相等);
- 若 A = ( a 1 , ⋯ , a m ) T A=(a_1,\cdots,a_m)^T A=(a1,⋯,am)T 是向量函数, θ = ( θ 1 ⋯ θ n ) T \theta=(\theta_1\cdots \theta_n)^T θ=(θ1⋯θn)T 是变量向量,则我们约定 A ′ = ∂ A T ∂ θ A'=\frac{\partial A^T}{\partial \theta} A′=∂θ∂AT,其中 A ′ A' A′ 是一个 n n n 行 m m m 列的函数矩阵,其中 A i j = ∂ A j ∂ θ i A_{ij}=\frac{\partial A_j}{\partial \theta_i} Aij=∂θi∂Aj,即 A ′ A' A′ 中每行对应一个自变量,每列对应一个因变量。定义 A i ′ A'_i Ai′ 表示矩阵 A ′ A' A′ 的第 i i i 行,即 A i ′ = [ a 1 ′ , ⋯ , a m ′ ] θ i A'_i=\left[a_1',\cdots,a_m'\right]_{\theta_i} Ai′=[a1′,⋯,am′]θi,是一个 m m m 维 行向量;
- 转置原则,即:
∂ A T ∂ θ = ( ∂ A ∂ θ ) T \frac{\partial A^T}{\partial \theta}=\left(\frac{\partial A}{\partial \theta}\right)^T ∂θ∂AT=(∂θ∂A)T
规则零: ∂ c ∂ θ = 0 \frac{\partial c}{\partial \theta}=0 ∂θ∂c=0
设 c c c 为标量常量, θ = ( θ 1 , ⋯ , θ n ) T \theta=(\theta_1,\cdots,\theta_n)^T θ=(θ1,⋯,θn)T 为所有自变量构成的向量。 c c c 是常量,所以求导结果为 0 = ( 0 , ⋯ , 0 ) T ⏞ n 个 0 0=\overbrace {(0,\cdots,0)^T}^{n 个 0} 0=(0,⋯,0)T n个0。
规则一: ∂ ( X T θ ) ∂ θ = X T ; ∂ ( θ T X ) ∂ θ = X \frac{\partial \left(X^T\theta\right)}{\partial \theta}=X^T;\frac{\partial \left(\theta^TX\right)}{\partial \theta}=X ∂θ∂(XTθ)=XT;∂θ∂(θTX)=X
- 若 X = ( x 1 , ⋯ , x n ) T X=(x_1,\cdots,x_n)^T X=(x1,⋯,xn)T 为常向量,因此:
θ T X = x 1 θ 1 + ⋯ + x n θ n \theta^TX=x_1\theta_1+\cdots +x_n\theta_n θTX=x1θ1+⋯+xnθn
根据约定 3 得到:
∂
(
θ
T
X
)
∂
θ
=
(
x
1
,
⋯
,
x
n
)
T
=
X
\frac{\partial \left(\theta^T X\right)}{\partial \theta}=(x_1,\cdots,x_n)^T=X
∂θ∂(θTX)=(x1,⋯,xn)T=X
通过转置原则得到
∂ ( X T θ ) ∂ θ = ( ∂ ( θ T X ) ∂ θ ) T = X T \frac{\partial \left(X^T\theta\right)}{\partial \theta}=\left(\frac{\partial \left(\theta^T X\right)}{\partial \theta}\right)^T=X^T ∂θ∂(XTθ)=(∂θ∂(θTX))T=XT
- 若 X X X 是一个 n × m n\times m n×m 的常矩阵,现在只考虑 θ T X \theta^T X θTX 关于 θ \theta θ 求导,根据矩阵乘法的性质,可以得知: θ T X \theta^TX θTX 是一个 1 × m 1\times m 1×m 的行向量,关于 θ \theta θ 求导可以得到一个 n × m n\times m n×m 的矩阵。
考虑某一个自变量
θ
i
\theta_i
θi ,有:
∂
(
θ
T
X
)
∂
θ
i
=
(
X
i
1
,
⋯
,
X
i
m
)
=
X
i
\frac{\partial \left(\theta^TX\right)}{\partial \theta_i}=(X_{i1},\cdots,X_{im})=X_i
∂θi∂(θTX)=(Xi1,⋯,Xim)=Xi
究其原因,
X
X
X 中与
θ
i
\theta_i
θi 相乘的元素只有
X
X
X 的第
i
i
i 行中的元素。因此:
∂ ( θ T X ) ∂ θ = [ X 1 ⋮ X n ] = X \frac{\partial \left(\theta^TX\right)}{\partial \theta}=\left[ \begin{matrix} X_1\\ \vdots\\ X_n \end{matrix} \right]=X ∂θ∂(θTX)=⎣⎢⎡X1⋮Xn⎦⎥⎤=X
- 若 X X X 是一个 n × m n\times m n×m 的常矩阵,现在考虑 ∂ ( X T θ ) ∂ θ \frac{\partial (X^T\theta)}{\partial \theta} ∂θ∂(XTθ)。此时, F = X T θ F=X^T\theta F=XTθ 是一个 m × 1 m\times 1 m×1 的列向量,不符合前文中定义的求导规则(前文中的求导规则要求 m m m 维行向量函数对 n n n 维列向量求导,得到 n × m n\times m n×m 的梯度矩阵)。由转置原则,得到:
∂ ( X T θ ) ∂ θ = ( ∂ ( θ T X ) ∂ θ ) T = X T \frac{\partial (X^T\theta)}{\partial \theta}=\left(\frac{\partial \left(\theta^TX\right)}{\partial \theta}\right)^T=X^T ∂θ∂(XTθ)=(∂θ∂(θTX))T=XT
规则二: ∂ ( A T B ) ∂ θ = ∂ A T ∂ θ ⋅ B + ∂ B T ∂ θ ⋅ A = A ′ B + B ′ A \frac{\partial (A^TB)}{\partial \theta}=\frac{\partial A^T}{\partial \theta}\cdot B+\frac{\partial B^T}{\partial \theta}\cdot A=A'B+B'A ∂θ∂(ATB)=∂θ∂AT⋅B+∂θ∂BT⋅A=A′B+B′A
据我观察,这条规则可以推导出本文中的所有规则。
设 A = ( a 1 , ⋯ , a m ) T A=(a_1,\cdots,a_m)^T A=(a1,⋯,am)T 是向量函数,设 B = ( b 1 , ⋯ , b m ) T B=(b_1,\cdots,b_m)^T B=(b1,⋯,bm)T 也是向量函数,此时 A T B A^TB ATB 为标量函数:
A
T
B
=
a
1
b
1
+
⋯
+
a
m
b
m
A^TB=a_1b_1+\cdots +a_mb_m
ATB=a1b1+⋯+ambm
考虑某个自变量
θ
i
\theta_i
θi:
∂ ( A T B ) ∂ θ i = [ ( a 1 ′ b 1 + a 1 b 1 ′ ) + ⋯ + ( a m ′ b m + a m b m ′ ) ] θ i = ( a 1 ′ , ⋯ , a m ′ ) ⋅ ( b 1 , ⋯ , b m ) T + ( a 1 , ⋯ , a n ) ⋅ ( b 1 ′ , ⋯ , b n ′ ) T = A i ′ B + B i ′ A \begin{aligned} \frac{\partial \left(A^TB\right)}{\partial \theta_i} &=\left[\left(a_1'b_1+a_1b_1'\right)+\cdots +\left(a_m'b_m+a_mb_m'\right)\right]_{\theta_i}\\ &=(a_1',\cdots,a_m')\cdot(b_1,\cdots,b_m)^T+(a_1,\cdots,a_n)\cdot(b_1',\cdots,b_n')^T\\ &=A'_iB+B'_iA\\ \end{aligned} ∂θi∂(ATB)=[(a1′b1+a1b1′)+⋯+(am′bm+ambm′)]θi=(a1′,⋯,am′)⋅(b1,⋯,bm)T+(a1,⋯,an)⋅(b1′,⋯,bn′)T=Ai′B+Bi′A
因此得到:
∂ ( A T B ) ∂ θ = [ A 1 ′ B + B 1 ′ A ⋮ A n ′ B + B n ′ A ] = [ A 1 ′ ⋮ A n ′ ] ⋅ B + [ B 1 ′ ⋮ B n ′ ] ⋅ A = A ′ B + B ′ A \frac{\partial \left(A^TB\right)}{\partial \theta}=\left[ \begin{matrix} A_1'B+B_1'A\\ \vdots\\ A_n'B+B_n'A \end{matrix} \right]=\left[ \begin{matrix} A_1'\\ \vdots\\ A_n' \end{matrix} \right]\cdot B+\left[ \begin{matrix} B_1'\\ \vdots\\ B_n' \end{matrix} \right]\cdot A=A'B+B'A ∂θ∂(ATB)=⎣⎢⎡A1′B+B1′A⋮An′B+Bn′A⎦⎥⎤=⎣⎢⎡A1′⋮An′⎦⎥⎤⋅B+⎣⎢⎡B1′⋮Bn′⎦⎥⎤⋅A=A′B+B′A
这个公式具有很简洁的形式,十分类似标量函数中乘积导数的求法。
规则三: ∂ ( θ T X T X θ ) ∂ θ = 2 X T X θ \frac{\partial \left(\theta^TX^TX\theta\right)}{\partial \theta}=2X^TX\theta ∂θ∂(θTXTXθ)=2XTXθ
从乘积角度证明
这个公式在计算最小二乘估计的最优参数时有着重要的最用。其中 X X X 是一个 m × n m\times n m×n 的矩阵, θ \theta θ 是一个 n × 1 n\times 1 n×1 的列向量。因此 X θ X\theta Xθ 为 m × 1 m\times 1 m×1 的列向量。
不难发现,令 A = B = X θ A=B=X\theta A=B=Xθ 即可带入规则二计算导数:
∂ ( θ T X T X θ ) ∂ θ = A ′ B + B ′ A = ( X T ) X θ + ( X T ) X θ = 2 X T X θ \frac{\partial \left(\theta^TX^TX\theta\right)}{\partial \theta}=A'B+B'A=(X^T)X\theta+(X^T)X\theta=2X^TX\theta ∂θ∂(θTXTXθ)=A′B+B′A=(XT)Xθ+(XT)Xθ=2XTXθ
从二次型角度证明
这个结论是比较显然的,因为 θ T X T X θ \theta^TX^TX\theta θTXTXθ 是以 θ \theta θ 为变量的二次型,其中 A = X T X A=X^TX A=XTX 一定是 n n n 阶对称矩阵。有:
θ T A θ = ∑ i = 1 n ∑ j = 1 n θ i θ j A i j \theta^TA\theta=\sum_{i=1}^n\sum_{j=1}^n\theta_i\theta_jA_{ij} θTAθ=i=1∑nj=1∑nθiθjAij
考虑对某个 θ k \theta_k θk 求导,列出与 θ k \theta_k θk 有关的所有项:
( θ T A θ ) θ k ′ = ( 2 θ k ( ∑ j = 1 , j ≠ k n θ j A k j ) + θ k 2 A k k ) ′ = ( 2 ∑ j = 1 , j ≠ k n θ j A k j ) + 2 θ k A k k = 2 ∑ j = 1 n θ j A k j = 2 A k θ (\theta^TA\theta)'_{\theta_k}=\left(2\theta_k\left(\sum_{j=1,j\neq k}^n\theta_jA_{kj}\right)+\theta_k^2A_{kk}\right)'=\left(2\sum_{j=1,j\neq k}^{n}\theta_jA_{kj}\right)+2\theta_kA_{kk}=2\sum_{j=1}^{n}\theta_jA_{kj}=2A_k\theta (θTAθ)θk′=⎝⎛2θk⎝⎛j=1,j=k∑nθjAkj⎠⎞+θk2Akk⎠⎞′=⎝⎛2j=1,j=k∑nθjAkj⎠⎞+2θkAkk=2j=1∑nθjAkj=2Akθ
二倍是因为,叠加了第 k k k 行和第 k k k 列。单独加一个 A k k A_{kk} Akk 是为了防止重复覆盖。
因此:
∂ ( θ T A θ ) ∂ θ = [ 2 A 1 θ ⋮ 2 A n θ ] = 2 A θ = 2 X T X θ \frac{\partial \left(\theta^TA\theta\right)}{\partial \theta}=\left[ \begin{matrix} 2A_1\theta\\ \vdots\\ 2A_n\theta \end{matrix} \right]=2A\theta=2X^TX\theta ∂θ∂(θTAθ)=⎣⎢⎡2A1θ⋮2Anθ⎦⎥⎤=2Aθ=2XTXθ
规则四: ∂ ( X T θ ) m ∂ θ = m X ( X T θ ) m − 1 \frac{\partial \left( X^T\theta\right)^m}{\partial \theta}=mX\left(X^T\theta\right)^{m-1} ∂θ∂(XTθ)m=mX(XTθ)m−1
其中 X = ( x 1 , ⋯ , x n ) T X=(x_1,\cdots, x_n)^T X=(x1,⋯,xn)T 是常列向量, X T θ X^T\theta XTθ 是标量函数。
对于 m = 2 m=2 m=2 带入规则三 验证即可:
( X T θ ) 2 = ( X T θ ) ⋅ ( X T θ ) = ( X T θ ) T ⋅ ( X T θ ) = θ T X X T θ \left(X^T\theta\right)^2=\left(X^T\theta\right)\cdot\left(X^T\theta\right)=\left(X^T\theta\right)^T\cdot \left(X^T\theta\right)=\theta^TXX^T\theta (XTθ)2=(XTθ)⋅(XTθ)=(XTθ)T⋅(XTθ)=θTXXTθ
由于 X T θ X^T\theta XTθ 是标量,所以转置并不会影响计算的结果,令 A = B = X T θ A=B=X^T\theta A=B=XTθ 解得 ∂ ( X T θ ) 2 ∂ θ = 2 X X T θ \frac{\partial \left( X^T\theta\right)^2}{\partial \theta}=2XX^T\theta ∂θ∂(XTθ)2=2XXTθ
应用求导公式
利用求导公式计算最小二乘法的解
设 m × n m\times n m×n 矩阵 X X X 是数据特征,其中 每一行表示一个散点坐标,每一列表示一个特征。 n × 1 n \times 1 n×1 列向量 θ \theta θ 是所有回归系数, m × 1 m\times 1 m×1 向量 Y Y Y 是数据标签,每行是一个数据对应的标签。最小二乘法要解决的问题为“找到让代价函数最小化的系数组 θ \theta θ”,即:
min θ { ( X θ − Y ) 2 } \min_\theta\{(X\theta-Y)^2\} θmin{(Xθ−Y)2}
其中 X θ − Y X\theta-Y Xθ−Y 是一个 m × 1 m\times 1 m×1 的向量,我们定义:
( X θ − Y ) 2 = ( X θ − Y ) T ( X θ − Y ) = θ T X T X θ − θ T X T Y − Y T X θ + Y T Y (X\theta-Y)^2=(X\theta-Y)^T(X\theta-Y)=\theta^TX^TX\theta-\theta^TX^TY-Y^TX\theta+Y^TY (Xθ−Y)2=(Xθ−Y)T(Xθ−Y)=θTXTXθ−θTXTY−YTXθ+YTY
按照上述求导法则对上式求导(为了最终得到一个 n × 1 n\times 1 n×1 的梯度向量, ( Y T X θ ) ′ = X T Y \left(Y^TX\theta\right)'=X^TY (YTXθ)′=XTY 而不是取 Y T X Y^TX YTX):
2 X T X θ − 2 X T Y = 0 2X^TX\theta-2X^TY=0 2XTXθ−2XTY=0
Y T Y Y^TY YTY 为常数,在求导过程中消去了。当 X T X X^TX XTX 可逆时,可以解得:
θ = ( X T X ) − 1 X T Y \theta=\left(X^TX\right)^{-1}X^TY θ=(XTX)−1XTY
时,函数取得极值,此时的 θ \theta θ 为代价函数的极小值点。