矩阵微积分
Matrix Calculus
学习顺序
学习目标
- 怎么对向量函数求导,到底要不要转置,如何统一一元和多元求导(Fréchet derivative)
快速入门
- B站:矩阵求导——标量函数的偏导数矩阵
- The Matrix Calculus You Need For Deep Learning
- Old and New Matrix Algebra Useful for Statistics
- 知乎:矩阵求导术(上)
- 知乎:矩阵求导术(下)
系统学习
EECS127(综合课程:线性代数+机器学习+最优化,网上有作业答案)
他会涉及到
1.线性代数上面范数, SVD等
2.矩阵求导,向量求导等
3.一些基础的优化方法
也就是说,包含机器学习需要的大部分数学线代微积分前提知识,优化问题上给你打下不错的基础,在你后续学SVM,PCA,梯度下降等算法的时候一定会有很大的帮助。
Mathematics for Machine Learning(不错,有例子,简洁易懂)
Foundations of Applied Mathematics, Volume 1_ Mathematical Analysis-SIAM-Society for Industrial and Applied Mathematics(Jeffrey Humpherys, Tyler J. Jarvis, Emily J. Evans)
Vector Calculus, Linear Algebra, and Differential Forms_ A Unified Approach(John Hubbard_ Barbara Burke Hubbard)
进阶学习
- 一个是代数、一个是分析,往往不会两者都好好写一起,一般都是分析中用一用代数而已
- 其实微积分和线性代数的结合就是functional analysis啦
- 如果线代和数分已经OK了,我推荐你直接去看Evans的偏微分方程第一部分,完全没问题,之所以不再推荐相关的数分或者代数教材,是因为我认为他们的联系,应该在更高年级课程里体现出来。
Cheat Sheet
- Online Matrix Calculus(当矩阵变元是对称矩阵时,结果是错误的。(对于非对称的矩阵变元,可以放心使用))
- Calculus Cheat Sheet
- The Matrix Cookbook
- Harold’s Taylor Series Cheat Sheet
- 矩阵求导知识点总结
- WolframAlpha
其他资料
- 《Book: Apostol - Calculus Vol.2》( 側重multivariable,難度點到即止,初學友善。BTW他的Calculus, Vol. 1也不錯)
- 《A Visual Introduction to Differential Forms and Calculus on Manifolds-Fortney》(豆瓣说有一些typos,里面有关于多元微积分和线性代数的联系)
- 百度网盘:[ 永久笔记 ] -> [ wm-git-io ] -> [ matrix calculus]
笔记
B站:矩阵求导——标量函数的偏导数矩阵
(01:40) 符号说明
(02:30) 案例:标量函数对向量自变量的导数,自变量可以写成行或列的形式
(04:20) 分子和分母布局(谁是列向量就是谁的布局),并有举例
(05:24) 向量函数对向量的求导距离,利用到分子和分母布局
(06:45) 推导了∂[ x^Ta ]/∂x = ∂[ a^Tx]/∂x = a
这里这里的x和a都是向量,而 x^Ta 和 a^Tx 都是标量
(06:55) 推导了 ∂(x^TAx)/∂(x) = Ax + A^Tx
(09:05) 标量函数微分的几个性质
(11:11) 矩阵乘法不满足交换律,但是套上trace后,满足交换律了。且trace是个标量
总结:trace运算满足乘法交换律
tr(AB)=tr(BA)
tr(A)=tr(A^T)
tr(AB^T)=tr(B^TA)=tr(A^TB)=tr(BA^T)
tr(AB^T)=tr(B^TA)=tr(A^TB)=tr(BA^T); tr(AB)=tr(BA); tr(A)=tr(A^T)同时,通过 < The Matrix Cookbook >可知,tr(AB)=tr(BA), tr(A)=tr(A^T)
(12:56) 矩阵函数dFmxn(X)微分的几个性质
(13:59) 标量函数df(X)的全微分
(14:09) 标量函数全微分的3个常见结果
几个常见的标量函数全微分,有助于后续的求复杂偏导数的化简:
几种常见标量函数:f(X) = AXB; f(X) = |X|; f(X) = X^-1
(14:39) 矩阵行列式(f(X) = |X|)的微分推导。推导时用到了行列式展开成代数余子式方式,并用到伴随矩阵的性质。
(16:57) 逆矩阵(f(X) = X^-1)的微分推导。
(18:00) 标量函数全微分的一个重要推导
推导方法就是上面对df(X)写成矩阵形式,发现和trace有关
(20:08) 标量函数求偏导数矩阵的五个步骤
先要判断是不是标量函数!用到了上面的 标量函数全微分的一个重要推导 和 trace的一些性质
对标量f(X)而言 f(X)=tr(f(X)) -> df(X)=d(tr(f(X)))=tr(d(f(X)))
Step4中:对标量而言,trace和d是可以互换的:df(X)=d(tr(f(X)))=tr(d(f(X))):这是因为f(X)是标量,所以f(X)=tr(f(X));然后用Step4的结论,将df(X)写成Step3的方式(21:03) 案例1
(24:15) 案例2
(27:09) 案例3
(28:39) 案例4
Old and New Matrix Algebra Useful for Statistics
(P1) 6种标准型
其中的关于微分的理解:
(P3) 有一些常见标量函数的导数
根据tr(AB)=tr(BA);tr(AB^T)=tr(B^TA)=tr(A^TB)=tr(BA^T);tr(A)=tr(A^T)并结合规范型中的dy=tr(AdX)进行推导
用到一个重要结论:
对标量f(X)而言 f(X)=tr(f(X)) -> df(X)=d(tr(f(X)))=tr(d(f(X)))
,然后利用tr的一些交换律和已有的一些常见导数结果,一直化简到规范型tr(AdX),其中A就是偏导数的结果(应该有个transpose)(P4) 对称矩阵的偏导数
(P6) 讲了Kronecker product,用到了再详细理解
vec(ABC) = (C ′ ⊗ A)vec(B)
(P7) 讲了vec-transpose
It is essential for expressing derivatives of Kronecker products and is also useful for expressing multilinear forms.
举例如下:
假设我们有一个 2x2 的矩阵 dX,可以将其表示为:
根据之前的等式 ,我们可以进行计算和验证:
计算左边的表达式:
首先,计算矩阵 dX 的转置:
然后将这两个矩阵相乘:最后计算迹(trace):
计算右边的表达式:
将矩阵 dX 向量化:
求向量化后的矩阵的转置:
计算向量化后的向量自身的乘积:
因此,根据上述示例计算可得,左边的表达式等于右边的表达式,这进一步证实了该等式在这个 2x2 矩阵的情况下是成立的。
(P8) Multilinear forms,没看太懂
(P10) 讲了Hadamard product,用到再看
(P15) Hessian矩阵
(P16) 几个求Hessian的案例
(P17) 如果标量函数y(X)中的参数X是对称矩阵,则黑塞矩阵有特殊性质。不过这个推导我没看懂
The Matrix Calculus You Need For Deep Learning
(P6) gradient的介绍
雅克比矩阵的介绍
Note that there are multiple ways to represent the Jacobian. We are using the so-called numerator layout but many papers and software will use the denominator layout.
Jacobian的可能形式
同时参考:深度学习中的矩阵求导入门(一),可以加深矩阵导数的理解和Jacobian的理解