在tensorflow中,你可以使用非平滑函数作为损失函数,例如分段(或使用if-else)?如果你不能,为什么你可以使用ReLU?
在这个链接 SLIM中 ,它说
"例如,我们可能希望最大限度地减少对数损失,但我们感兴趣的指标可能是F1得分,或交叉点超过联盟得分(不可区分,因此不能用作损失)."
它是否意味着"不可区分",例如设置问题?因为对于ReLU,在0点,它是不可区分的.
Yah*_*ria 18
问题不在于损失是分段的还是不平滑的.问题是我们需要一个损失函数,当输出和预期输出之间存在误差时,该函数可以将非零梯度发送回网络参数(dloss/dparameter).这适用于模型中使用的几乎任何函数(例如,损失函数,激活函数,注意函数).
例如,Perceptrons使用单位步长 H(x)作为激活函数(如果x> 0,则H(x)= 1,否则为0).由于H(x)的导数总是为零(在x = 0时未定义),来自损失的无梯度将通过它返回到权重(链规则),因此网络中该函数之前的权重不能更新使用梯度下降.基于此,梯度下降不能用于感知器,但可以用于使用S形激活函数的常规神经元(因为所有x的梯度不为零).
对于Relu,对于x> 0,导数为1,否则为0.虽然导数在x = 0时未定义,但当x> 0时,我们仍然可以通过它反向传播损耗梯度.这就是为什么它可以使用.
这就是为什么我们需要一个具有非零梯度的损失函数.像精度和F1这样的函数在任何地方都有零梯度(或者在某些x值处未定义),所以它们不能使用,而交叉熵,L2和L1等函数具有非零梯度,因此可以使用它们.(注意,L1"绝对差异"是分段的,在x = 0时不平滑,但仍然可以使用)
如果您必须使用不符合上述标准的函数,请尝试使用强化学习方法(例如,政策渐变).
| 归档时间: |
|
| 查看次数: |
4031 次 |
| 最近记录: |