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

A=[a11a12a1na21a22a2nam1am2amn],x=[x1x2xn]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++a2nxnam1x1+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 求导即可得到:

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

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

Axx=[a11a21am1a12a22am2a1na2namn]=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}

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

AxxT=A\frac{\partial A x}{\partial x^{T}}=A

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

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

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

推导如下:

xT(Ax)=(x1x2xn)(j=1na1jxjj=1na2jxjj=1nan,jxj)T=i=1n((j=1naijxj)xi)=i=1nj=1naijxixjx^{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 \, \,

因此,有:

(xTAx)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 为对称矩阵,则上式子可以表示为:

xTAxx=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}

AxxT=A\frac{\partial A x}{\partial x^{T}}=A

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

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

若 A 为对称矩阵则有:

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


参考链接:

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

  2. 向量,矩阵求导