Loading [MathJax]/jax/output/CommonHTML/autoload/multiline.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >让向量、矩阵和张量的求导更简洁些吧

让向量、矩阵和张量的求导更简洁些吧

作者头像
用户7699929
发布于 2020-08-27 06:52:09
发布于 2020-08-27 06:52:09
2.1K0
举报
文章被收录于专栏:一刻AI一刻AI

本文是我在阅读 Erik Learned-Miller 的《Vector, Matrix, and Tensor Derivatives》时的记录。 本文的主要内容是帮助你学习如何进行向量、矩阵以及高阶张量(三维及以上的数组)的求导。并一步步引导你来进行向量、矩阵和张量的求导。

1 简化、简化,还是简化(重要的事情说三遍)

在求解涉及到数组的导数时,大部分的困难是因为试图一次性做太多事情。比如说同时求解多个组成部分的导数,在求和符号存在的情况下求解导数,或者使用链式法则。在有丰富的求导经验之前,同时执行所有的这些操作,我们就很容易出错。

1.1 将矩阵计算分解为单个标量的计算

为了简化给定的计算,我们将矩阵的求导分解为每个单独标量元素的表达式,每个表达式只包含标量变量。在写出单个标量元素与其他标量值的表达式后,就可以使用微积分来计算。这比同时进行矩阵的求和以及求导要容易一些。(看起来有点晕,没关系,看后面的案例就清晰了)。

例如:假设我们有一个 阶列向量 ,它是由 维矩阵 和 阶列向量 计算得到:

y=Wx

假设我们计算 关于 的导数。要完完全全的求解导数,就需要计算 中的每一个元素对 中的每一个元素的(偏)导数。那么在本例中,因为 中有 个元素, 中有 个元素,所以一个包含 次运算。

比如说,我们要计算 的第 3 个元素对 的第 7 个元素的(偏)导数,这就是向量中的一个标量对其他向量中的一个标量求导:

在求导之前,首先要做的就是写下计算 的公式, 根据矩阵-向量乘法的定义, 等于矩阵 中的第 3 行和向量 的点积。

现在,我们将原始的矩阵方程式(1)简化成了标量方程式。此时再进行求导就简单多了。

1.2 去除求和符号

虽然可以直接在上述公式中求导,但是在包含求和符号( )或者连乘符号( )的方程式中求导很容易出错。在求导之前,最好先去掉求和符号,把各项相加的表达式写出来,确保每一项不出错。去掉求和符号的表达式如下所示(下标从 1 开始):

在这个表达式中,我们专门把 凸显出来,这是因为这一项正是我们要求导的项。显然,可以看出在求 对 的偏导数时,我们只需要关心 这一项即可。因为其他项都不包含 ,它们对 的偏导数均为 0。接下来就很清晰了:

在求导过程中,只关注 中的一个量和 中的一个量,能够把求导过程简化很多。如果以后进行求导时遇到问题,采取这种方式可以帮助我们把问题简化至最基础的程度,这样便于理清思绪、找出问题所在。

1.2.1 完成求导:雅可比矩阵

我们的最终目标是计算出 中的每个元素对 中每个元素的导数,共计 个。

下面的这个雅克比矩阵直观的表示了这些导数:

对于公式 来说, 对 的偏导数可以用 来表示。实际上对于所有的 和 来说,都有

即上述的偏导数矩阵等于:

显然,就是 本身嘛。

因此,我们最终可以得出,对于 , 对于 的偏导数为:

2 行向量的情况

现在关于神经网络的第三方包特别多,在使用这些包的时候,要特别关注权值矩阵、数据矩阵等的排列。例如:数据矩阵 中包含非常多的向量,每个向量代表一个输入,那到底是矩阵中的每一行代表一个输入,还是每一列代表一个输入呢?

在第一节中,我们介绍的示例中使用的向量 是列向量。不过当 是行向量时,求导的基本思想是一致的。

2.1 示例 2

在本例中, 是一个 阶行向量,它是由 阶行向量 和 维矩阵 和计算得到:

