微分
微分
微积分(Calculus1)包括微分(Differential calculus2, 研究变化率)和积分(Integral calculus, 研究曲线下的面积),这里主要总结微分的基本性质(Differentiation rules3).简单使用可以用在线网站计算常用导数
微分通常用于寻找极值,微分方程是用于描述自然现象的基础.
导数对应函数因变量的变化率,即函数在对应点的斜率,即两个变化率相除进行逼近,变化无穷小则得到对应点的导数,基本函数都可以通过这种方式进行求导
微分规则
- 常数的导数为0(斜率为0)
$f(x)=c,c\in \mathbb{R}$, 则有$\frac{df}{dx}=0$ - 微分计算是线性的
简单推导如下 - product rule
可以类似上面基本定义进行推导 - chain rule
- inverse function rule
$f(x)=y$,逆函数$f^{-1}(y)=x$, 对应导数就是斜率,只是分母不同,可以直接看成两个无穷小相除的导数
矩阵微分
矩阵微分只是多变量微分的一种紧凑的表示方式,极大简化了寻找多变量极值,求解微分方程的难度
爱因斯坦求和约定
定义
https://en.wikipedia.org/wiki/Einstein_notation
单独项中有个索引重复2次,意味着对应项为所有这个索引值对应项的求和,
- 内积
- 矩阵-向量乘积对应求和约定为
- 矩阵乘法对应
numpy einsum
使用
对应numpy对应函数einsum
, 针对ij,jk->ik
, ->
左边为输入,右边为输出,参考 https://ajcr.net/Basic-guide-to-einsum/
- Repeating letters between input arrays means that values along those axes will be multiplied together. The products make up the values for the output array.
- Omitting a letter from the output means that values along that axis will be summed.
一维向量
| Call signature | NumPy equivalent | Description |
| :————————-: | :—————————: | :——————————————————: |
| ('i', A)
,('i->i', A)
| A
| returns a view of A |
| ('i->', A)
| sum(A)
| sums the values of A |
| ('i,i->i', A, B)
| A * B
| element-wise multiplication of A and B |
| ('i,i', A, B)
| inner(A, B)
| inner product of A and B |
| ('i,j->ij', A, B)
| outer(A, B)
| outer product of A and B |
二维矩阵
| Call signature | NumPy equivalent | Description |
| ———————————- | ————————————- | ———————————————————— |
| ('ij', A)
,('ij->ij', A)
| A
| returns a view of A |
| ('ji', A)
| A.T
| view transpose of A |
| ('ii->i', A)
| diag(A)
| view main diagonal of A |
| ('ii', A)
| trace(A)
| sums main diagonal of A |
| ('ij->', A)
| sum(A)
| sums the values of A |
| ('ij->j', A)
| sum(A, axis=0)
| sum down the columns of A (across rows) |
| ('ij->i', A)
| sum(A, axis=1)
| sum horizontally along the rows of A |
| ('ij,ij->ij', A, B)
| A * B
| element-wise multiplication of A and B |
| ('ij,ji->ij', A, B)
| A * B.T
| element-wise multiplication of A and B.T |
| ('ij,jk', A, B)
| dot(A, B)
| matrix multiplication of A and B |
| ('ij,kj->ik', A, B)
| inner(A, B)
| inner product of A and B |
实际使用中可以通过基本求和方式进行推导,最后化简为爱因斯坦求和约定方式再实现,比如1
2
3
4
5
6import numpy as np
A = np.random.random((3, 3))
B = np.random.random((3, 3))
print(A.T @ B - np.einsum('ji,jk->ik', A,B))
print(A @ B.T - np.einsum('ij,kj->ik', A,B))
标定对矩阵求导4
标量$f$对矩阵$X$求导定义为逐个元素求导并排列成矩阵, ${\frac{\partial f}{\partial X}}=\left[{\frac{\partial f}{\partial X_{ij}}}\right]$
1元函数微分 $df=f’(x)dx$, 多元函数$df=\sum_{i=1}^n\frac{\partial f}{\partial x_i}dx_i=\frac{\partial f}{\partial x}^Td\boldsymbol{x}=(\nabla_x f(x))^Td\boldsymbol{x}$, 全微分是梯度5向量(梯度和全微分是相互转置的关系)与微分向量的内积.受此启发, 针对矩阵微分可以是
$\text{tr}(A^TB)$是矩阵$A,B$的内积,这里表示全微分$df$是导数$\frac{\partial f}{\partial X}(m \times n)$与微分矩阵$dX(m \times n)$的内积
标量对矩阵求导方法:
- 若标量函数$f$是矩阵$X$经加减乘法、逆、行列式、逐元素函数等运算构成,则使用相应的运算法则对$f$求微分,再使用迹技巧给$df$套上迹并将其它项交换至$dX$左侧,对照导数与微分的联系$df=\mathrm{tr}\left(\frac{\partial f}{\partial X}^TdX\right)$, 即能得到导数
- 若矩阵退化成向量, 则可以直接使用导数与微分的联系$df=\frac{\partial f}{\partial x}^Td\boldsymbol{x}$对比得到
矩阵微分常用法则
- 加减法$d(X\pm Y)=dX \pm dY $, $d(XY)=(dX)Y+X(dY)$, $d(X^T)=(dX)^T$, $d\text {tr} X=\text{tr}dX$
可以使用爱因斯坦求和约定进行推导更方便, 比如矩阵乘法微分:
矩阵乘法表示$Z_{ik}=X_{ij}Y_{jk}$, 对应$dZ_{ik}=d(X_{ij}Y_{jk})=dX_{ij}Y_{jk}+X_{ij}dY_{jk}$, 其中第2个等号求和的微分为每项微分的和,即加减法对应的法则, 最后还原成矩阵表示就是$d(XY)=(dX)Y+X(dY)$ - 逆, $dX^{-1}=-X^{-1}dXX^{-1}$, 可以通过$d(XX^{-1})=0$展开证明
- 行列式, $d|X|=\mathrm{tr}(X^adX)$, 其中$X^{a}$为$X$伴随矩阵,可逆时为$d|X|=|X|\mathrm{tr}(X^{-1}dX)$, 待详细证明
- 逐元素乘, $d(X\odot Y)=dX\odot Y+X\odot dY$
迹基本性质
- 标量, $a=\text{tr}(a)$
- 转置, $\text{tr}(A^T)=\text{tr}(A)$
- 线性, $\text{tr}(A\pm B)=\text{tr}(A) \pm \text{tr}(B)$
- $\text{tr}(AB)=\text{tr}(BA)$, 证明如下, $\text{tr}(AB)=A_{ij}B_{ji}$, $\text{tr}(BA)=B_{ij}A_{ji}=A_{ij}B_{ji}$, 交换累加求和顺序可以证明两个等价的
- 矩阵乘法/逐元素乘法交换, $\mathrm{tr}(A^T(B\odot C))=\mathrm{tr}((A\odot B)^TC)$, 可以使用爱因斯坦求和证明结果都是$\sum_{i,j}A_{ij}B_{ij}{C_{ij}}$
线性回归微分示例
线性方程组$Ax=b$, 其中$A\in \mathbb{R^{m \times n}}, b\in \mathbb{R^m}, m > n$, 约束比变量多通常无解, 但是可以找一个最小二乘解,即
则有
得到$\frac{\partial f}{\partial x}=(2(Ax-b)^TA)^T$, 对照$df=\frac{\partial f}{\partial x}^Td\boldsymbol{x}$, 导数为0,即
$A^TAx=A^Tb$, 对应如果$\text{rank} (A)=n$, 则$A^TA$可逆,对应$x=(A^TA)^{-1}A^Tb$为最小二乘解
1. https://en.wikipedia.org/wiki/Calculus ↩
2. https://en.wikipedia.org/wiki/Differential_calculus ↩
3. https://en.wikipedia.org/wiki/Differentiation_rules ↩
4. https://zhuanlan.zhihu.com/p/24709748 ↩
5. https://zh.wikipedia.org/wiki/%E6%A2%AF%E5%BA%A6 ↩
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 yangbenbo@whu.edu.cn
文章标题:微分
本文作者:杨本泊
发布时间:2024-05-03, 10:21:14
最后更新:2024-06-23, 21:54:09
原始链接:http://yangbenbo.github.io/2024/05/03/微分/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。