矩阵、向量中的求导

在看西瓜书中线性回归模型的最小二乘参数估计的部分时,看到了对矩阵的求导运算。这部分以前没有学过,所以学习整理一下。这篇文章主要是基于对Wiki上的Matrix calculus的理解,但了解不深,要深入理解还是需要去看Wiki上的原文。

在本文中,用大写加粗字母如$ \(表示矩阵,用小写加粗字母如\)\(表示向量,用小写字母如\)z\(表示标量。另外,对于向量,除非特定标示,默认认为是列向量,即维度为\) m 1$。

前言

在矩阵、向量、标量的求导中,由于分子分母的类型的不同,计算方法也就不同,一共有9种情况。而由于有一些情况比较复杂,这里只考虑下表中列出的6种情况(横向为分子):

分母  分子 标量 向量 矩阵
标量 \(\frac{\partial y}{\partial x}\) \(\frac{\partial \boldsymbol{y}}{\partial x}\) \(\frac{\partial \boldsymbol{Y}}{\partial x}\)
向量 \(\frac{\partial y}{\partial \boldsymbol{x}}\) \(\frac{\partial \boldsymbol{y}}{\partial \boldsymbol{x}}\)
矩阵 \(\frac{\partial y}{\partial \boldsymbol{X}}\)

除此之外,矩阵求导另一个复杂的原因在于:布局。不同布局的使用会导致相同的计算产生不同的结果。

布局的概念

在矩阵求导的过程中,不同布局的产生的根本原因在于向量对向量的偏导的表示习惯的不同。

The fundamental issue is that the derivative of a vector with respect to a vector, i.e. \(\frac{\partial \boldsymbol{y} }{\partial \boldsymbol{x}}\), is often written in two competing ways.

比如我们有一个\(m\)维的向量\(\boldsymbol y\)和一个n维的向量\(\boldsymbol x\),那么\(\frac{\partial \boldsymbol{y} }{\partial \boldsymbol{x}}\)的结果可能是一个\(m \times n\)的矩阵,也可能是\(n \times m\)的矩阵,随布局的不同而不同。

布局方式主要有两种:

  1. 分子布局(Numerator Layout)。在这种布局下,可以理解为把\(\boldsymbol y\)看成一个列向量,而把\(\boldsymbol x\)看成一个行向量,结果将是一个\(m \times n\)的矩阵。
  2. 分母布局(Denominator Layout)。和分子布局相反,它把\(\boldsymbol x\)看成一个列向量,而把\(\boldsymbol y\)看成一个行向量,结果会是\(n \times m\)的矩阵。

那么在进行向量与标量之间的求导时,也会遇到类似的问题。

  1. 首先,假设我们对向量之间的偏导使用的是分子布局。由于标量可以理解成是一个1维的向量,这里就是向量与向量偏导的特殊情况了。所以,当\(y\)为标量时,即\(m = 1\),结果将是一个\(1 \times n\)的矩阵,即一个\(n\)维行向量;当\(x\)为标量时,结果是一个\(n\)维列向量。
  2. 当我们使用分母布局的时候,情况同样是上面的特例。所以,当\(y\)为标量时,结果是一个\(n\)维列向量;而当\(x\)为标量时,结果是一个\(n\)维行向量。

在进行矩阵和标量之间的求导时,情况就有一些不同了。在分别遇到标量-矩阵偏导\(\frac{\partial y}{\partial\boldsymbol{X}}\)和矩阵-标量偏导\(\frac{\partial\boldsymbol{Y}}{\partial x}\)时,对于分子布局,结果的维度将分别和\(\boldsymbol{X}^T\)\(\boldsymbol{Y}\)保持一致;而分母布局的结果却很少在实际中使用到。因此,结果会是以下情况:

  1. 分子布局中,\(\frac{\partial y}{\partial\boldsymbol{X}}\)的结果维度和\(\boldsymbol{X}^T\)相同,\(\frac{\partial\boldsymbol{Y}}{\partial x}\)的维度和\(\boldsymbol{Y}\)相同。
  2. 混合使用两种布局,\(\frac{\partial y}{\partial\boldsymbol{X}}\)的结果维度和\(\boldsymbol{X}\)相同,\(\frac{\partial\boldsymbol{Y}}{\partial x}\)的维度和\(\boldsymbol{Y}\)相同。

综上所述,对于不同的布局和计算类型,我们能得出以下的结果类型:

table from wikipedia
table from wikipedia

分子布局下的求导

前面提到,在分子布局下,可以理解为把\(\boldsymbol y\)看成一个列向量,而把\(\boldsymbol x\)看成一个行向量,即

