import torch
x=torch.Tensor([[1,2,3],[2,3,4]])
x.requires_grad=True
# y=x^2
y=torch.pow(x,2)
# 求导
y.sum().backward()
print(x.grad)
>>tensor([[2., 4., 6.],
[4., 6., 8.]])
- 函数矩阵对矩阵的导数
- 定义
设\(A=(a_{ij})_{p \times q}\),\(B=(b_{kl})_{p \times q}\),\(A\)中的每一个元素\(a_{ij}\)是\(B\)的函数,即\(a_{ij}=a_{ij}(B)\),称\(A\)是\(B\)的函数,用\(A(B)\)表示。
- 函数矩阵\(A\)对矩阵\(B\)的导数\(\frac{DA}{DB}\)\[ \frac{DA}{DB}=
\left[
\begin{matrix}
\frac{\partial A}{\partial b_{11}} & \frac{\partial A}{\partial b_{12}} & \cdots & \frac{\partial A}{\partial b_{1q}} \\
\frac{\partial A}{\partial b_{21}} & \frac{\partial A}{\partial b_{22}} & \cdots & \frac{\partial A}{\partial b_{2q}} \\
\vdots & \vdots & \ddots & \vdots \\
\frac{\partial A}{\partial b_{p1}} & \frac{\partial A}{\partial b_{p2}} & \cdots & \frac{\partial A}{\partial b_{pq}}
\end{matrix}
\right]=\left(\frac{\partial A}{\partial b_{kl}} \right)
\tag{10}
\]其中:\[ \frac{\partial A}{\partial b_{kl}}=
\left[
\begin{matrix}
\frac{\partial a_{11}}{\partial b_{kl}} & \frac{\partial a_{12}}{\partial b_{kl}} & \cdots & \frac{\partial a_{1n}}{\partial b_{kl}} \\
\frac{\partial a_{21}}{\partial b_{kl}} & \frac{\partial a_{22}}{\partial b_{kl}} & \cdots & \frac{\partial a_{2n}}{\partial b_{kl}} \\
\vdots & \vdots & \ddots & \vdots \\
\frac{\partial a_{m1}}{\partial b_{kl}} & \frac{\partial a_{m2}}{\partial b_{kl}} & \cdots & \frac{\partial a_{mn}}{\partial b_{kl}}
\end{matrix}
\right]
\tag{11}
\]
- 性质\[\frac{DA}{DA^T}=\frac{DA^T}{DA}=E \tag{12}
\]\[\frac{D(A+B)}{DC}=\frac{DA}{DC}+\frac{DB}{DC} \tag{13}
\]