平均绝对误差 (MAE) 导数

机器算法验证 神经网络 反向传播 衍生物
2022-03-21 07:16:08

MAE=|ypredytrue|

dMAEdypred=?

我试图了解 MAE 如何在使用反向传播的神经网络中作为损失函数工作。我知道它可以直接在某些 API 中使用——例如Keras——但是我看到tensorflow 不允许它(尽管你可以手动声明它tf.abs(tf.minus(y_pred,y_true)))。

我的问题是:通常如何计算 MAE 的导数(我只发现使用了一个明显复杂的近似值),特别是它是如何在 tensorflow(手动声明时)和 keras 中计算的?

2个回答

, 作为一个函数ypred, 在ypred=ytrue. 在其他地方,导数是±1通过链式法则的直接应用:

dMAEdypred={+1,ypred>ytrue1,ypred<ytrue

解释很简单:如果您的预测太高(ypred>ytrue),然后增加ypred再多一单位将使 MAE 增加一单位等量,因此梯度鼓励您减少 ypred. 反之亦然,如果ypred<ytrue.

浏览您链接的论文,似乎它们通过可微函数来近似 MAE,以避免在ypred=ytrue.

至于在 TensorFlow 和 keras 中具体实现了什么,这里就不说了。最好查阅文档、源代码或任何特定的帮助社区。

至于 Tensorflow 的 Keras,这是一个很好的答案: https ://stackoverflow.com/a/35344963

如果我们深入研究源代码,我们会看到它使用了 math_ops.sign ,它返回 0 为 0 https://github.com/tensorflow/tensorflow/blob/c91e944d626b517781af6a63c0aee302ab2457e3/tensorflow/python/ops/math_grad.py# L577