当前位置:  开发笔记 > 编程语言 > 正文

张量流梯度中的y是y的元素的总和?

如何解决《张量流梯度中的y是y的元素的总和?》经验,为你挑选了1个好方法。

我试图tf.gradient在张量流y中做出一个hack,它会给出一个等级(M,N)的张量和一个x等级(Q,P)的等级(M,N,Q,P)的梯度张量作为一个自然会期待.

正如在这个网站*上的多个问题所指出的那样,得到的是一个等级(Q,P),它是元素总和的等级y.现在我无法弄清楚,查看张量流代码是在哪里对元素进行求和y?是开始还是结束?有人可以帮我查明代码行吗?

*

Tensorflow梯度:没有自动隐式求和

TensorFlow:计算Hessian矩阵(和更高阶导数)

张量流中每个示例的未聚集梯度/渐变

在tf.gradients中分开渐变

Yaroslav Bul.. 5

我在这里已经回答了,但我猜它不是很有用,因为你无法利用这些知识来区分非标量y.标量y假设是反向AD算法设计的核心,并且没有一个地方可以修改以支持非标量ys.由于这种混乱不断出现,让我更详细地说明为什么它不重要:

首先,反向AD如何工作 - 假设我们有一个函数f,即组件函数f_i的组合.每个组件函数采用长度为n的向量并生成长度为n的向量.

其导数可以表示为矩阵乘法序列.整个表达式可以表示如下.

在区分时,函数组成成为相应组件函数雅可比矩阵的矩阵乘法.

注意,这涉及矩阵/矩阵产品,证明对于神经网络来说太昂贵.IE,AlexNet在其convnet-> fc过渡层中包含8k激活.在每个矩阵为8k x 8k的情况下进行矩阵倍数需要太长时间.使其高效的技巧是假设链中的最后一个函数产生标量.然后它的雅可比行星是一个向量,整个事物可以用向量矩阵乘法而不是矩阵矩阵乘法来重写.

通过从左到右进行乘法可以有效地计算该乘积,因此您所做的一切都是nxn向量矩阵乘法而不是nxn矩阵 - 矩阵乘法.

你可以通过从不首先形成那些nxn导数矩阵来使其更有效,并且将每个分量函数与隐含地执行向量x雅可比矩阵乘积的op相关联.这就是TensorFlow tf.RegisterGradient所做的.这是与组件功能相关的"grad"的图示.

在此输入图像描述

现在,这是为矢量值函数完成的,如果你的函数是矩阵值怎么办?这是我们在神经网络中处理的典型情况.IE,在一个矩阵乘法的层中,你乘以的矩阵是未知的,它是矩阵值.在这种情况下,最后一个导数的等级为2,其余导数的等级为3.

现在要应用链规则,你必须处理额外的符号,因为现在链规则中的"x"意味着矩阵乘法推广到秩-3的张量. 在此输入图像描述

但是,请注意,由于我们使用的是grad运算符,因此我们不必明确地进行乘法运算.所以现在在实践中,此运算符现在采用rank-2的值并生成rank-2的值.

在此输入图像描述

因此,在所有这些中,假设最终目标是标量,它允许通过传递矩阵来区分完全连接的层.

如果要扩展它以支持非标量向量,则需要修改反向AD算法以传播更多信息.IE,对于完全连接的前馈网络,你将传播秩-3张量而不是矩阵.



1> Yaroslav Bul..:

我在这里已经回答了,但我猜它不是很有用,因为你无法利用这些知识来区分非标量y.标量y假设是反向AD算法设计的核心,并且没有一个地方可以修改以支持非标量ys.由于这种混乱不断出现,让我更详细地说明为什么它不重要:

首先,反向AD如何工作 - 假设我们有一个函数f,即组件函数f_i的组合.每个组件函数采用长度为n的向量并生成长度为n的向量.

其导数可以表示为矩阵乘法序列.整个表达式可以表示如下.

在区分时,函数组成成为相应组件函数雅可比矩阵的矩阵乘法.

注意,这涉及矩阵/矩阵产品,证明对于神经网络来说太昂贵.IE,AlexNet在其convnet-> fc过渡层中包含8k激活.在每个矩阵为8k x 8k的情况下进行矩阵倍数需要太长时间.使其高效的技巧是假设链中的最后一个函数产生标量.然后它的雅可比行星是一个向量,整个事物可以用向量矩阵乘法而不是矩阵矩阵乘法来重写.

通过从左到右进行乘法可以有效地计算该乘积,因此您所做的一切都是nxn向量矩阵乘法而不是nxn矩阵 - 矩阵乘法.

你可以通过从不首先形成那些nxn导数矩阵来使其更有效,并且将每个分量函数与隐含地执行向量x雅可比矩阵乘积的op相关联.这就是TensorFlow tf.RegisterGradient所做的.这是与组件功能相关的"grad"的图示.

在此输入图像描述

现在,这是为矢量值函数完成的,如果你的函数是矩阵值怎么办?这是我们在神经网络中处理的典型情况.IE,在一个矩阵乘法的层中,你乘以的矩阵是未知的,它是矩阵值.在这种情况下,最后一个导数的等级为2,其余导数的等级为3.

现在要应用链规则,你必须处理额外的符号,因为现在链规则中的"x"意味着矩阵乘法推广到秩-3的张量. 在此输入图像描述

但是,请注意,由于我们使用的是grad运算符,因此我们不必明确地进行乘法运算.所以现在在实践中,此运算符现在采用rank-2的值并生成rank-2的值.

在此输入图像描述

因此,在所有这些中,假设最终目标是标量,它允许通过传递矩阵来区分完全连接的层.

如果要扩展它以支持非标量向量,则需要修改反向AD算法以传播更多信息.IE,对于完全连接的前馈网络,你将传播秩-3张量而不是矩阵.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有