scipy.optimize.check_grad的预期输出是梯度与梯度的有限差分近似之间差异的2范数。我无法从输出中了解我的渐变是否足够好。这些值必须属于哪个范围?什么是可接受的错误?
答案 0 :(得分:0)
你的渐变函数返回一个向量,让我们调用它g
,而scipy数值方法给你很好的(虽然代价高昂)估计v
。现在你得到的是
||g-v|| = sqrt( SUM_{i=1}^d (g_i - v_i)^2 )
换句话说,它是在所有维度上求和的梯度误差的平方根。什么是可接受的错误?取决于功能和渐变尺寸。我会说10e-4
以上的eveything总是错的。虽然回答10e-4
或10e-10
是否合适取决于您的特定应用 - 对简单随机优化有不同的要求(有时只需要每个维度的符号而不是对于解决一些复杂的数值模拟的精确方法而言,它们是不同的。