gpt4 book ai didi

python - Tensorflow - autodiff 是否让我们从 back-prop 实现中重生?

转载 作者:行者123 更新时间:2023-12-04 07:51:14 25 4
gpt4 key购买 nike


使用 Tensorflow 时,例如实现自定义神经网络层,实现反向传播的标准做法是什么?我们不需要研究自动微分公式吗?
背景
使用 numpy,在创建图层时,例如matmul ,反向传播梯度首先被解析导出并相应地编码。

def forward(self, X):
self._X = X
np.matmul(self.X, self.W.T, out=self._Y)
return self.Y

def backward(self, dY):
"""dY = dL/dY is a jacobian where L is loss and Y is matmul output"""
self._dY = dY
return np.matmul(self.dY, self.W, out=self._dX)
在 Tensorflow 中,有 autodiff这似乎照顾雅可比计算。这是否意味着我们不必手动推导梯度公式,而是让 Tensorflow 胶带照看它?

Computing gradients

To differentiate automatically, TensorFlow needs to remember what operations happen in what order during the forward pass. Then, during the backward pass, TensorFlow traverses this list of operations in reverse order to compute gradients.

最佳答案

正确,您只需要定义正向传递,Tensorflow 就会生成适当的反向传递。来自 tf2 autodiff :

TensorFlow provides the tf.GradientTape API for automaticdifferentiation; that is, computing the gradient of a computation withrespect to some inputs, usually tf.Variables. TensorFlow "records"relevant operations executed inside the context of a tf.GradientTapeonto a "tape". TensorFlow then uses that tape to compute the gradientsof a "recorded" computation using reverse mode differentiation.


为此,Tensorflow 被赋予前向传递(或损失)和一组 tf.Variable计算导数的变量。此过程仅适用于 Tensorflow 本身定义的一组特定操作。为了创建自定义 NN 层,您需要使用这些操作定义其前向 pas(所有这些操作都是 TF 的一部分或由某些转换器转换为它)。*
因为你好像有一个 numpy背景,您可以使用 numpy 定义自定义前向传递,然后使用 tf_numpy API 将其转换为 Tensorflow .您也可以使用 tf.numpy_function .在此之后,TF 将为您创建反向传播。
(*) 请注意,某些操作(例如控制语句本身)是不可微的,因此它们对于基于梯度的优化器是不可见的。关于这些有一些注意事项。

关于python - Tensorflow - autodiff 是否让我们从 back-prop 实现中重生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66964498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com