我正在运行梯度检验,以发现我的数学计算的梯度和实际的采样梯度之间的任何差异,以保证我的支持被正确实现。
当计算出这样的差异时,我能把差异的平方加起来,然后取它们的平均值吗?然后,我可以使用这个平均值来估计网络如何正确地计算梯度:
\frac{1}{m}\sum_{i=0}^{i=m}(g_i-n_i)^2
甚至:
\sqrt{\sum_{i=0}^{i=m}(g_i-n_i)^2}
其中g是反向传播的梯度,n是梯度检验的梯度。
然而,吴荣奎建议:
\frac{\vert \vert (g-n) \vert \vert _2 }{ \vert \vert g \vert \vert _2 + \vert \vert n \vert \vert _2}
其中\vert \vert . \vert \vert _2是向量的长度。
另一篇文章也推荐了一种稍微不同的方法:https://stats.stackexchange.com/a/188724/187816
为什么他们的方法会比我的好呢?
发布于 2018-04-25 07:39:38
让我举一个例子,安德鲁的建议比你的更有效:
假设实际梯度是$(0,0,0)$,而您计算的梯度是$(10^{-4},10^{-4},10^-4})$。然后您的平均值将返回$10^{-8}$,而Andrew的建议将返回$1美元。你的度量可能会欺骗你,让你认为你的梯度是很容易计算出来的,而误差只是因为一个数字问题,而安德鲁的指标不能欺骗你,因为它认为梯度可能很小。
总之,如果你的梯度没有接近零的范数,那就不重要了。然而,当梯度接近于零时,你可能会被愚弄到认为你的梯度不是正确的。
https://datascience.stackexchange.com/questions/30787
复制相似问题