链式法则
2021-9-13
| 2023-8-6
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
很多时候,求导的自变量和因变量直接有复杂的多层链式求导的关系,此时微分法使用起来也有些麻烦。需要一些简洁的方法。
 
向量对向量求导的链式法则
假设多个向量存在依赖关系,比如三个向量 存在依赖关系,则有下面的链式求导法则:
该法则也可以推广到更多的向量依赖关系。但是要注意的是要求所有有依赖关系的变量都是向量,如果有一个是矩阵,,比如是 , 则上式并不成立。
 
从矩阵维度相容的角度也很容易理解上面的链式法则,假设 分别是 维向量,则求导结果 是一个的雅克比矩阵,而右边 是一个 的雅克比矩阵, 是一个的矩阵,两个雅克比矩阵的乘积维度刚好是 ,和左边相容。
 

标量对多个向量的链式求导法则

机器学习算法中,最终要优化的一般是一个标量损失函数,因此最后求导的目标是标量,无法使用上面的链式求导法则,比如2向量,最后到1标量的依赖关系: ,此时很容易发现维度不相容。
假设 分别是 维向量,那么 的求导结果是一个 的向量, 而 是一个 的向量, 是一个 的雅克比矩阵,右边的向量和矩阵是没法直接乘的。
 
但是假如把标量求导的部分都做一个转置,那么维度就可以相容了,也就是:
但是毕竟要求导的是 ,而不是它的转置,因此两边转置可以得到标量对多个向量求导的链式法则:
如果是标量对更多的向量求导,比如 ,则其链式求导表达式可以表示为:
这里给一个最小二乘法求导的例子,最小二乘法优化的目标是最小化损失函数:
优化的损失函数 是一个标量,而模型参数是一个向量,期望求导,并求出导数等于0时候的极值点。假设向量 ,则 存在链式求导的关系,因此:
其中最后一步转换使用了如下求导公式:
 

标量对多个矩阵的链式求导法则

假设有这样的依赖关系: ,那么有:
这里没有给出基于矩阵整体的链式求导法则,主要原因是矩阵对矩阵的求导是比较复杂的定义,目前也未涉及。因此只能给出对矩阵中一个标量的链式求导方法。这个方法并不实用,因为我们并不想每次都基于定义法来求导最后再去排列求导结果。
虽然没有全局的标量对矩阵的链式求导法则,但是对于一些线性关系的链式求导,还是可以得到一些有用的结论的。
看一·个常见问题: 都是矩阵, 是标量,其中 ,要求出 ,这个问题在机器学习中是很常见的。此时,并不能直接整体使用矩阵的链式求导法则,因为矩阵对矩阵的求导结果不好处理。
这里回归初心,使用定义法试一试,先使用上面的标量链式求导公式:
再来看看后半部分的导数:
其中时为1,否则为0
那么最终的标签链式求导公式转化为:
即矩阵 的第 行和 的第 列的内积。排列成矩阵即为:
总结下就是:
这结论在 是一个向量的时候也成立,即:
如果要求导的自变量在左边,线性变换在右边,也有类似稍有不同的结论如下,证明方法是类似的,这里直接给出结论:
  • Scikit-Learn
  • 微分法矩阵对矩阵的求导
    目录