【发布时间】:2022-01-09 19:55:08
【问题描述】:
我是自动微分编程的新手,所以这可能是一个幼稚的问题。下面是我要解决的问题的简化版本。
我有两个输入数组——一个大小为N 的向量A 和一个形状为(N, M) 的矩阵B,以及一个大小为M 的参数向量theta。我定义了一个新数组C(theta) = B * theta 来获得一个大小为N 的新向量。然后我获取落在C 上下四分位数的元素的索引,并使用它们创建一个新数组A_low(theta) = A[lower quartile indices of C] 和A_high(theta) = A[upper quartile indices of C]。显然这两个确实依赖于theta,但是是否可以区分A_low 和A_high w.r.t theta?
到目前为止,我的尝试似乎表明没有——我使用了 autograd、JAX 和 tensorflow 的 python 库,但它们都返回零梯度。 (到目前为止我尝试过的方法包括使用 argsort 或使用 tf.top_k 提取相关子数组。)
我正在寻求帮助的是证明导数未定义(或无法分析计算),或者如果它确实存在,请提供有关如何估计它的建议。我的最终目标是最小化某些功能f(A_low, A_high) wrt theta。
【问题讨论】:
标签: tensorflow autograd automatic-differentiation jax autodiff