矩阵乘向量求导推导

矩阵乘向量求导推导

起因

我想玩RNN,但不知道如何对矩阵乘向量进行求导.

经过

推了一会,我会了.
A b = c Ab=c Ab=c
展开写 [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 ⋯ a n n ] [ b 1 b 2 ⋮ b n ] = [ c 1 c 2 ⋮ c n ] \begin{bmatrix} a_{11}&a_{12}&\cdots&a_{1n}\\ a_{21}&a_{22}&\cdots&a_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ a_{n1}&a_{n2}&\cdots&a_{nn} \end{bmatrix}\begin{bmatrix} b_1\\b_2\\\vdots\\b_n\end{bmatrix}=\begin{bmatrix} c_1\\c_2\\\vdots\\c_n\end{bmatrix} a11a21an1a12a22an2a1na2nannb1b2bn=c1c2cn
其中 c i = ∑ j = 1 n a i j b j c_i=\sum\limits_{j=1}^na_{ij}b_j ci=j=1naijbj,
j假若c就表示自己的梯度,将矩阵的每个元素的梯度写在矩阵的对应位置则
g r a d A = [ b 1 c 1 b 2 c 1 ⋯ b n c 1 b 1 c 2 b 2 c 2 ⋯ b c c 2 ⋮ ⋮ ⋱ ⋮ b 1 c n b 2 c n ⋯ b n c n ] g r a d b = [ a 11 c 1 + a 21 c 2 + ⋯ + a n 1 c n a 12 c 1 + a 22 c 2 + ⋯ + a n 2 c n ⋮ a 1 n c 1 + a 2 n c 2 + ⋯ + a n n c n ] grad_A=\begin{bmatrix} b_1c_1&b_2c_1&\cdots&b_nc_1\\ b_1c_2&b_2c_2&\cdots&b_cc_2\\ \vdots&\vdots&\ddots&\vdots\\ b_1c_n&b_2c_n&\cdots&b_nc_n \end{bmatrix}\\ grad_b=\begin{bmatrix} a_{11}c_1+a_{21}c_2+\cdots+a_{n1}c_n\\ a_{12}c_1+a_{22}c_2+\cdots+a_{n2}c_n\\ \vdots\\ a_{1n}c_1+a_{2n}c_2+\cdots+a_{nn}c_n \end{bmatrix} gradA=b1c1b1c2b1cnb2c1b2c2b2cnbnc1bcc2bncngradb=a11c1+a21c2++an1cna12c1+a22c2++an2cna1nc1+a2nc2++anncn
观察可得梯度传递的过程从矩阵乘法的角度来看是这样的
∂ c ∂ A = b T \dfrac{\partial c}{\partial A}=b^T Ac=bT

∂ c ∂ b = A T \dfrac{\partial c}{\partial b}=A^T bc=AT

梯度传递相乘时要注意顺序:
g r a d A = g r a d c b T grad_A=grad_cb^T gradA=gradcbT
g r a d b = A T g r a d c grad_b=A^Tgrad_c gradb=ATgradc

结果

结果,梯度就下降了.

猜你喜欢

转载自blog.csdn.net/agctXY/article/details/118392490