1

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

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

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

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 这样的“数字”方法,但它们并不精确。我只需要确保正如您所说的那样,“k”和 L(x,k) 之间有一条路径,但我不知道怎么做!

4

1 回答 1

0

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

您能否更具体地了解您的模型的外观?如果您的前向复杂性太奇怪而无法表示为固定数据流图,您可能还想使用急切执行。

于 2018-05-01T22:52:15.960 回答