原文: http://cs231n.stanford.edu/vecDerivs.pdf
本文让大家更好地学习使用向量、矩阵和高阶张量的求导。
1 简化,简化再简化
很多关于数组的求导的困惑来自于一次性想做太多事。这些事包括同时对多个部分求导,和式的求导,和应用链式法则。同时做这么多事情,至少在我们还没有足够熟练之前,那就很容易会出现错误。
1.1 对每个部分展开式子成显式求和及等式
为了简化一个给定的计算,通常将对于输出的一个简单的标量元素使用标量变量展开成显式公式。一旦我们对于输出的单个标量元素有了一个显式的用其他标量值表达的公式后,我们可以利用基本的微积分知识进行求导了,这里就避免将复杂的矩阵数学,求和及求导同时进行了。
例子. 假设我们有一个列向量
1.2.1 雅克比(Jaccobian)矩阵
我们最初的愿望是计算
这个矩阵被成为雅克比矩阵。
注意到对于等式:
这意味着偏导数的矩阵为:
所以,其实就是
我们现在可以给出结论:对于
2 行向量
在使用不同的神经网络库的时候需要慎重对待权重矩阵、数据矩阵等的排列。例如,如果一个数据矩阵
在上节例子中,我们处理的向量
2.1 例2
令
尽管两个向量的元素事相同的,但这里的矩阵则是前面例1的矩阵的转置。我们现在左乘
这里我们写成:
这和上面的例子不同的就是坐标对换了。不过如果写出整个雅克比矩阵,我们仍然能得到:
3 处理超过二维的情形
现在我们来试试另一个相关的问题,计算:
这个例子中
处理三维数组,找到展示他们的方式可能会添上更多的麻烦而不是便利。所以,我们应该简单地定义结果作为公式,这个公式可以在我们想要针对目标三维数组计算结果时候直接使用。
让我们再来计算一个标量导数,
然而,我们在这个过程中看到
换言之,
不过,
一般情况下,当
最后,如果我们定义新的二维数组
将导数矩阵的重要部分以一种紧致的方式存放是神经网络高效实现中非常关键的。
4 多数据点
重复练习前面的例子,使用
根据之前的经验,我们写下给定输出的表示,
我们可以轻易发现,在导数
另外,我们发现
实际上,矩阵
如果我们令
5 向量和矩阵中组合链式法则
我们已经解决了一些基本的例子,现在把这些想法组合上链式法则。假设
不过,我们想要使用链式法则的过程来定义中间结果,所以我们可以看到如何在非标量导数中的应用。
我们定义中间结果
我们可以使用链式法则写成
但是,我们应该对右侧如何分解呢?我们使用链式法则的方法是将 y 的改变量关于每个标量中间变量,关于 x 的标量中间变量。特别地,如果
回想一下我们前面的向量关于一个向量的导数求法:
这其实就是
总结一下,我们可以在向量和矩阵的导数计算中使用链式法则
- 清晰地陈述中间结果和用来表达他们的变量
- 对最终导数的单独的组成部分表达链式法则
- 对在链式法则中的中间结果合理地求和