矩阵求导入门

机器学习中,往往是对整个数据集操作,“原子化”的运算过于繁琐,将其抽象成矩阵,使得思路更加清晰,也更便于转换成具体的代码。

基本定义

矩阵求导的本质就是普通的求导写成了矩阵的形式,因此我们约定一些规则在下文。这里用粗体小写表示向量,粗体大写表示矩阵。

向量→标量函数求导

向量→标量函数即输入为向量,输出为标量的函数。有函数,输入一个维列向量,输出一个实数。对其求导的定义式:
\dfrac{\partial f(\textbf{x})}{\partial{\textbf{x}}}=\begin{bmatrix} \dfrac{\partial f(\textbf{x})}{\partial{x_1}}\\ \dfrac{\partial f(\textbf{x})}{\partial{x_2}}\\ ...\\ \dfrac{\partial f(\textbf{x})}{\partial{x_n}} \end{bmatrix}=\nabla f
这个定义式正好和梯度相符合。

向量→向量函数求导

向量→向量函数即输入输出都是向量的函数。有函数,输入一个维列向量,输出一个维列向量。可以视为多个标量函数放到一个列向量中构成这个向量函数,即。如果只是对一个标量函数求导,那么就和上面一样:
\dfrac{\partial f_i(\textbf{x})}{\partial{\textbf{x}}}=\begin{bmatrix} \dfrac{\partial f_i(\textbf{x})}{\partial{x_1}}\\ \dfrac{\partial f_i(\textbf{x})}{\partial{x_2}}\\ ...\\ \dfrac{\partial f_i(\textbf{x})}{\partial{x_n}} \end{bmatrix}=\nabla f_i
现在,把上面的式子“展开”成一个梯度构成的矩阵里,才能完整表达这个向量函数所有的求导结果:
\dfrac{\partial f(\textbf{x})}{\partial{\textbf{x}}}=\begin{bmatrix} \dfrac{\partial f_1(\textbf{x})}{\partial{x_1}} &\dfrac{\partial f_2(\textbf{x})}{\partial{x_1}} &... &\dfrac{\partial f_m(\textbf{x})}{\partial{x_1}}\\ \dfrac{\partial f_1(\textbf{x})}{\partial{x_2}} &\dfrac{\partial f_2 (\textbf{x})}{\partial{x_2}} &... &\dfrac{\partial f_m(\textbf{x})}{\partial{x_2}}\\ ...&...&...&...\\ \dfrac{\partial f_1(\textbf{x})}{\partial{x_n}} &\dfrac{\partial f_2(\textbf{x})}{\partial{x_n}} &... &\dfrac{\partial f_m(\textbf{x})}{\partial{x_n}} \end{bmatrix}=\begin{bmatrix} \nabla f_1 & \nabla f_2 &...&\nabla f_m \end{bmatrix}
函数 求导后输出了一个的矩阵。第列是 的第行的标量函数的梯度。它其实也是Jacobian矩阵的转置。

上面是普遍情况,而很多时候这里的是由同一个函数组成,比如是一列函数,那么有,表示向量的每一个元素都取倒数。
也可以这样写:,看起来就和单变量的函数一样。
如果复杂一点 求导,其中是维度和维度相同的常数列向量。
先说一个前提,接下来会使用这样的表示方法:,而,带转置的表示点乘,否则就是元素相乘,不改变原来两个向量的维度。
那么上式只看其中一行的情况:,求导得,每行都如此,因此最终的结果写成。这样一来,向量之间的运算看起来就像实数之间的运算。

矩阵→标量函数求导

即输入为矩阵,输出为标量的函数的求导。有函数,其参数是矩阵。这和上面向量→标量函数求导相似,其相当于是矩阵为参数。我们只需要把它展开即可:

\dfrac{\partial f(\textbf{X})}{\partial{\textbf{X}}}=\begin{bmatrix} \dfrac{\partial f(\textbf{X})}{\partial{\textbf{X}_{11}}}& \dfrac{\partial f(\textbf{X})}{\partial{\textbf{X}_{12}}}& ...& \dfrac{\partial f(\textbf{X})}{\partial{\textbf{X}_{1n}}}\\ \dfrac{\partial f(\textbf{X})}{\partial{\textbf{X}_{21}}}& \dfrac{\partial f(\textbf{X})}{\partial{\textbf{X}_{22}}}& ...& \dfrac{\partial f(\textbf{X})}{\partial{\textbf{X}_{2n}}}\\ ...&...&...&...\\ \dfrac{\partial f(\textbf{X})}{\partial{\textbf{X}_{m1}}}& \dfrac{\partial f(\textbf{X})}{\partial{\textbf{X}_{m2}}}& ...& \dfrac{\partial f(\textbf{X})}{\partial{\textbf{X}_{mn}}} \end{bmatrix}
相当于是把丢到矩阵的每一个元素上面构成一个新的矩阵。而且这些元素的位置不变。

举一个具体的例子:,其中,。
不难看出本质是一个向量→向量函数,且满足。因此输出的应该是一个矩阵。我们记,。

这样一来,整个式子就紧凑了很多,看起来非常清爽。
.
.
.
.
.


参考文献

[1] Herman Kamper. Vector and Matrix Calculus: https://www.kamperh.com/notes/kamper_matrixcalculus13.pdf

你可能感兴趣的:(矩阵求导入门)