本文是我在阅读Erik Learned-Miller的《Vector, Matrix, and Tensor Derivatives》时的记录,点此下载。
本文的主要内容是帮助你学习如何进行向量、矩阵以及高阶张量(三维及以上的数组)的求导。并一步步引导你来进行向量、矩阵和张量的求导。
1 简化、简化,还是简化(重要的事情说三遍) 在求解涉及到数组的导数时,大部分的困难是因为试图一次性做太多事情。比如说同时求解多个组成部分的导数,在求和符号存在的情况下求解导数,或者使用链式法则。在有丰富的求导经验之前,同时执行所有的这些操作,我们就很容易出错。
1.1 将矩阵计算分解为单个标量的计算 为了简化给定的计算,我们将矩阵的求导分解为每个单独标量元素的表达式,每个表达式只包含标量变量。在写出单个标量元素与其他标量值的表达式后,就可以使用微积分来计算。这比同时进行矩阵的求和以及求导要容易一些。(看起来有点晕,没关系,看后面的案例就清晰了)。
In order to simplify a given calculation, it is often useful to write out the explicit formula for a single scalar element of the output in terms of nothing but scalar variables. Once one has an explicit formula for a single scalar element of the output in terms of other scalar values, then one can use the calculus that you used as a beginner, which is much easier than trying to do matrix math, summations, and derivatives all at the same time. 例如: 假设我们有一个
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 阶列向量
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 ,它是由
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 维矩阵
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 和
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 阶列向量
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 计算得到:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 假设我们计算
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 关于
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的导数。要完完全全的求解导数,就需要计算
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的每一个元素对
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的每一个元素的(偏)导数。那么在本例中,因为
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中有
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 个元素,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中有
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 个元素,所以一个包含
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 次运算。
比如说,我们要计算
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的第3个元素对
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的第7个元素的(偏)导数,这就是向量中的一个标量对其他向量中的一个标量求导:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 在求导之前,首先要做的就是写下计算
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的公式, 根据矩阵-向量乘法的定义,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 等于矩阵
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的第3行和向量
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的点积。
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 现在,我们将原始的矩阵方程式(1)简化成了标量方程式。此时再进行求导就简单多了。
1.2 去除求和符号 虽然可以直接在公式(2)中求导,但是在包含求和符号(
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 )或者连乘符号(
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 )的方程式中求导很容易出错。在求导之前,最好先去掉求和符号,把各项相加的表达式写出来,确保每一项不出错。去掉求和符号的表达式如下所示(下标从1开始):
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 在这个表达式中,我们专门把
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 凸显出来,这是因为这一项正是我们要求导的项。显然,可以看出在求
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 对
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的偏导数时,我们只需要关心
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 这一项即可。因为其他项都不包含
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 ,它们对
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的偏导数均为0。接下来就很清晰了:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 在求导过程中,只关注
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的一个量和
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的一个量,能够把求导过程简化很多。如果以后进行求导时遇到问题,采取这种方式可以帮助我们把问题简化至最基础的程度,这样便于理清思绪、找出问题所在。
1.2.1 完成求导:雅可比矩阵 我们的最终目标是计算出
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的每个元素对
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中每个元素的导数,共计
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 个。下面的这个雅克比矩阵直观的表示了这些导数:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 对于公式
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 来说,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 对
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的偏导数可以用
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 来表示。实际上对于所有的
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 和
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 来说,都有
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 即上述的偏导数矩阵等于:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 显然,就是
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 本身嘛。
因此,我们最终可以得出,对于
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 ,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 对于
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的偏导数为:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 2 行向量的情况 现在关于神经网络的第三方包特别多,在使用这些包的时候,要特别关注权值矩阵、数据矩阵等的排列。例如:数据矩阵
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中包含非常多的向量,每个向量代表一个输入,那到底是矩阵中的每一行代表一个输入,还是每一列代表一个输入呢?
在第一节中,我们介绍的示例中使用的向量
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 是列向量。不过当
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 是行向量时,求导的基本思想是一致的。
2.1 示例2 在本例中,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 是一个
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 阶行向量,它是由
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 阶行向量
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 和
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 维矩阵
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 和计算得到:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 虽然
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 和
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的元素数量和之前的列向量是一样的,但矩阵
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 相当于第一节使用的矩阵
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的转置。并且本例中是矩阵
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 左乘
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 ,而不是之前的右乘。
在本例中,我们同样可以写出
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的表达式:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 同样地,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 注意本例中的
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的下标和第一节中的相反。如果我们写出完整的雅克比矩阵的话, 我们仍然可以得出完整的求导结果:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 3 维度大于2的情况 让我们考虑另一个密切相关的情形,如下式:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 在这种情形中,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 沿着一个坐标变化,而
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 沿着两个坐标变化。因此,整个导数自然是一个三维数组。一般避免使用“三维矩阵”这种术语,因为矩阵乘法和其他矩阵操作在三维数组中的定义尚不明确。
在处理三维数组时,试图去找到一种展示它们的方法可能带来不必要的麻烦。直接将结果定义为公式会更简单一些,这些公式可用于计算三维中的任何元素。
我们继续从计算标量的导数开始,比如
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的一个元素
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 和
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的一个元素
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 。首先要做的还是写出
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的表达式:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 显然,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 在
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的表达式中没有起到任何作用,因此,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 同时,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 对
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中第3列元素的求导结果是非零的,正如公式(5)中展示的那样。例如
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 对
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的偏导数为:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 一般来说,当
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中元素的下标等于
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中元素的第二个下标时,其偏导数就是非零的,其他情况则为零。整理如下:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 除此之外,三维数组中其他的元素都是0。如果我们用
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 来表示
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 对
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的导数,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 那么,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 ,其余的情况等于0
此时如果我们使用一个二维数组
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 来表示三维数组
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 ,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 可以看出,三维数组
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的全部数据实际上都可以使用二维数组
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 来存储,也就是说,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的非零部分其实是二维的,而非三维的。
以更加紧凑的方式来表示导数数组对于神经网络的高效实现来说,意义重大。
4 多维数据 前面提到的实例中,不论是
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 还是
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 都只是一个向量。当需要多条数据时,例如多个向量
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 组成一个矩阵
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 时,又该如何计算呢?
我们假设每个单独的
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 都是一个
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 阶行向量,矩阵
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 则是一个
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的二维数组。而矩阵
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 和之前实例中的一样,为
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的矩阵。此时
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的表达式为:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 是一个
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 行
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 列的矩阵。因此,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的每一行给出一个与输入
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中对应行相关的行向量。按照之前的方式,可以写出如下表达式:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 从这个方程式可以看出,对于偏导数
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 ,只有当
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的情况下不为0,其他情况均为0。因为
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的每一个元(X_{i,:})素都只对与
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中对应的那一行求导,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 与
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的不同行元素之间的导数均为0。
还可以进一步看出,计算偏导数
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 与
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 和
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的行没关系。
实际上,矩阵
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 包含了所有的偏导数,我们只需要根据公式(8)来找到我们想要的某个具体地偏导数。
如果用
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 来表示
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的第
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 行,用
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 来表示
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的第
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 行,那么
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 5 链式法则 上面介绍了两个基本示例和求导方法,本节将上述方法和链式法则结合起来。同样,假设
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 和
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 为两个列向量,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 在计算
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 对
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的导数时,我们可以直观地将两个矩阵
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 和
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 的乘积视为另一个矩阵
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 ,则
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 但是,我们想明确使用链式法则来定义中间量的过程,从而观察非标量求导是如何应用链式法则的。我们将中间量定义为
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 此时,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 那么在求导时,我们使用链式法则:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 为了确保确切地清楚该式的含义,我们还是使用每次只分析一个元素的方法,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的一个元素对
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的一个元素的导数为:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 链式法则的思想是当某个函数由复合函数表示,那么该复合函数的导师,可以用构成复合函数的各个函数的导数乘积来表示。
如果
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中有M个元素,那么上式可以写成:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 回忆一下之前向量对向量的求导方法,我们可以发现,
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 整理可得:
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 至此,我们用
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 和
二元函数对xy同时求导_让向量、矩阵和张量的求导更简洁些吧 中的元素表示出了求导表达
欢迎关注我的公众号:一刻AI
http://weixin.qq.com/r/kChDW_bEAbt_raI4932C (二维码自动识别)