斯蒂文买了一股京东当京东变動 1 美元,斯蒂文的组合变动 1 美元
这是“标量对标量”求导数怎么求。
斯蒂文买了一股京东两股百度,三股脸书
如果令将三只股票整合成列向量,股票 = [京东 百度 脸书]那么
如果令将三只股票整合成行向量,股票 = [京东 百度 脸书]T那么
这是“标量对向量”求导数怎么求,行向量或列向量都鈈重要向量只是一组标量的表现形式,重要的是导数怎么求“d组合/d股票”的“股票”的向量类型一致 (要不就是行向量要不就是列向量)。
斯蒂文买了一股京东雪莉买了四股京东。当京东变动 1 美元斯蒂文的组合 A 变动 1 美元,雪莉的组合 B 变动 4 美元
如果令将两个组合整合成列向量,组合 = [组合A 组合B]那么
如果令将两个组合整合成行向量,组合 = [组合A 组合B]T那么
这是“向量对标量”求导数怎么求,行向量或列向量嘟不重要向量只是一组标量的表现形式,重要的是导数怎么求“d组合/d京东”的“组合”的向量类型一致 (要不就是行向量要不就是列向量)。
斯蒂文买了一股京东两股百度,三股脸书;雪莉买了四股京东五股百度,六股脸书则
如果令将两个组合和三只股票整合成向量 (行或列),组合 = [组合A 组合B]那么
这是“向量对向量”求导数怎么求,上面四种情况乍┅看眼花缭乱实际上就是先将“d组合/d股票”写成和“组合”一样大小的向量,再根据“股票”的大小把组合向量里每个元素展开。这樣
通常使用情況 3 的形式来表示导数怎么求
但是这只是一种惯例表示,具体表示要看具体问题没有最好的表示,只有最方便的表示
现在来看看所有基金对所有股票的敏感度,即推导“d基金/d股票”根据上面的惯例得知应该是个 4×2 的矩阵。
注意力只放在红色的 3.4 上它的计算过程是
矩阵其他每个结果都可以用同样方法算出。上面矩阵可进一步表示成
这个就是向量求导的链式法则
在深度学习中求解中,两个问题最重要
解决问题 1 需要了解张量求导 (第一节),解决问题 2 需要了解计算图(第二节)要理解张量請参考《》。
从高层次来看张量求导 ?y/?x 可分为三大类型:
求类型一的偏导数怎么求,只需记住下面的形状规则
规则 0 (形状规则):只要 y 或 x 中有一个是标量,那么导数怎么求 ?y/?x 的形状和非標量的形状一致
读起来有点绕口,看下面的数学表达式更为直观
上面形状 (D1, D2, …, Dn) 代表的是 n 个维度,第一个维度有 D1 个元素第二个维度有 D2 个え素,…第 n 个维度有 Dn 个元素。比如
类型一再往下细分有 5 类
每一类只需用形状规则就可以写出其偏导数怎么求下媔来看看这五个具体实例。
当 y 和 x 都是标量该求导类型在单变量微积分里面已学过,通俗的讲就是求“y 的变化和 x 的变化”的比率,用符號 ?y/?x 来表示严格来说,单变量导数怎么求应写成 dy/dx但为了和后面偏导数怎么求符号一致,就用偏导 ? 符号
注:“?标量/?标量”是張量求导基础,所有困难的求导都可以先从“?标量/?标量”开始摸清规律后再推广到“?张量/?张量”。
当 y 是标量x 是含有 n 个元素的姠量。
该导数怎么求是 y 对 x 中的每个元素 (一共 n 个元素) 求导然后按 x 的形状排列出来 (形状规则),即x 是行 (列) 向量,?y/?x 就是行 (列) 向量
注:神經网络的误差函数是 l 一个标量,在求参数最优解时我们需要计算 l 对向量偏置 b 的偏导数怎么求 ?l/?b (?标量/?向量)。
当 y 是标量x 是大小为 m×n 嘚矩阵。
该导数怎么求是 y 对 x 中的每个元素 (一共 mn 个元素) 求导然后按 x 的形状排列出来 (形状规则)。
注:神经网络的误差函数是 l 一个标量在求參数最优解时,我们需要计算 l 对矩阵权重 W 的偏导数怎么求 ?l/?W (?标量/?矩阵)
当 y 是含有 m 个元素的向量,x 是标量
该导数怎么求是 y 中的每个え素 (一共 m 个元素) 对 x 求导,然后按 y 的形状排列出来 (形状规则)即,y 是行 (列) 向量?y/?x 就是行 (列) 向量。
注:此类偏导数怎么求比较少见通常峩们研究的是单变量输出对多变量输入,而不是反过来的
当 y 是大小为 m×n 的矩阵,x 是标量
该导数怎么求是 y 中的每个元素 (一共 mn 个元素) 对 x 求導,然后按 y 的形状排列出来 (形状规则)
注:此类偏导数怎么求比较少见,通常我们研究的是单变量输出对多变量输入而不是反过来的。
當 y 是含有 m 个元素的向量x 是含有 n 个元素的向量。无论 y 和 x 是列向量还是行向量通常偏导数怎么求 ?y/?x 写成矩阵形式,而且喜欢把 y 放在矩阵嘚行上而 x 放在矩阵的列上 [1]。
该矩阵的大小是 m×n称为雅克比 (Jacobian) 矩阵。看个简单的具体例子:
在神经网络中y 和 x 有两种线性关系用的最多,洳下:
根据具体问题y 和 x 会写成列向量或行向量。套用上面介绍的雅克比矩阵可以给出通解 [2]
我们知道 ?y/?x 的结果是个矩阵,但是一次性寫出它比较困难不如来看看它第 i 行第 j 列的元素长成什么样,即求 ?yi/?xj
我们知道 ?y/?x 的结果是个矩阵但是一次性写出它比较困难,不如來看看它第 i 行第 j 列的元素长成什么样即求 ?yi/?xj
规则 1 和 2 是向量对向量求导,现在关注向量对矩阵求导 (当然困难一些)接着上面 y 和 x 的关系,
凊况一:列向量 y 对矩阵 W 求导其中 y = Wx
根据向量 y (n×1) 和矩阵 W (n×m) 的大小,?y/?W 是个三维张量大小为 n×(n×m)。类比于“向量对向量”的雅克比矩阵?y/?W 是个雅克比张量,形式如下:
显然一次性写出上面这个三维张量很困难我们按照 ?yi/?Wij ? ?yi/?W ? ?y/?W 层层推导
情况二:行向量 y 对矩阵 W 求导,其中 y = xW
根据向量 y (1×n) 和矩阵 W (m×n) 的大小?y/?W 是个三维张量,大小为 n×(m×n) 类比于“向量对向量”的雅克比矩阵,?y/?W 是个雅克比张量形式如下:
显然一次性写出上面这个三维张量很困难,我们按照 ?yj/?Wij ? ?yj/?W ? ?y/?W 层层推导
注:实践中一般不会显性的把“向量对矩阵”嘚偏导数怎么求写出来维度太高 (因为向量是一维张量,矩阵是二维张量因此向量对矩阵的偏导是个三维张量),空间太费我们只是把咜当做中间产出来用。
对于误差函数 l 它是 y 的标量函数。比起求 ?y/?W我们更有兴趣求 ?l/?W (比如想知道变动权重 W 对误差函数l的影响有多大)。?l/?W 是和 W 一样大小的矩阵 (形状规则)
接着上面讨论的两种情况,
情况一:x 和 y 是列向量按照 ?l/?Wij ? ?l/?W 层层推导
情况二:y 和 x 是列向量,按照 ?l/?Wij ? ?l/?W 层层推导
本节的“矩阵对向量”和上节的“向量对矩阵”都是下节的“矩阵对矩阵”的特殊形式因此研究最通用的“矩陣对矩阵”就足够了。
和“向量对矩阵”的道理一样实践中不会像下面显性的把“矩阵对矩阵”的偏导数怎么求 (四维张量,矩阵里面套矩阵) 写出来
我们只是把它们当做中间产出来用。比如误差函数 l 是 Y 的标量函数比起求 ?Y/?W 和 ?Y/?X,我们更有兴趣求 ?l/?W 和 ?l/?X根据矩陣链式法则,我们有
注:上面矩阵链式法则的表达式这样写可能不严谨因为我们并不知道矩阵和四维张量之间的乘法是如何定义的。比洳根据形状规则可推出 ?l/?Y, ?l/?X 和 ?l/?W 的大小如下表所示:
因此要推导出矩阵链式法则还需回到基本的标量链式法则。
首先关注 ?l/?X┅个个元素来看
注:点乘“A⊙B”代表将 A 和 B 里所有元素相乘再加总成一个标量。
将 ?yij/?x11写成矩阵形式后面是点乘!类比上式可写出
将这六項带入矩阵 ?l/?X 整理得到
拿 y = sin(x) 举例,整个推导还是可以用“?向量/?向量”那一套但由于 y 和 x 一一对应,因此
这种元素层面的函数求得的偏导数怎么求都是对角矩阵 (diagonal matrix)
再次把误差函数 l 请出来 (l 是 y 的标量函数),通常更感兴趣的是求 ?l/?x对某个 xi,根据链式法则得到
将上面 n 项整理成向量得到 (发现这种情况下“向量版链式法则”成立)
但在实操上我们更喜欢用“元素層面操作”来描述上式,通常用 ? 加符号来表示比如
神经网络里有两大类函数需要特别留意:
转换函数是将神经网络上一层输出转换成下一层输入的函数,常用的转换函数见下表
其中 identity 函数是线性的,可用于回归问题的输出层其他三个是非线性的,sigmoid 可用于二分类的输出层而 tanh 和 relu 比较多用在隐藏层。此外多分类问题的输出层用到嘚函数是 softmax其函数和导数怎么求如下:
关于 softmax 的偏导数怎么求用“向量对向量”的方法可以轻松推出来。
回归问题的均方误差 (mean square error, MSE) 函数和二分類、多分类问题的交叉熵 (cross entropy, CE) 函数。对 m 个数据点假设真实值为 Y,预测值为 A这三种误差函数的具体形式如下:
其中上标 (i) 代表第 i 个数据。
注意哆分类问题 CE 函数中 Y 和 A 有下标 k代表着是第 k 类输出。以数字分类为例最后数字“零到九”一共有 10 类,因此 K = 10而通常用独热编码 (one-hot encoding) 来表示“零箌九”。具体来说用 10×1 的向量代表数字 i,而该向量第 i 个元素是 1其它元素为 0。如下图所示:
再回到求导这来在神经网络里,误差函数嘚预测值 A 就是最后输出层的产出通过某个转换函数而得到。具体来说
那么标量 l 对 x 的偏导数怎么求可先由下面“不怎么严谨”的链式法則表示出来
上面两项形状相同因此 ?l/?x 就是将它们在元素层面相乘得到的结果,因此上面“不怎么严谨”的链式法则可严谨写成
但上面这種形式只对回归问题和二分类问题适用多分类问题需要更细致的处理。下面一一来分析
咋一看这两项形状不一样,不能像回归问题和②分类问题那样在元素层面操作了而只能张量点乘了。
上面公式太复杂我们把注意力先只放在第 i 个数据上。但细想一下 Y(i) 的元素它是個 K×1 的向量,只有一个元素为 1 (假设第 j 个) 其余为 0因此
其中下标 :,j 表示矩阵 S(i) 的第 j 列。合并起来得
以下数学符号务必认真看!惯例是用小括号 (i) 上標表示第 i 个数据用中括号 [L] 上标表示神经网络的第 L 层。
本节只用两层神经网络来说明一些核心问题比如正向传播、反向传播、计算图等等。我们由易到难的讨论以下三种情况:
关于神经网络结构里面基本元素的介绍请参考《》和《》。
紸:情况一和情况二只有一个数据点现实中几乎不会出现这样的神经网络。这样设计的情况就是为了能由易到难层层深入来解释正向传播和反向传播
以回归问题为例,单个数据点的误差为
神经网络里面 w[1], b[1], w[2] 和 b[2] 都是标量型参数通过链式法则以反向传播的方式解出它们
整个反姠传播的精髓就是使用局部梯度来计算中间梯度,再尽多不重复的用中间梯度计算最终梯度
最终梯度 = 中间梯度 × 局部梯度
为了能更精确哋描述反向传播算法,使用更精确的计算图 (computational graph) 是很有帮助的
计算图就是将计算形式化图形的方法,由输入结点、输出结点、函数 (从输入到輸出的) 三部分组成
反向传播顾名思义就是从朂后输出节点的梯度“?l /?l = 1”开始,沿着反方向计算梯度核心基础就是
上面四个步骤图看懂之后,结合本节的神经网络实例再理解下媔六张图的解释就容易了 (点击看大图)。
整个正向传播计算的变量之间的形状是匹配的验证如下:
以二分类问题为例,单个数据点的误差为 (y = 0 或 1)
神经网络里面 W[1] 和 W[2] 是矩阵型参数b[1] 是向量型参数,b[2] 是标量型参数通过链式法则以反向传播的方式解出它们
根据第一章的张量求导规则,计算上表的偏导数怎么求不能更简单:
计算完上面偏导数怎么求之后可用规则 0 (形状规则) 来检查左右两边的形状是否吻合
计算图对于非标量也适用,大致结构和上節的非常类似需要注意的是有时“向量或矩阵版链式法则”不能自然以连乘的方式写出来,因为我们其显示表达式写出来了如下图 (点擊看大图),
该神经网络考虑 m 个数据点 (X, Y)每个输入 X 有多特征,每个输出 Y 有多类值 (可以想成是 MNIST 手写数字分类问题其中有 50000 个训练数据,X 有 784
整个囸向传播计算的变量之间的形状是匹配的验证如下:
多分类问题下的误差函数为
其中 Y 是真实值A 是神经网络的预测值 (具体说明见小节 1.4)。
神经網络里面 W[1] 和 W[2] 是矩阵型参数b[1] 和 b[2] 是向量型参数,通过链式法则以反向传播的方式解出它们
根据第一章的张量求导规则,计算上表的偏导数怎么求不能更简单:
计算完上面偏导数怎么求之后可用规则 0 (形状规则) 来检查左右两边的形状是否吻合
计算图对于非标量也适用,大致结構和上节的非常类似需要注意的是有时“矩阵版链式法则”不能自然以连乘的方式写出来,因为我们其显示表达式写出来了如下图 (点擊看大图),
深度学习可以不严谨的认为是各类架构神经网络神经网络的正向传播就是张量计算,既一连串操作在张量上做优化第一步昰要求出损失函数对所有参数的导数怎么求 (张量形式)。我知道
这两点都会了你会发现反向传播就是张量版链式法则。
注:l 是 y 或 Y 的标量函数
注意我把“中间梯度×局部梯度”该成 dot(中间梯度, 局部梯度),這个函数实际上是 numpy 里面张量点乘的操作
本帖内容吃透,终于可以放手来研究深度学习中的各种网络结构了最重要的是,再也不用悚各種反向传播推导了你可以自信的说,不就是链式法则么带张量的?Stay Tuned!
本站是提供个人知识管理的网络存储空间所有内容均由用户发布,不代表本站观点如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话: 与我们联系