平时工作太忙,时间都被碎片化拆分了,继续看Faster-RCNN源码,地铁上,时间关系,只看了损失部分
- 分类损失,使用的是交叉熵损失函数
- 回归损失(smooth_l1_loss损失)
特别说明:我担心有些朋友不太理解,源码这边为什么,还要自己定义smooth_l1_loss,而不是使用回归领域比较常用的L1损失(平均绝对误差)和L2损失(误差平方和),接下来我简单说一下他们的情况以及作者源码中选择自定义smooth_l1_loss的初衷:
L1损失:
结构图:
- 优缺点对比:
优点:由于L1 loss具有稀疏性,为了惩罚较大的值,因此常常将其作为正则项添加到其他loss中作为约束。
问题:L1 loss的最大问题是梯度在零点不平滑,导致会跳过极小值。
L2损失:
结构图:
优缺点对比:
优点:L2 loss也常常作为正则项。
缺点:当预测值与目标值相差很大时, 梯度容易爆炸。
自定义的smooth_l1_loss损失:
本质说明:
按照源码中的意思,smooth_l1_loss,1. 结合了L1损失的负无穷到-1和1到正无穷的部分,有效的规避了零点区域的梯度不平滑问题;2. 结合了,L2损失的(-1, 1)部分,有效的避开了,L2损失在遇到极端情况时的梯度爆炸问题。
示例图如下:
时间关系,下一站就到站了,今天就写到这吧,祝各位工作顺利,生活愉快!!!