java二维矩阵怎么进行转置_向量、矩阵和张量的导数

3792700890b8c2a119a9c43ca393a632.png

原文: http://cs231n.stanford.edu/vecDerivs.pdf

本文让大家更好地学习使用向量、矩阵和高阶张量的求导。

1 简化,简化再简化

很多关于数组的求导的困惑来自于一次性想做太多事。这些事包括同时对多个部分求导,和式的求导,和应用链式法则。同时做这么多事情,至少在我们还没有足够熟练之前,那就很容易会出现错误。

1.1 对每个部分展开式子成显式求和及等式

为了简化一个给定的计算,通常将对于输出的一个简单的标量元素使用标量变量展开成显式公式。一旦我们对于输出的单个标量元素有了一个显式的用其他标量值表达的公式后,我们可以利用基本的微积分知识进行求导了,这里就避免将复杂的矩阵数学,求和及求导同时进行了。

例子. 假设我们有一个列向量

其长度为

1.2.1 雅克比(Jaccobian)矩阵

我们最初的愿望是计算

每个部分关于
的每个部分的导数,注意到会有
这么多对。他们可以被写成一个矩阵,形如:

这个矩阵被成为雅克比矩阵。

注意到对于等式:

关于
的偏导数就是
。如果你观察一些其他的部分,你也能发现,对于所有的
.

这意味着偏导数的矩阵为:

所以,其实就是

本身。

我们现在可以给出结论:对于

,我们有
.

2 行向量

在使用不同的神经网络库的时候需要慎重对待权重矩阵、数据矩阵等的排列。例如,如果一个数据矩阵

包含很多不同的向量,每个向量代表一个输入,要弄清楚每个数据向量是数据矩阵的行还是列。

在上节例子中,我们处理的向量

是列向量。然后,你可以使用类似的方法解决行向量情形的求导。

2.1 例2

为有
个元素构成的行向量,由另一个有
个元素的行向量
矩阵
相乘而得:

尽管两个向量的元素事相同的,但这里的矩阵则是前面例1的矩阵的转置。我们现在左乘

,所以必须转置才能匹配。

这里我们写成:

,因此:

这和上面的例子不同的就是坐标对换了。不过如果写出整个雅克比矩阵,我们仍然能得到:

.

3 处理超过二维的情形

现在我们来试试另一个相关的问题,计算:

这个例子中

沿着一个坐标轴变化,而
是两个坐标轴。所以,整个导数就会包含在三维数组中。我们不使用三维矩阵这样的说法,因为在其上并没有良好定义的矩阵乘法及其他运算。

处理三维数组,找到展示他们的方式可能会添上更多的麻烦而不是便利。所以,我们应该简单地定义结果作为公式,这个公式可以在我们想要针对目标三维数组计算结果时候直接使用。

让我们再来计算一个标量导数,

的一个元素
的一个元素
. 我们写下相应的计算式。用标量值来表示
,给出
在其中扮演的角色。

然而,我们在这个过程中看到

并没有什么作用,因为

换言之,

不过,

关于
的第三列元素的偏导数肯定是非零的。例如,
关于
的导数为
,这个从上面的展开式很容易得出。

一般情况下,当

组成部分的索引与
的第二个索引相同时,对应的导数将会非零,否则全为零。我们可以写成这样:
,其他三维数组的元素就是零。若令
为三维数组表示
关于
的导数,其中:
那么
其他
的项均为零。

最后,如果我们定义新的二维数组

,我们可以看到关于
所有需要的信息都已经存放在
中了,
的非平凡部分实际上就是二维的,而不是三维的。

将导数矩阵的重要部分以一种紧致的方式存放是神经网络高效实现中非常关键的。

4 多数据点

重复练习前面的例子,使用

多个样例形成一个矩阵
。让我们假设每个
是一个行向量,其长度为
,所以
就是
列的二维数组。
列的矩阵。
,形状为
列。所以
的每行将会给出一个关联于输入
对应行的行向量。

根据之前的经验,我们写下给定输出的表示,

.

我们可以轻易发现,在导数

中,除非
其他均为零。因为Y的每个组成部分仅使用
对应行进行计算得出,在
的不同行部分之间的导数都是零。

另外,我们发现

不依赖于我们在比对的
哪一行。

实际上,矩阵

包含了所有这些偏导数,我们仅仅需要记住根据上式进行索引,获得我们想要的指定偏导数。

如果我们令

的第
行,令
的第
行,那么我们有:
.

5 向量和矩阵中组合链式法则

我们已经解决了一些基本的例子,现在把这些想法组合上链式法则。假设

为列向量,让我们从下面的方程开始:
,目标是计算
关于
的导数。我们观察到
其实就是另一个矩阵,记作
,所以

不过,我们想要使用链式法则的过程来定义中间结果,所以我们可以看到如何在非标量导数中的应用。

我们定义中间结果

,于是就有
.

我们可以使用链式法则写成

.

但是,我们应该对右侧如何分解呢?我们使用链式法则的方法是将 y 的改变量关于每个标量中间变量,关于 x 的标量中间变量。特别地,如果

的部分,那么我们写成

回想一下我们前面的向量关于一个向量的导数求法:

就是
,而
就是
. 所以我们可以写成

这其实就是

的组成表达式,我们最初的答案。

总结一下,我们可以在向量和矩阵的导数计算中使用链式法则

  1. 清晰地陈述中间结果和用来表达他们的变量
  2. 对最终导数的单独的组成部分表达链式法则
  3. 对在链式法则中的中间结果合理地求和
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值