首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tensorflow如何“有效地”计算从输入到损失的梯度?

tensorflow如何“有效地”计算从输入到损失的梯度?
EN

Stack Overflow用户
提问于 2018-05-21 14:05:06
回答 1查看 457关注 0票数 2

为了计算大小为N的输出层和大小为M的输入的导数,我们需要大小为M x N的雅可比矩阵。为了使用链式规则计算从损失到输入的完整梯度,我们需要在内存中存储大量这样的雅可比。

我假设tensorflow不会为图的每一步计算完整的雅可比矩阵,但会做一些更有效的事情。它是怎么做到的呢?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-05-23 06:23:13

TensorFlow使用自动微分有效地计算梯度。具体地说,它定义了一个计算图,其中节点是操作,并且每条有向边表示子节点相对于其父节点的偏导数。然后,运算f关于x的总导数由从x到f的所有路径值的和给出,其中每个路径值是边缘上的运算的偏导数的乘积。

更具体地说,TensorFlow使用反向微分,这涉及到前向传递来计算计算图中每个节点的值,以及反向传递来计算函数f的偏导数,我们正在对图中的每个节点进行微分。我们需要对函数f的每个维度重复反向传递,因此计算复杂度为O( dim( f ) )*O(f),其中dim(F)是函数f的输出维度。

虽然这种方法是内存密集型的(它需要在运行反向遍历之前存储所有节点的值),但它对于机器学习非常有效,其中我们通常有一个标量函数f(即dim(f)=1)。

您可能会发现this资源很有用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50442873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档