深度学习中矩阵求导公式整理
深度学习中矩阵求导公式整理矩阵求导的类型参考文献:矩阵求导的类型类型标量向量矩阵标量∂y∂x\frac{\partial y}{\partial x}∂x∂y∂y∂x\frac{\partial \mathbf{y}}{\partial x}∂x∂y∂Y∂x\frac{\partial \mathbf{Y}}{\partial x}∂x∂Y向量∂y∂...
深度学习中矩阵求导公式整理
1.两种布局约定方式
布局(Layout):在矩阵求导中有两种布局,分别为分母布局(denominator layout)和分子布局(numerator layout)。这两种不同布局的求导规则是不一样的。
向量 y = [ y 1 y 2 ⋮ y n ] \mathbf{y}=\left[\begin{matrix} y_1\\ y_2\\ \vdots \\y_n\end{matrix} \right] y=⎣⎢⎢⎢⎡y1y2⋮yn⎦⎥⎥⎥⎤,关于标量 x x x的求导,
在分子布局下,为:
∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋮ ∂ y n ∂ x ] \frac{\partial \mathbf{y}}{\partial x}=\left[\begin{matrix} \frac{\partial y_1}{\partial x}\\\frac{\partial y_2}{\partial x}\\ \vdots \\\frac{\partial y_n}{\partial x}\end{matrix} \right] ∂x∂y=⎣⎢⎢⎢⎡∂x∂y1∂x∂y2⋮∂x∂yn⎦⎥⎥⎥⎤
而在分母布局下,为:
∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋯ ∂ y n ∂ x ] \frac{\partial \mathbf{y}}{\partial x}=\left[\begin{matrix}\frac{\partial y_1}{\partial x}&\frac{\partial y_2}{\partial x} & \cdots &\frac{\partial y_n}{\partial x}\end{matrix} \right] ∂x∂y=[∂x∂y1∂x∂y2⋯∂x∂yn]
通过观察和推导我们可以知道,分子布局和分母布局之间刚好差一个转置,即在分子布局下与原来 y \mathbf{y} y相同,而在分母布局下差一个转置。
2.矩阵求导的类型
类型 | 标量 | 向量 | 矩阵 |
---|---|---|---|
标量 | ∂ y ∂ x \frac{\partial y}{\partial x} ∂x∂y | ∂ y ∂ x \frac{\partial \mathbf{y}}{\partial x} ∂x∂y | ∂ Y ∂ x \frac{\partial \mathbf{Y}}{\partial x} ∂x∂Y |
向量 | ∂ y ∂ x \frac{\partial y}{\partial \mathbf{x}} ∂x∂y | ∂ y ∂ x \frac{\partial \mathbf{y}}{\partial \mathbf{x}} ∂x∂y | |
矩阵 | ∂ y ∂ X \frac{\partial y}{\partial \mathbf{X}} ∂X∂y |
3.标量对标量求导
这种情况就是平常的代数求导,直接为 ∂ y ∂ x \frac{\partial y}{\partial x} ∂x∂y
4.向量对标量求导
向量 y = [ y 1 y 2 ⋮ y n ] \mathbf{y}=\left[\begin{matrix} y_1\\ y_2\\ \vdots \\y_n\end{matrix} \right] y=⎣⎢⎢⎢⎡y1y2⋮yn⎦⎥⎥⎥⎤,关于标量 x x x的求导(以分子布局约定)就是 y \mathbf{y} y的每一个元素分别对 x x x求导,可以表示为:
∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋮ ∂ y n ∂ x ] \frac{\partial \mathbf{y}}{\partial x}=\left[\begin{matrix} \frac{\partial y_1}{\partial x}\\\frac{\partial y_2}{\partial x}\\ \vdots \\\frac{\partial y_n}{\partial x} \end{matrix} \right] ∂x∂y=⎣⎢⎢⎢⎡∂x∂y1∂x∂y2⋮∂x∂yn⎦⎥⎥⎥⎤
此时为正切向量, ∂ y ∂ x \frac{\partial \mathbf{y}}{\partial x} ∂x∂y为 y \mathbf{y} y的正切向量,有映射 y \mathbf{y} y: R n ⟹ R n \R^n\implies\R^n Rn⟹Rn??
5.矩阵对标量求导
矩阵对标量的求导类似于向量关于标量的求导,也就是矩阵的每个元素分别对标量 x x x求导,矩阵 Y = [ y 11 y 12 ⋯ y 1 n y 21 y 22 ⋯ y 2 n ⋮ ⋮ ⋱ ⋮ y n 1 y n 2 ⋯ y n n ] \mathbf{Y} =\left[\begin{matrix} y_{11}&y_{12}& \cdots&y_{1n} \\ y_{21}&y_{22}& \cdots&y_{2n} \\ \vdots&\vdots&\ddots&\vdots\\ y_{n1}&y_{n2}& \cdots&y_{nn} \end{matrix} \right] Y=⎣⎢⎢⎢⎡y11y21⋮yn1y12y22⋮yn2⋯⋯⋱⋯y1ny2n⋮ynn⎦⎥⎥⎥⎤对标量 x x x的导数(以分子布局约定)为:
∂ Y ∂ x = [ ∂ y 11 ∂ x ∂ y 12 ∂ x ⋯ ∂ y 1 n ∂ x ∂ y 21 ∂ x ∂ y 22 ∂ x ⋯ ∂ y 2 n ∂ x ⋮ ⋮ ⋱ ⋮ ∂ y n 1 ∂ x ∂ y n 2 ∂ x ⋯ ∂ y n n ∂ x ] \frac{\partial \mathbf{Y} }{\partial x}=\left[\begin{matrix} \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_{n1}}{\partial x}&\frac{\partial y_{n2}}{\partial x}& \cdots&\frac{\partial y_{nn}}{\partial x} \end{matrix} \right] ∂x∂Y=⎣⎢⎢⎢⎡∂x∂y11∂x∂y21⋮∂x∂yn1∂x∂y12∂x∂y22⋮∂x∂yn2⋯⋯⋱⋯∂x∂y1n∂x∂y2n⋮∂x∂ynn⎦⎥⎥⎥⎤
6.标量对向量求导
标量 y y y关于向量 x = [ x 1 x 2 ⋮ x n ] \mathbf{x}=\left[\begin{matrix} x_1\\x_2\\\vdots\\x_n \end{matrix} \right] x=⎣⎢⎢⎢⎡x1x2⋮xn⎦⎥⎥⎥⎤的求导可以表示为:
∂ y ∂ x = [ ∂ y ∂ x 1 ∂ y ∂ x 2 ⋯ ∂ y ∂ x n ] \frac{\partial y}{\partial \mathbf{x}}=\left[\begin{matrix} \frac{\partial y}{\partial x_1}&\frac{\partial y}{\partial x_2}&\cdots&\frac{\partial y}{\partial x_n} \end{matrix} \right] ∂x∂y=[∂x1∂y∂x2∂y⋯∂xn∂y]
此时的向量叫做梯度向量。 ∂ y ∂ x \frac{\partial y}{\partial \mathbf{x}} ∂x∂y为标量 y y y在空间 R n \R^n Rn的梯度,该空间以 x x x为基。
7.向量对向量求导
向量函数(即函数组成的向量) y = [ y 1 y 2 ⋮ y n ] \mathbf{y}=\left[\begin{matrix} y_1\\y_2\\\vdots\\y_n \end{matrix} \right] y=⎣⎢⎢⎢⎡y1y2⋮yn⎦⎥⎥⎥⎤关于向量 x = [ x 1 x 2 ⋮ x n ] \mathbf{x}=\left[\begin{matrix} x_1\\x_2\\\vdots\\x_n \end{matrix} \right] x=⎣⎢⎢⎢⎡x1x2⋮xn⎦⎥⎥⎥⎤的导数记作:
∂ 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 n ∂ x 1 ∂ y n ∂ x 2 ⋯ ∂ y n ∂ x n ] \frac{\partial \mathbf{y} }{\partial \mathbf{x}}=\left[\begin{matrix} \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_n}{\partial x_1}&\frac{\partial y_n}{\partial x_2}&\cdots&\frac{\partial y_n}{\partial x_n} \end{matrix} \right] ∂x∂y=⎣⎢⎢⎢⎢⎡∂x1∂y1∂x1∂y2⋮∂x1∂yn∂x2∂y1∂x2∂y2⋮∂x2∂yn⋯⋯⋱⋯∂xn∂y1∂xn∂y2⋮∂xn∂yn⎦⎥⎥⎥⎥⎤
此时获得的矩阵 ∂ y ∂ x \frac{\partial \mathbf{y} }{\partial \mathbf{x}} ∂x∂y叫做Jacobian矩阵。
8.标量对矩阵求导
自变量为矩阵X 的标量函数 y 关于矩阵X的导数为:(分子布局约定)
∂ y ∂ X = [ ∂ y ∂ x 11 ∂ y ∂ x 21 ⋯ ∂ y ∂ x p 1 ∂ y ∂ x 12 ∂ y ∂ x 22 ⋯ ∂ y ∂ x p 2 ⋮ ⋮ ⋱ ⋮ ∂ y ∂ x 1 q ∂ y ∂ x 2 q ⋯ ∂ y ∂ x p q ] \frac{\partial y }{\partial \mathbf{X}}=\left[\begin{matrix} \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{matrix} \right] ∂X∂y=⎣⎢⎢⎢⎢⎡∂x11∂y∂x12∂y⋮∂x1q∂y∂x21∂y∂x22∂y⋮∂x2q∂y⋯⋯⋱⋯∂xp1∂y∂xp2∂y⋮∂xpq∂y⎦⎥⎥⎥⎥⎤
注意到这里关于X的梯度的索引就是矩阵X索引的转置。(矩阵的标量函数会涉及到矩阵的迹和行列式)。
参考文献:
[1] Matrix calculus
[2] 矩阵求导(一)
[3] 数学-矩阵计算(4)两种布局
码字不易,如果您觉得有帮助,麻烦帮我点个赞~~
更多推荐
所有评论(0)