当前位置:网站首页>机器学习中的矩阵向量求导
机器学习中的矩阵向量求导
2022-07-23 05:38:00 【我是女生,我不做程序媛】
向量对向量求导的链式法则
假设多个向量存在依赖关系,比如三个向量𝐱→𝐲→𝐳存在依赖关系,则我们有下面的链式求导法则: ∂ 𝐳 ∂ 𝐱 = ∂ 𝐳 ∂ 𝐲 ∂ 𝐲 ∂ 𝐱 \frac{∂𝐳}{∂𝐱}=\frac{∂𝐳}{∂𝐲}\frac{∂𝐲}{∂𝐱} ∂x∂z=∂y∂z∂x∂y
该法则也可以推广到更多的向量依赖关系。但是要注意的是要求所有有依赖关系的变量都是向量,如果有一个𝐘是矩阵,,比如是𝐱→𝐘→𝐳, 则上式并不成立。
从矩阵维度相容的角度也很容易理解上面的链式法则,假设𝐱,𝐲,𝐳分别是𝑚,𝑛.𝑝维向量,则求导结果 ∂ 𝐳 ∂ 𝐱 \frac{∂𝐳}{∂𝐱} ∂x∂z是一个𝑝×𝑚的雅克比矩阵,而右边 ∂ 𝐳 ∂ 𝐲 \frac{∂𝐳}{∂𝐲} ∂y∂z是一个𝑝×𝑛的雅克比矩阵,∂𝐲∂𝐱是一个𝑛×𝑚的矩阵,两个雅克比矩阵的乘积维度刚好是𝑝×𝑚,和左边相容。
标量对多个向量的链式求导法则
最后求导的目标是标量时,无法使用上一节的链式求导法则。比如𝐱,𝐲分别是𝑚,𝑛维向量, 那么 ∂ 𝑧 ∂ 𝐱 \frac{∂𝑧}{∂𝐱} ∂x∂z的求导结果是一个𝑚×1的向量, 而 ∂ 𝑧 ∂ 𝐲 \frac{∂𝑧}{∂𝐲} ∂y∂z是一个𝑛×1的向量, ∂ 𝐲 ∂ 𝐱 \frac{∂𝐲}{∂𝐱} ∂x∂y是一个𝑛×𝑚的雅克比矩阵,右边的向量和矩阵是没法直接乘的。
但是假如我们把标量求导的部分都做一个转置,那么维度就可以相容了,也就是:
( ∂ 𝑧 ∂ 𝐱 ) 𝑇 = ( ∂ 𝑧 ∂ 𝐲 ) 𝑇 ∂ 𝐲 ∂ 𝐱 (\frac{∂𝑧}{∂𝐱})^𝑇=(\frac{∂𝑧}{∂𝐲})^𝑇\frac{∂𝐲}{∂𝐱} (∂x∂z)T=(∂y∂z)T∂x∂y
因此两边转置我们可以得到标量对多个向量求导的链式法则:
∂ 𝑧 ∂ 𝐱 = ( ∂ 𝐲 ∂ 𝐱 ) 𝑇 ∂ 𝑧 ∂ 𝐲 \frac{∂𝑧}{∂𝐱}=(\frac{∂𝐲}{∂𝐱})^𝑇\frac{∂𝑧}{∂𝐲} ∂x∂z=(∂x∂y)T∂y∂z
推广到𝐲1→𝐲2→…→𝐲𝐧→𝑧,则其链式求导表达式可以表示为:
∂ 𝑧 ∂ 𝐲 1 = ( ∂ 𝐲 𝐧 ∂ 𝐲 𝐧 − 1 ∂ 𝐲 𝐧 − 1 ∂ 𝐲 𝐧 − 2 . . . ∂ 𝐲 2 ∂ 𝐲 1 ) 𝑇 ∂ 𝑧 ∂ 𝐲 𝐧 \frac{∂𝑧}{∂𝐲_1}=(\frac{∂𝐲_𝐧}{∂𝐲_{𝐧−1}}\frac{∂𝐲_{𝐧−1}}{∂𝐲_{𝐧−2}}...\frac{∂𝐲_2}{∂𝐲_1})^𝑇\frac{∂𝑧}{∂𝐲_𝐧} ∂y1∂z=(∂yn−1∂yn∂yn−2∂yn−1...∂y1∂y2)T∂yn∂z
标量对多个矩阵的链式求导法则
矩阵对矩阵的求导是比较复杂的定义,因此没有全局的标量对矩阵的链式求导法则,但是对于一些线性关系的链式求导,我们还是可以得到一些有用的结论的。
我们来看这个常见问题:𝐴,𝑋,𝐵,𝑌都是矩阵,𝑧是标量,其中𝑧=𝑓(𝑌),𝑌=𝐴𝑋+𝐵,我们要求出 ∂ 𝑧 ∂ 𝑋 \frac{∂𝑧}{∂𝑋} ∂X∂z,这个问题在机器学习中是很常见的。
𝑧 = 𝑓 ( 𝑌 ) , 𝑌 = 𝐴 𝑋 + 𝐵 → ∂ 𝑧 ∂ 𝑋 = 𝐴 𝑇 ∂ 𝑧 ∂ 𝑌 𝑧=𝑓(𝑌),𝑌=𝐴𝑋+𝐵→\frac{∂𝑧}{∂𝑋}=𝐴^𝑇\frac{∂𝑧}{∂𝑌} z=f(Y),Y=AX+B→∂X∂z=AT∂Y∂z
在𝐱是一个向量的时候也成立,即:
𝑧 = 𝑓 ( 𝐲 ) , 𝐲 = 𝐴 𝐱 + 𝐛 → ∂ 𝑧 ∂ 𝐱 = 𝐴 𝑇 ∂ 𝑧 ∂ 𝐲 𝑧=𝑓(𝐲),𝐲=𝐴𝐱+𝐛→\frac{∂𝑧}{∂𝐱}=𝐴^𝑇\frac{∂𝑧}{∂𝐲} z=f(y),y=Ax+b→∂x∂z=AT∂y∂z
如果要求导的自变量在左边,线性变换在右边,也有类似稍有不同的结论如下,证明方法是类似的,这里直接给出结论:
𝑧 = 𝑓 ( 𝑌 ) , 𝑌 = 𝑋 𝐴 + 𝐵 → ∂ 𝑧 ∂ 𝑋 = ∂ 𝑧 ∂ 𝑌 𝐴 𝑇 𝑧=𝑓(𝑌),𝑌=𝑋𝐴+𝐵→\frac{∂𝑧}{∂𝑋}=\frac{∂𝑧}{∂𝑌}𝐴^𝑇 z=f(Y),Y=XA+B→∂X∂z=∂Y∂zAT
𝑧 = 𝑓 ( 𝐲 ) , 𝐲 = 𝑋 𝐚 + 𝐛 → ∂ 𝑧 ∂ 𝐗 = ∂ 𝑧 ∂ 𝐲 𝑎 𝑇 𝑧=𝑓(𝐲),𝐲=𝑋𝐚+𝐛→\frac{∂𝑧}{∂𝐗}=\frac{∂𝑧}{∂𝐲}𝑎^𝑇 z=f(y),y=Xa+b→∂X∂z=∂y∂zaT
使用好上述四个结论,对于机器学习尤其是深度学习里的求导问题可以非常快的解决,大家可以试一试。
转载自:https://www.cnblogs.com/pinard/p/10825264.html
边栏推荐
猜你喜欢
随机推荐
"The six programming languages I want most!"
Dynamic memory management
请求数据获取与响应
【无标题】
Activiti工作流使用之Activiti-app的安装及流程创建
【无标题】
pycharm占用c盘
十年架构五年生活-02第一份工作
WebSocket长连接
adb常用命令
Thing JS notes
Activiti工作流使用之项目实例
Web server failed to start. Port 8080 was already in use.
Markdown common syntax records
[ROS advanced chapter] Lesson 8 syntax explanation of URDF file
Mysql-8.0.28 user operation or user permission Operation
使用聚类分析 构建信用卡高风险客户识别模型
sprintboot中使用缓存时候,数据加载不出来
3DMAX first skin brush weights, then attach merge
2.启动函数返回值的剖析

![[Anaconda environmental management and package management]](/img/cc/9f15282eabf0eee5e9f28b4f62f1e2.png)







