矩阵函数如何求导?

我们可以连结一个多元函数对其所有变量的偏导数,以得到该函数的梯度(gradient)向量。 具体而言,设函数f:RnRf:\R^n\rightarrow\R的输入是一个nn维向量x=[x1,x2,...,xn]T\textbf{x}=[x_1,x_2,...,x_n]^T,并且输出是一个标量。 函数f(x)f(\textbf{x})相对于x\textbf{x}的梯度是一个包含nn个偏导数的向量:

xf(x)=[f(x)x1,f(x)x2,...,f(x)xn]T\nabla_xf(x)=[\frac{\partial f(x)}{\partial x_1},\frac{\partial f(x)}{\partial x_2},...,\frac{\partial f(x)}{\partial x_n}]^T

假设x\textbf{x}nn维向量,在微分多元函数时经常使用以下规则:

  • 对于所有ARmn\textbf{A}\in\R^{m*n},都有xAx=AT\nabla_\textbf{x}\textbf{Ax}=\textbf{A}^T
  • 对于所有ARnm\textbf{A}\in\R^{n*m},都有xxTA=A\nabla_\textbf{x}\textbf{x}^T\textbf{A}=\textbf{A}
  • 对于所有ARnn\textbf{A}\in\R^{n*n},都有xxTAx=(A+AT)x\nabla_\textbf{x}\textbf{x}^T\textbf{A}\textbf{x}=(\textbf{A}+\textbf{A}^T)\textbf{x}
  • xx2=xxTx=2x\nabla_\textbf{x}||\textbf{x}||^2=\nabla_\textbf{x}\textbf{x}^T\textbf{x}=2\textbf{x}

同样,对于任何矩阵X\textbf{X},都有XXF2==2x\nabla_\textbf{X}||\textbf{X}||^2_F==2\textbf{x}。 正如我们之后将看到的,梯度对于设计深度学习中的优化算法有很大用处。