所谓矩阵求导,本质上还是多元函数的求导。假如有:

A=[a11a12⋯a1na21a22⋯a2n⋮⋮⋱⋮am1am2⋯amn],x=[x1x2⋮xn]A=\left[\begin{array}{cccc}{a_{11}} & {a_{12}} & {\cdots} & {a_{1 n}} \\ {a_{21}} & {a_{22}} & {\cdots} & {a_{2 n}} \\ {\vdots} & {\vdots} & {\ddots} & {\vdots} \\ {a_{m 1}} & {a_{m 2}} & {\cdots} & {a_{m n}}\end{array}\right], \boldsymbol{x}=\left[\begin{array}{c}{x_{1}} \\ {x_{2}} \\ {\vdots} \\ {x_{n}}\end{array}\right]

那么,

Ax=[a11x1+a12x2+⋯+a1nxna21x1+a22x2+⋯+a2nxn⋮am1x1+am2x2+⋯+amnxn]m×1A x=\left[\begin{array}{c}{a_{11} x_{1}+a_{12} x_{2}+\cdots+a_{1 n} x_{n}} \\ {a_{21} x_{1}+a_{22} x_{2}+\cdots+a_{2 n} x_{n}} \\ {\vdots} \\ {a_{m 1} x_{1}+a_{m 2} x_{2}+\cdots+a_{m n} x_{n}}\end{array}\right]_{m \times 1}

如果要将列向量 Ax 对 x 求导,只需要将 Ax 的每一个元素(n元多项式)对 x 中的每一个元素求导即可。问题是, Ax 的每一个元素都是一个标量,而 x 是列向量,求导后如何表示?

向量求导有两种布局,分子布局和分母布局。分子布局和分母布局的操作结果可以通过转置来切换。

  1. 分母布局:标量对向量求导,得到的结果跟分母上的向量保持一致。即,如果标量是对列向量求导,得到的导数也是列向量。

  2. 分子布局:标量对向量求导,得到的结果是分母上的向量的转置。即,如果标量对列向量求导,得到的导数将是行向量。

本文使用分母布局进行叙述,将 Ax 第一个元素对 x 求导即可得到:

[a11a12⋮a1n]\left[\begin{array}{c}{a_{11}} \\ {a_{12}} \\ {\vdots} \\ {a_{1n}}\end{array}\right]

同理,对 Ax 的其他元素求导也能得到类似的列向量,但是为了后续的计算方便,我们会把所有求导后得到的列向量水平堆叠,得到:

∂Ax∂x=[a11a21…am1a12a22…am2⋮⋮⋱⋮a1na2n⋯amn]=AT\frac{\partial A x}{\partial x}=\left[\begin{array}{cccc}{a_{11}} & {a_{21}} & {\dots} & {a_{m 1}} \\ {a_{12}} & {a_{22}} & {\dots} & {a_{m 2}} \\ {\vdots} & {\vdots} & {\ddots} & {\vdots} \\ {a_{1 n}} & {a_{2 n}} & {\cdots} & {a_{m n}}\end{array}\right]=A^{T}

用类似上述方法还可以得到以下结论:

∂Ax∂xT=A\frac{\partial A x}{\partial x^{T}}=A

∂(xTA)∂x=A\frac{\partial\left(x^{T} A\right)}{\partial x}=A

更进一步,我们还可以计算:

∂xTAx∂x=(AT+A)x\frac{\partial x^{T} A x}{\partial x}=\left(A^{T}+A\right) x

推导如下:

xT(Ax)=(x1x2⋯xn)(∑j=1na1jxj∑j=1na2jxj…∑j=1nan,jxj)T=∑i=1n((∑j=1naijxj)xi)=∑i=1n∑j=1naijxixj  x^{T} (A x)=\left(\begin{array}{llll}{x_{1}} & {x_{2}} & {\cdots} & {x_{n}}\end{array}\right)\left(\sum_{j=1}^{n} a_{1 j} x_{j} \sum_{j=1}^{n} a_{2 j} x_{j} \ldots \sum_{j=1}^{n} a_{n, j} x_{j}\right)^{T} \\ =\sum_{i=1}^{n}\left(\left(\sum_{j=1}^{n} a_{i j} x_{j}\right) x_{i}\right) =\sum_{i=1}^{n} \sum_{j=1}^{n} a_{i j} x_{i} x_{j} \qquad \quad \, \,

因此,有:

∂(x⃗TA⋅x⃗)∂xi=(∑j=1naijxj)+(∑j=1najixj)=∑j=1n(aij+aji)xj=(AT+A)x\frac{\partial\left(\vec{x}^{T} A \cdot \vec{x}\right)}{\partial x_{i}} =\left(\sum_{j=1}^{n} a_{i j} x_{j}\right)+\left(\sum_{j=1}^{n} a_{j i} x_{j}\right) \\ =\sum_{j=1}^{n}\left(a_{i j}+a_{j i}\right) x_{j} \\ =\left(A^{T}+A\right) x \quad \quad

若 A 为对称矩阵,则上式子可以表示为:

∂xTAx∂x=2Ax\frac{\partial x^{T} A x}{\partial x}=2 A x

举个例子,A 的转置 与 A 的积是对称矩阵,因此有:

∂(βT(ATA)β)∂β=2ATAβ\frac{\partial\left(\beta^{T} (A^{T} A) \beta\right)}{\partial \beta} = 2 A^{T} A \beta


总结,本文需要记住的公式大致如下:

∂Axx=AT\frac{\partial A x}{x}=A^{T}

∂Ax∂xT=A\frac{\partial A x}{\partial x^{T}}=A

∂(xTA)∂x=A\frac{\partial\left(x^{T} A\right)}{\partial x}=A

∂xTAx∂x=(AT+A)x\frac{\partial x^{T} A x}{\partial x}=\left(A^{T}+A\right) x

若 A 为对称矩阵则有:

∂xTAx∂x=2Ax\frac{\partial x^{T} A x}{\partial x}=2 A x


参考链接:

  1. 机器学习中的矩阵、向量求导

  2. 向量,矩阵求导