如果您能回答我的问题或为我提供有用的资源,我将不胜感激。
目前,我正在研究一个需要进行交替优化的问题。因此,考虑我们有两个决策变量 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) 之间有一条路径,但我不知道怎么做!