总结矩阵求导以及矩阵求导在机器学子中的应用
在深度学习神经网络的反向传播时,需要根据最后输出的loss反向更新网络的参数,神经网络的训练过程实际上就是参数的更新过程,参数是根据梯度下降法更新的,而梯度的计算需要用到偏导数。因此本文总结了3种在机器学习种用到最多的矩阵求导公式。
考虑三种常见的情况:
case1 vector to vector
y = f ( x ) \mathbf{y}=f(\mathbf{x}) y=f(x),其中,y是m维列向量,x是n维列向量。
∂ y ∂ x = [ ∂ y 1 ∂ x 1 ∂ y 1 ∂ x 2 ⋯ ∂ y 1 ∂ x n ∂ y 2 ∂ x 1 ∂ y 2 ∂ x 2 ⋯ ∂ y 2 ∂ x n ⋮ ⋮ ⋮ ∂ y m ∂ x 1 ∂ y m ∂ x 2 ⋯ ∂ y m ∂ x n ] \frac{\partial \mathbf{y}}{\partial \mathbf{x}}=\left[\begin{array}{cccc}\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 & & \vdots \\ \frac{\partial y_{m}}{\partial x_{1}} & \frac{\partial y_{m}}{\partial x_{2}} & \cdots & \frac{\partial y_{m}}{\partial x_{n}}\end{array}\right] ∂x∂y=⎣⎢⎢⎢⎢⎡∂x1∂y1∂x1∂y2⋮∂x1∂ym∂x2∂y1∂x2∂y2⋮∂x2∂ym⋯⋯⋯∂xn∂y1∂xn∂y2⋮∂xn∂ym⎦⎥⎥⎥⎥⎤
需要将y中的元素对x中的元素一一求导,那么求导结果是 m × n m\times n m×n 个元素,然后确定结果的形状, y , x \mathbf{y},\mathbf{x} y,x均为向量, y \mathbf{y} y 纵向拉, x \mathbf{x} x横向拉。
case2 向量内积形式求导
结果等于另一个向量,很重要,建议直接背!
y = a T x \mathbf{y}=\mathbf{a}^T\mathbf{x} y=aTx
∂ y ∂ x = a \frac{\partial \mathbf{y}}{\partial \mathbf{x}}=\mathbf{a} ∂x∂y=a, ∂ y ∂ a = x \frac{\partial \mathbf{y}}{\partial \mathbf{a}}=\mathbf{x} ∂a∂y=x
case3 二次型
y = x ⊤ A x y=\mathbf{x}^{\top} \mathbf{A} \mathbf{x} y=x⊤Ax
注意,这里的y是一个标量,这个x是一个n维的列向量,A矩阵是n维的方阵
则 ∂ y ∂ x = ( A + A T ) b \frac{\partial y}{\partial \mathbf{x}}=(A+A^T)\mathbf{b} ∂x∂y=(A+AT)b