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