虽然 和 的元素数量和之前的列向量是一样的,但矩阵 相当于第一节使用的矩阵 的转置。并且本例中是矩阵 左乘 ,而不是之前的右乘。

在本例中,我们同样可以写出 的表达式:

同样地,

注意本例中的 的下标和第一节中的相反。如果我们写出完整的雅克比矩阵的话, 我们仍然可以得出完整的求导结果:

3 维度大于 2 的情况 让我们考虑另一个密切相关的情形,如下式:

在这种情形中, 沿着一个坐标变化,而 沿着两个坐标变化。因此,整个导数自然是一个三维数组。一般避免使用“三维矩阵”这种术语,因为矩阵乘法和其他矩阵操作在三维数组中的定义尚不明确。

在处理三维数组时,试图去找到一种展示它们的方法可能带来不必要的麻烦。直接将结果定义为公式会更简单一些,这些公式可用于计算三维中的任何元素。

我们继续从计算标量的导数开始,比如 中的一个元素 和 中的一个元素 。首先要做的还是写出 的表达式:

显然, 在 的表达式中没有起到任何作用,因此,

同时, 对 中第 3 列元素的求导结果是非零的,正如 表达式中展示的那样。例如 对 的偏导数为:

一般来说,当 中元素的下标等于 中元素的第二个下标时,其偏导数就是非零的,其他情况则为零。整理如下:

除此之外,三维数组中其他的元素都是 0。如果我们用 来表示 对 的导数,

那么, ,其余的情况等于 0 此时如果我们使用一个二维数组 来表示三维数组 ,

可以看出,三维数组 中的全部数据实际上都可以使用二维数组 来存储,也就是说, 中的非零部分其实是二维的,而非三维的。 以更加紧凑的方式来表示导数数组对于神经网络的高效实现来说,意义重大。

4 多维数据

前面提到的实例中,不论是还是都只是一个向量。当需要多条数据时,例如多个向量组成一个矩阵时,又该如何计算呢?

我们假设每个单独的都是一个阶行向量,矩阵则是一个的二维数组。而矩阵和之前实例中的一样,为的矩阵。此时的表达式为:

是一个行列的矩阵。因此, 中的每一行给出一个与输入中对应行相关的行向量。按照之前的方式,可以写出如下表达式:

从这个方程式可以看出,对于偏导数,只有当的情况下不为0,其他情况均为0。因为 中的每一个元素都只对 与中对应的那一行求导, 与 的不同行元素之间的导数均为0。 还可以进一步看出,计算偏导数

与和 的行没关系。

实际上,矩阵包含了所有的偏导数,我们只需要根据上述公式来找到我们想要的某个具体地偏导数。

如果用来表示中的第行,用来表示中的第行,那么

5 链式法则

上面介绍了两个基本示例和求导方法,本节将上述方法和链式法则结合起来。

同样,假设和为两个列向量,

在计算对的导数时,我们可以直观地将两个矩阵和的乘积视为另一个矩阵,则

但是,我们想明确使用链式法则来定义中间量的过程,从而观察非标量求导是如何应用链式法则的。我们将中间量定义为

此时,

那么在求导时,我们使用链式法则:

为了确保确切地清楚该式的含义,我们还是使用每次只分析一个元素的方法,中的一个元素对中的一个元素的导数为:

链式法则的思想是当某个函数由复合函数表示,那么该复合函数的导师,可以用构成复合函数的各个函数的导数乘积来表示。

如果中有M个元素,那么上式可以写成:

回忆一下之前向量对向量的求导方法,我们可以发现,

整理可得:

