太难啦~太难啦~太难啦~
导数的定义:假设有一个函数f:\mathbb{R} \rightarrow \mathbb{R},其输入输出都是标量。如果f的导数存在,那么这个极限被定义为:
来个代码演示下:
In [1]: def f(x): # 定义一个函数
...: return 3 * x ** 2 - 4 * x
...:
In [2]: def numerical_lim(f, x, h): # 定义求导的计算方法
...: return (f(x+h) - f(x)) / h
...:
In [3]: h = 0.1
In [4]: for i in range(5): # 循环逐渐逼近求导
...: print(f'h={h}, numerical limit={numerical_lim(f, 1, h, ):.5f}')
...: h *= .1
...:
h=0.1, numerical limit=2.30000
h=0.010000000000000002, numerical limit=2.03000
h=0.0010000000000000002, numerical limit=2.00300
h=0.00010000000000000003, numerical limit=2.00030
h=1.0000000000000004e-05, numerical limit=2.00003
另y=3x^2-4x,所以y'=6x-4,即y'(1)=6-4=2。
一元一次函数的求导:
$y$ | $a$ | $x^n$ | $a^x$ | $Inx$ | $sin(x)$ |
---|---|---|---|---|---|
$\frac{dy}{dx}$ | 0 | $nx^{n-1}$ | $(Ina)(a^x)$ | $\frac{1}{x}$ | $cos(x)$ |
a不是关于x的函数。
复合函数的求导:
$y$ | $u+v$ | $uv$ | $y=f(u), u=g(x)$ |
---|---|---|---|
$\frac{dy}{dx}$ | $\frac{du}{dx} + \frac{dv}{dx}$ | $\frac{du}{dx}v + \frac{dv}{dx}u$ | $\frac{dy}{du}·\frac{du}{dx}$ |
Tips / 提示 没有特殊说明,本博文中提到的x,y都为标量,\mathbf{x,y}为一维Tensor——向量,\mathbf{X,Y}为二维Tensor——矩阵。
- | $x$ | $\mathbf{x}$ | $\mathbf{X}$ |
---|---|---|---|
$y$ | $\frac{\partial y}{\partial x}$ | $\frac{\partial y}{\partial \mathbf{x}}$ | $\frac{\partial y}{\partial \mathbf{X}}$ |
$\mathbf{y}$ | $\frac{\partial \mathbf{y}}{\partial x}$ | $\frac{\partial \mathbf{y}}{\partial \mathbf{x}}$ | $\frac{\partial \mathbf{y}}{\partial \mathbf{X}}$ |
$\mathbf{Y}$ | $\frac{\partial \mathbf{Y}}{\partial x}$ | $\frac{\partial \mathbf{Y}}{\partial \mathbf{x}}$ | $\frac{\partial \mathbf{Y}}{\partial \mathbf{X}}$ |
对于一个多元函数:
可以将f对x_1,x_2,x_3的偏导数分别求出来,即:
$$ \begin{equation} \begin{cases} \frac{\partial f}{\partial x_1} = 2x_1+x_2 \\ \frac{\partial f}{\partial x_2} = x_1+x_3 \\ \frac{\partial f}{\partial x_3} = x_2 \end{cases} \end{equation} $$
所谓向量的求导,其实与多元函数的求导类似,只不过写成了向量的形式。
上式就可以理解为一个f关于向量[x_1,x_2,x_3]^T的函数:
对其进行求导的结果是:
$$ \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}_{3×1}}= \left [ \begin{matrix} \frac{\partial f}{\partial x_1} \\ \frac{\partial f}{\partial x_2} \\ \frac{\partial f}{\partial x_3} \end{matrix} \right ] = \left [ \begin{matrix} 2x_1+x_2 \\ x_1+x_3 \\ x_2 \end{matrix} \right ] $$
上面这个形式就是一个标量f对一个向量求导的情况。
矩阵、向量的求导, 本质就是每个f分别对变元中的每个元素逐个求偏导,只不过写成了向量、矩阵形式而已。所以,如果function中有m个f,变元中有n个元素,那么每个f对变元中的每个元素逐个求偏导后,我们就会产生m×n个结果。
求导的各种情况
该方法来自Bilibili @GRNovmbrain1。
例如,当\mathbf{f}(\mathbf{x})以及\mathbf{x}_{n×1}都为向量时:
$$ \mathbf{f}(\mathbf{x})= \left [ \begin{matrix} f_1(\mathbf{x}) \\ f_2(\mathbf{x}) \\ ... \\ f_n(\mathbf{x}) \end{matrix} \right ], \ \mathbf{x} = \left [ \begin{matrix} x_1 \\ x_2 \\ ... \\ x_n \end{matrix} \right ] $$
那么求导结果为:
$$ \frac{\partial \mathbf{f}(\mathbf{x})}{\partial \mathbf{x}}= \left [ \begin{matrix} \frac{\partial \mathbf{f}}{\partial x_1} \\ \frac{\partial \mathbf{f}}{\partial x_2} \\ \cdots \\ \frac{\partial \mathbf{f}}{\partial x_n} \end{matrix} \right ] = \left [ \begin{matrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_2}{\partial x_1} & \cdots & \frac{\partial f_n}{\partial x_1} \\ \frac{\partial f_1}{\partial x_2} & \frac{\partial f_2}{\partial x_2} & \cdots & \frac{\partial f_n}{\partial x_2} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f_1}{\partial x_n} & \frac{\partial f_2}{\partial x_n} & \cdots & \frac{\partial f_n}{\partial x_n} \end{matrix} \right ] $$
Tips / 提示
包括:分子布局或分母布局。
可见,分子布局和分母布局两者相差一个转置。
分子布局,就是分子是列向量形式,分母是行向量形式:
$$ \frac{\partial f_{2×1}(\mathbf{x})}{\partial \mathbf{x}_{3×1}^T}= \left [ \begin{matrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \frac{\partial f_1}{\partial x_3}\\ \frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \frac{\partial f_2}{\partial x_3} \end{matrix} \right ]_{2×3} $$
分母布局,就是分母是列向量形式,分母是行向量形式:
$$ \frac{\partial f^T_{2×1}(\mathbf{x})}{\partial \mathbf{x}_{3×1}}= \left [ \begin{matrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_2}{\partial x_1} \\ \frac{\partial f_1}{\partial x_2} & \frac{\partial f_2}{\partial x_2} \\ \frac{\partial f_1}{\partial x_3} & \frac{\partial f_2}{\partial x_3} \end{matrix} \right ]_{3×2} $$
Expand / 拓展 可以看出,(分母布局)^T=(分子布局),且分子布局中求导后的结果行数与分子相同,分母布局中求导后的结果行数与分母相同。
设存在函数:
$$ f(\mathbf{x}), \ \mathbf{x}= \left [ \begin{matrix} x_1 \\ x_2 \\ \cdots \\ x_n \end{matrix} \right ]_{n×1} $$
求导可以得:
$$ \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}}= \left [ \begin{matrix} \frac{\partial f}{\partial x_1}\\ \frac{\partial f}{\partial x_2}\\ \cdots \\ \frac{\partial f}{\partial x_n} \end{matrix} \right ]_{n×1} $$
因为f(\mathbf{x})为标量函数,所以行数为1,\mathbf{x}为n×1向量,求导的结果为n×1向量,求导后的结果与分母具有相同得行数,所以上述为分母布局。
求导方式也可以写为行向量形式:
$$ \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}}= \left [ \begin{matrix} \frac{\partial f}{\partial x_1}, \ \frac{\partial f}{\partial x_2}, \ \cdots, \ \frac{\partial f}{\partial x_n} \end{matrix} \right ]_{1×n} $$
求导的结果为1×n向量,求导后的结果与分子具有相同得行数,所以上述为分母布局。
证明:(分母布局)^T=(分子布局),另
$$ f(x_1, \ x_2)=x_1^2+x_2^2, \ \mathbf{x}= \left [ \begin{matrix} x_1\\ x_2 \end{matrix} \right ]_{2×1} $$
对应的分母布局为:
$$ \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}}= \left [ \begin{matrix} \frac{\partial f}{\partial x_1}\\ \frac{\partial f}{\partial x_2} \end{matrix} \right ]_{2×1}= \left [ \begin{matrix} 2x_1\\ 2x_2 \end{matrix} \right ]_{2×1} $$
对应的分子布局为:
$$ \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}}= \left [ \begin{matrix} \frac{\partial f}{\partial x_1}, \ \frac{\partial f}{\partial x_2} \end{matrix} \right ]_{1×2}= \left [ \begin{matrix} 2x_1, \ 2x_2 \end{matrix} \right ]_{1×2} = \left [ \begin{matrix} 2x_1\\ 2x_2 \end{matrix} \right ]_{2×1}^T $$
分母布局
该方法来自Bilibili @DR_CAN2。 梯度指向值变化最大的方向。
1、如果存在f(x)=A^T\mathbf{x},那么:
另:
$$ A= \left [ \begin{matrix} a_1 \\ a_2 \\ \cdots \\ a_n \end{matrix} \right ]_{n×1}, \ \mathbf{x}= \left [ \begin{matrix} x_1 \\ x_2 \\ \cdots \\ x_n \end{matrix} \right ]_{n×1}, \ $$
f(x)=A^T\mathbf{x}为一个标量:
所以,对其求导得:
$$ \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}}= \left [ \begin{matrix} \frac{\partial f}{\partial \mathbf{x_1}} \\ \frac{\partial f}{\partial \mathbf{x_2}} \\ \cdots \\ \frac{\partial f}{\partial \mathbf{x_n}} \\ \end{matrix} \right ] = \left [ \begin{matrix} \frac{\partial (\sum_{n}^{i=1}a_ix_i)}{\partial \mathbf{x_1}} \\ \frac{\partial (\sum_{n}^{i=1}a_ix_i)}{\partial \mathbf{x_2}} \\ \cdots \\ \frac{\partial (\sum_{n}^{i=1}a_ix_i)}{\partial \mathbf{x_n}} \\ \end{matrix} \right ] = \left [ \begin{matrix} a_1 \\ a_2 \\ \cdots \\ a_n \end{matrix} \right ] = A $$
上面是分子布局的结果,如果是分母布局,结果应该为:
由线性代数基本公式可以推导出:A^T \mathbf{x}=\sum_{i=1}^{n} a_ix_i=\mathbf{x}^TA,所以说对于\mathbf{x}^TA也适用于本结论。
2、如果存在\mathbf{y}=A\mathbf{x},则:
证明过程
矩阵的求导是真抽象啊?,参考学习链接:
----- END -----