\(\boldsymbol{y}={\begin{bmatrix}y_{1}\\y_{2}\\\vdots\\y_{m}\\\end{bmatrix}}\)\(\boldsymbol {x} ={\begin{bmatrix}x_{1}&x_{2}&\dots&x_{m}\end{bmatrix}}\),那么求导公式将是如下所示:

  1. 标量/向量。此时\(m=1\),结果是用\(y\)\(\boldsymbol x\)中每个元素依次求导,形式与\(\boldsymbol x\)相同:

\[ {\frac {\partial y}{\partial \boldsymbol{x}}}=\begin{bmatrix}{\frac {\partial y}{\partial x_{1}}}{\frac {\partial y}{\partial x_{2}}}\cdots {\frac {\partial y}{\partial x_{n}}}\end{bmatrix} \]

  1. 向量/标量。此时\(n=1\),结果是\(\boldsymbol y\)中每个元素依次对实数\(x\)求导,形式与\(\boldsymbol y\)相同:

\[ \frac{\partial \boldsymbol {y} }{\partial x}= \begin{bmatrix} \frac {\partial y_{1}}{\partial x}\\ \frac {\partial y_{2}}{\partial x}\\ \vdots \\ \frac {\partial y_{m}}{\partial x}\\ \end{bmatrix} \]

  1. 向量/向量。这边可以看作将列向量\(\boldsymbol y\)沿着水平方向平铺\(n\)次,同样把行向量\(\boldsymbol x\)沿着竖直方向平铺\(m\)次,得到的结果即是\(m \times n\)的矩阵:

\[ \frac {\partial \boldsymbol {y} }{\partial \boldsymbol {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}} \]

  1. 矩阵/标量。这种情况即是矩阵下每个元素依次对标量\(x\)求导,和其他矩阵与实数运算类似(加减乘除等):

\[ \frac {\partial \boldsymbol {Y} }{\partial x}= \begin{bmatrix} \frac {\partial y_{11}}{\partial x}& \frac {\partial y_{12}}{\partial x}& \cdots & \frac {\partial y_{1n}}{\partial x}\\ \frac {\partial y_{21}}{\partial x}& \frac {\partial y_{22}}{\partial x}& \cdots & \frac {\partial y_{2n}}{\partial x}\\ \vdots &\vdots &\ddots &\vdots \\ \frac {\partial y_{m1}}{\partial x}& \frac {\partial y_{m2}}{\partial x}& \cdots & \frac {\partial y_{mn}}{\partial x}\\ \end{bmatrix} \]

  1. 标量/矩阵。这种情况下标量在上面,和上一种情况相反,故在\((i,j)\)位置的分母是\(\partial x_{ji}\)而不是\(\partial x_{ij}\),所以结果的维度也是\(\boldsymbol X^T\)的维度。

\[ \frac {\partial y}{\partial \boldsymbol {X}}= \begin{bmatrix} \frac {\partial y}{\partial x_{11}}& \frac {\partial y}{\partial x_{21}}& \cdots & \frac {\partial y}{\partial x_{p1}}\\ \frac {\partial y}{\partial x_{12}}& \frac {\partial y}{\partial x_{22}}& \cdots & \frac {\partial y}{\partial x_{p2}}\\ \vdots &\vdots &\ddots &\vdots \\ \frac {\partial y}{\partial x_{1q}}& \frac {\partial y}{\partial x_{2q}}& \cdots & \frac {\partial y}{\partial x_{pq}}\\ \end{bmatrix} \]

分母布局下的求导

与分子布局相反,使用分母布局时,把\(\boldsymbol y\)看成一个行向量,而把\(\boldsymbol x\)看成一个列向量,即

\(\boldsymbol {y} ={\begin{bmatrix}y_{1}&y_{2}&\dots &y_{m}\end{bmatrix}}\)\(\boldsymbol {x} ={\begin{bmatrix}x_{1}\\x_{2}\\\vdots\\x_{m}\end{bmatrix}}\),求导公式为:

  1. 标量/向量。此时\(m=1\),结果是用\(y\)\(\boldsymbol x\)中每个元素依次求导,形式与\(\boldsymbol x\)相同:

\[ \frac {\partial y}{\partial \boldsymbol {x} }= \begin{bmatrix} \frac {\partial y}{\partial x_{1}}\\ \frac {\partial y}{\partial x_{2}}\\ \vdots \\ \frac {\partial y}{\partial x_{n}}\\ \end{bmatrix} \]

  1. 向量/标量。此时\(n=1\),结果是\(\boldsymbol y\)中每个元素依次对实数\(x\)求导,形式与\(\boldsymbol y\)相同:

