ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 张量流渐变中的y是y的元素的总和?

2019-06-08 11:45:33  阅读:272  来源: 互联网

标签:python tensorflow gradients


我试图在张量流中产生tf.gradient的黑客攻击,对于秩(M,N)的张量和秩(Q,P)的张量x,得到秩的梯度张量(M,N,Q) ,P)人们自然会期待.

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

*

> Tensorflow gradients: without automatic implicit sum
> TensorFlow: Compute Hessian matrix (and higher order derivatives)
> Unaggregated gradients / gradients per example in tensorflow
> Separate gradients in tf.gradients

解决方法:

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

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

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

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

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

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

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

enter image description here

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

现在要应用链规则,你必须处理额外的符号,因为现在链规则中的“x”意味着矩阵乘法推广到秩-3的张量.
enter image description here

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

enter image description here

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

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

标签:python,tensorflow,gradients
来源: https://codeday.me/bug/20190608/1197402.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有