至此,我们用和中的元素表示出了求导表达式。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一刻AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
独家解读 | 矩阵视角下的BP算法
有深度学习三巨头之称的YoshuaBengio、Yann LeCun、Geoffrey Hinton共同获得了2018年的图灵奖,得奖理由是他们在概念和工程上取得的巨大突破,使得深度神经网络成为计算的关键元素。其中九项选定的技术成就分别是:反向传播,玻尔兹曼机,提出卷积神经网络,序列的概率建模,高维词嵌入与注意力机制,生成对抗网络,对卷积神经网络的修正,改进反向传播算法,拓宽神经网络的视角。这其中两项成就技术与反向传播有关。
马上科普尚尚
2020/07/02
7730
独家解读 | 矩阵视角下的BP算法
深度学习500问——Chapter01:数学基础
深度学习通常又需要哪些数学基础?深度学习里的数学到底难在哪里?通常初学者都会有这些问题,在网络推荐及书本的推荐里,经常看到会列出一系列数学科目,比如微积分、线性代数、概率论、复变函数、数值计算、优化理论、信息论等等。这些数学知识有相关性,但实际上按照这样的知识范围来学习,学习成本会很久,而且会很枯燥。本章我们通过选举一些数学基础里容易混肴的一些概念作以介绍,帮助大家更好的理清这些易混肴概念之间的关系。
JOYCE_Leo16
2024/03/19
2720
深度学习500问——Chapter01:数学基础
「 矩阵求导」学习笔记
导数的定义:假设有一个函数f:\mathbb{R} \rightarrow \mathbb{R},其输入输出都是标量。如果f的导数存在,那么这个极限被定义为:
曼亚灿
2023/05/18
3860
「 矩阵求导」学习笔记
【AI系统】什么是微分
自动微分(Automatic Differentiation,AD)是一种对计算机程序进行高效准确求导的技术,一直被广泛应用于计算流体力学、大气科学、工业设计仿真优化等领域。
用户11307734
2024/12/06
570
【AI系统】微分计算模式
上一篇文章简单了解计算机中常用几种微分方式。本文将深入介绍 AI 框架离不开的核心功能:自动微分。
用户11307734
2024/12/06
920
斯坦福CS231N深度学习与计算机视觉第五弹:反向传播与它的直观理解
1.引言 其实一开始要讲这部分内容,我是拒绝的,原因是我觉得有一种写高数课总结的感觉。而一般直观上理解反向传播算法就是求导的一个链式法则而已。但是偏偏理解这部分和其中的细节对于神经网络的设计和调整优化
大数据文摘
2018/05/24
4950
100天搞定机器学习|day38 反向传播算法推导
上集我们学习了反向传播算法的原理,今天我们深入讲解其中的微积分理论,展示在机器学习中,怎么理解链式法则。
统计学家
2019/08/06
3440
100天搞定机器学习|day38 反向传播算法推导
深度学习与CV教程(4) | 神经网络与反向传播
本系列为 斯坦福CS231n 《深度学习与计算机视觉(Deep Learning for Computer Vision)》的全套学习笔记,对应的课程视频可以在 这里 查看。更多资料获取方式见文末。
ShowMeAI
2022/05/30
8010
深度学习与CV教程(4) | 神经网络与反向传播
张量求导和计算图
这是“标量对向量”求导数,行向量或列向量都不重要,向量只是一组标量的表现形式,重要的是导数“d组合/d股票”的“股票”的向量类型一致 (要不就是行向量,要不就是列向量)。
用户5753894
2019/07/05
3K2
张量求导和计算图
机器之心最干的文章:机器学习中的矩阵、向量求导
机器之心专栏 作者:七月 本文的目标读者是想快速掌握矩阵、向量求导法则的学习者,主要面向矩阵、向量求导在机器学习中的应用。因此,本教程而非一份严格的数学教材,而是希望帮助读者尽快熟悉相关的求导方法并在实践中应用。另外,本教程假定读者熟悉一元函数的求导。 本文公式太多,微信上展示会有一些问题。所以本文适合读者了解矩阵、向量求导,而详细地学习与分析请下载本文的PDF版。 PDF 下载地址:https://pan.baidu.com/s/1pKY9qht 所谓矩阵求导,本质上只不过是多元函数求导,仅仅是把把函数的
机器之心
2018/05/10
3.4K0
用逻辑回归对用户分类 (理论+实战)
如果你在运营一个2C的平台,那么你肯定关心用户流失的问题。腾讯有个产品叫信鸽Pro,它能够通过对用户往期行为的挖掘,预测用户潜在的流失(付费)行为,进而实现精准营销。据说,腾讯自己的手游就是用这个系统做用户分析的。
Stanley Sun
2019/09/23
1.3K1
用逻辑回归对用户分类 (理论+实战)
矩阵求导术(下)
本文承接上篇 https://zhuanlan.zhihu.com/p/24709748,来讲矩阵对矩阵的求导术。使用小写字母x表示标量,粗体小写字母 表示列向量,大写字母X表示矩阵。矩阵对矩阵的求导采用了向量化的思路,常应用于二阶方法求解优化问题。
Datawhale
2019/11/18
8170
矩阵和向量求导入门
本文主要介绍在机器学习公式推导过程中经常会用到的矩阵和向量求导入门知识。之前的文章也提过,本科的高数和线性代数课程中一般都没有介绍这部分知识,于是可能就有朋友会担心矩阵求导是不是很难很高深,其实完全不用担心,理解它只需要了解导数和矩阵的概念就足够了。
阿波张
2020/07/27
1K0
深度学习中的参数梯度推导(一)下篇
在《深度学习中的参数梯度推导(一)上篇》中,我们总结了各常见(向量对矩阵,矩阵对向量)的导数定义。我们还学习了矩阵微分和矩阵导数的关系,以及一些常见的矩阵微分性质。在本篇(下篇)将介绍矩阵导数中的链式法则以及专门针对标量对矩阵/向量求导的核心方法-迹技巧。最后,我们简单演习一下如何用矩阵求导来得到神经网络中的参数的梯度。
灯塔大数据
2020/08/04
1.6K0
深度学习中的参数梯度推导(一)下篇
反向传播和其他微分算法
当我们使用前馈神经网络接收输入 ,并产生输出 时,信息通过网络前向流动。输入x并提供初始信息,然后传播到每一层的隐藏单元,最终产生输出 。这称之为前向传播。在训练过程中,前向传播可以持续前向直到它产生一个标量代价函数 。反向传播算法,经常简称为backprop,允许来自代价函数的信息通过网络向后流动,以便计算梯度。
狼啸风云
2019/08/18
1.9K0
矩阵微分布局
在数学中, 矩阵微积分是多元微积分的一种特殊表达,尤其是在矩阵空间上进行讨论的时候。它把单个函数对多个变量或者多元函数对单个变量的偏导数写成向量和矩阵的形式,使其可以被当成一个整体被处理。
hotarugali
2022/03/10
4410
【AI系统】计算图与自动微分
自动求导应用链式法则求某节点对其他节点的雅可比矩阵,它从结果节点开始,沿着计算路径向前追溯,逐节点计算雅可比。将神经网络和损失函数连接成一个计算图,则它的输入、输出和参数都是节点,可利用自动求导求损失值对网络参数的雅可比,从而得到梯度。
用户11307734
2024/12/06
1290
斯坦福CS231n - CNN for Visual Recognition(4)-lecture4反向传播
  在神经网络中,对应的是损失函数LL,输入xx包含训练数据和神经网络的权重。比如,损失函数为SVMSVM,输入包括了训练数据xi,yix_i,y_i、权重WW和偏差bb。而训练集是给定的,权重则是可以改变的变量。因此,即使能用反向传播计算输入数据xix_i上的梯度,但在实践为了进行参数更新,通常也只计算参数(比如W,bW,b)的梯度。当然,xix_i的梯度有时仍然有用,比如将神经网络所做的事情可视化,以便于直观理解时。
李智
2018/08/03
6120
斯坦福CS231n - CNN for Visual Recognition(4)-lecture4反向传播
反向传播算法:定义,概念,可视化
通常,当我们使用神经网络时,我们输入某个向量x,然后网络产生一个输出y,这个输入向量通过每一层隐含层,直到输出层。这个方向的流动叫做正向传播。
deephub
2020/09/23
8310
反向传播算法:定义,概念,可视化
深度学习利器之自动微分(1)
本文和下文以 Automatic Differentiation in Machine Learning: a Survey 这篇论文为基础,逐步分析自动微分这个机器学习的基础利器。
罗西的思考
2021/10/18
1.3K1
深度学习利器之自动微分(1)
推荐阅读
相关推荐
独家解读 | 矩阵视角下的BP算法
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文