\[ \frac {\partial \boldsymbol {y} }{\partial x}=\begin{bmatrix}{\frac {\partial y_{1}}{\partial x}}{\frac {\partial y_{2}}{\partial x}}\cdots {\frac {\partial y_{m}}{\partial x}}\end{bmatrix} \]

  1. 向量/向量。这边可以看作将行向量\(\boldsymbol y\)沿着竖直方向平铺\(n\)次,同样把列向量\(\boldsymbol x\)沿着水平方向平铺\(m\)次,得到的结果即是\(n \times m\)的矩阵:

\[ \frac {\partial \boldsymbol {y} }{\partial \boldsymbol {x} }= \begin{bmatrix} {\frac {\partial y_{1}}{\partial x_{1}}}& {\frac {\partial y_{2}}{\partial x_{1}}}& \cdots & {\frac {\partial y_{m}}{\partial x_{1}}}\\ {\frac {\partial y_{1}}{\partial x_{2}}}& {\frac {\partial y_{2}}{\partial x_{2}}}& \cdots & {\frac {\partial y_{m}}{\partial x_{2}}}\\ \vdots &\vdots &\ddots &\vdots \\ {\frac {\partial y_{1}}{\partial x_{n}}}& {\frac {\partial y_{2}}{\partial x_{n}}}& \cdots & {\frac {\partial y_{m}}{\partial x_{n}}}\\ \end{bmatrix} \]

  1. 标量/矩阵。这种情况和分子布局中的情况又相反,所以结果的维度反而是\(\boldsymbol X\)的维度。

\[ \frac {\partial y}{\partial \boldsymbol {X} }= \begin{bmatrix} {\frac {\partial y}{\partial x_{11}}}& {\frac {\partial y}{\partial x_{12}}}& \cdots & {\frac {\partial y}{\partial x_{1q}}}\\ {\frac {\partial y}{\partial x_{21}}}& {\frac {\partial y}{\partial x_{22}}}& \cdots & {\frac {\partial y}{\partial x_{2q}}}\\ \vdots &\vdots &\ddots &\vdots \\ {\frac {\partial y}{\partial x_{p1}}}& {\frac {\partial y}{\partial x_{p2}}}& \cdots & {\frac {\partial y}{\partial x_{pq}}}\\ \end{bmatrix} \]

一个实例

接着看书上的例子:

\[ \frac{\partial (y-Xw)^T(y-Xw)}{\partial w} \]

首先化简,得到 \[ \begin{align} \frac{\partial (y-Xw)^T(y-Xw)}{\partial w} &= \frac{\partial{(y^Ty-y^TXw-w^TX^Ty+w^TX^TXw)}}{\partial w} \\ &= \frac{\partial y^Ty}{\partial w} - \frac{\partial y^TXw}{\partial w} - \frac{\partial w^TX^Ty}{\partial w} + \frac{\partial w^TX^TXw}{\partial w} \end{align} \] 观察可得,这四项全都是标量/向量的形式,可以得出相同维度的结果,可以相加。如果用分子布局,结果会是\(1 \times n\)的向量,分母布局则是\(n \times 1\)的向量。

这里假设我们使用分子布局,借助Wiki上的Scalar-by-vector identities直接查公式:

  • \(\frac{\partial y^Ty}{\partial w} = 0\),这里\(y^Ty\)\(w\)无关,因此向量中的每一项都是0.
  • \(\frac{\partial y^TXw}{\partial w} = y^TX\)
  • \(\frac{\partial w^TX^Ty}{\partial w} = \frac{\partial(w^TX^Ty)^T}{\partial w} = \frac{\partial{y^TXw}}{\partial w} = y^TX\),这里分母是标量,所以转置后仍是本身,所以和上一项相同。
  • \(\frac{\partial w^TX^TXw}{\partial w} = 2w^TX^TX\)

把四项加起来,得出最后的结果为\(2(w^TX^T-y^T)X\),是一个行向量。而如果使用分母布局的话,得出的结果是个列向量,值为分子布局中值的转置\(2X^T(Xw-y)\),和书上相同,如果查表计算也是这个结果。

总结和比较

观察对比前面的章节可以发现,使用分子布局和分母布局得出的结果恰好互为转置矩阵(向量也是一种特殊的矩阵)。而对于具体要使用哪种布局,这里贴出Wiki上的原话:

The best policy is probably to identify whichever layout is used and maintain consistency with it, rather than attempting to use the same layout in all situations.

参考资料

Wikipedia:

https://en.wikipedia.org/wiki/Matrix_calculus#Layout_conventions