TensorFlow梯度是否计算对决策变量具有未知依赖性的函数的导数

Does TensorFlow gradient compute derivative of functions with unknown dependency on decision variable

如果您能回答我的问题或提供有用的资源,我将不胜感激。

目前,我正在研究一个需要进行交替优化的问题。因此,考虑我们有两个决策变量 x 和 y。在第一步中,我采用损失函数的导数。 x(固定 y)并更新 x。在第二步,我需要采取导数。 y。问题是 x 隐含地依赖于 y,并且以一种显示 x 对 y 的依赖性的方式找到成本函数的封闭形式是不可行的,因此成本函数的梯度 wrt。你是未知的。

1) 我的第一个问题是,TensorFlow 中使用的反向模式中的 "autodiff" 方法是否适用于我们没有针对一个变量的明确形式的成本函数并且我们需要导数的这些问题?实际上,成本函数的值是已知的,但对决策变量的依赖性通过数学是未知的。

2) 从一般的角度来看,如果我将一个节点定义为 "tf.Variable" 并且具有通过代码执行演化的该变量的任意棘手函数(通过手动计算难以处理),是否有可能通过 "tf.gradients" 计算梯度?如果是,我如何确保它被正确实施?我可以使用 TensorBoard 检查它吗?


我的模型太复杂了,可以这样考虑一个简化的形式:假设我模型的损失函数是L(x)。我可以在 tensorflow 的构造阶段将 L(x) 编码为 "x" 的函数。但是,我还有另一个初始化为零的变量 "k" 。 L(x) 在代码运行时对 "k" 形状的依赖性,所以我的损失函数实际上是 L(x,k)。更重要的是,"x" 隐含地是 "k" 的函数。 (所有优化都是使用 GradientDescent 完成的)。问题是我没有 L(x,k) 作为封闭形式的函数,但我在每一步都有 L(x,k) 的值。我可以使用像 FDSA/SPSA 这样的 "numerical" 方法,但它们并不准确。正如你所说,我只需要确保在 "k" 和 L(x,k) 之间有一条路径,但我不知道如何!

TensorFlow 梯度仅在您计算 dy/dx 时连接 x 和 y 的图形具有至少一条仅包含可微分操作的路径时才有效。一般来说,如果 tf 给你一个梯度,它是正确的(否则提交一个错误,但梯度错误很少见,因为所有可微操作的梯度都经过了很好的测试并且链式规则很容易应用)。

您能否更具体地说明您的模型是什么样子的?如果您的前向并发症太奇怪而无法表示为固定数据流图,您可能还想使用急切执行。