首页 文章

tensorflow如何从输入到损失有效地计算梯度*?

提问于
浏览
0

要计算大小为 N 的输出层 N w.r.的输出,我们需要一个大小为 M x N 的雅可比矩阵 . 为了使用链规则计算从损失到输入的完整梯度,我们需要在存储器中存储大量这样的雅可比行列式 .

我假设张量流不为图的每一步计算完整的雅可比矩阵,但做了更有效的事情 . 它是如何做到的?

谢谢

1 回答

  • 1

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

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

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

    您可能会发现thisthis资源很有用 .

相关问题