gpt4 book ai didi

tensorflow - 非平滑且不可微的定制损失函数 tensorflow

转载 作者:行者123 更新时间:2023-12-03 14:46:21 25 4
gpt4 key购买 nike

在tensorflow中,您可以使用非平滑函数作为损失函数吗,例如分段函数(或if-else函数)?如果不能,为什么可以使用ReLU?
在此链接
SLIM
, 它说


“例如,我们可能希望使对数损失最小化,但我们感兴趣的指标可能是F1分数或Intersection Over Union分数(这是不可区分的,因此不能用作损失)。”

它是否根本就意味着“不可区分的”,例如固定问题?因为对于ReLU,在点0处是不可微的。


如果使用这种定制的损失函数,是否需要自己实现梯度?或tensorflow可以自动为您做到吗?我检查了一些定制的损失函数,他们没有为损失函数实现梯度。

最佳答案

问题不在于损失是分段的还是不平滑的。问题是我们需要一个损失函数,当输出与预期输出之间存在误差时,该函数可以将非零梯度发送回网络参数(损耗/ d参数)。这几乎适用于模型内部使用的所有函数(例如损失函数,激活函数,注意函数)。

例如,感知器使用unit step H(x)作为激活函数(如果x> 0,则H(x)= 1,否则为0)。由于H(x)的导数始终为零(在x = 0时未定义),因此没有损失所产生的梯度将通过它返回权重(链法则),因此网络中该函数之前的权重无法更新使用梯度下降。基于此,梯度下降不能用于感知器,但可以用于使用sigmoid激活函数的常规神经元(因为所有x的梯度都不为零)。

对于Relu,对于x> 0,导数为1,否则为0。尽管在x = 0时导数不确定,但是当x> 0时,我们仍然可以通过它反向传播损耗梯度。这就是为什么可以使用它。

这就是为什么我们需要具有非零梯度的损失函数的原因。精度和F1之类的函数在任何地方都具有零梯度(或者在x的某些值处未定义),因此无法使用它们,而交叉熵,L2L1之类的函数具有非零梯度,因此它们可以使用。 (请注意,L1“绝对差”是分段的,在x = 0时不平滑,但仍可以使用)

如果您必须使用不符合上述条件的功能,请改用reinforcement learning methods(例如,策略梯度)。

关于tensorflow - 非平滑且不可微的定制损失函数 tensorflow ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40752801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com