深度学习【17】Focal Loss 反向求导及darknet上的实现
2017-09-07 19:47
1666 查看
Focal Loss 反向求导及darknet上的实现
Focal Loss 可以解决不平衡分类问题,是在交叉熵损失函数上的扩展。详见,论文:Focal Loss for Dense Object Detection。该文,主要推导FL在softmax函数下的求导,以及记录在darknet上的实现。
FL损失函数如下:
FL(pt)=−α(1−pt)γlog(pt)FL(pt)=−α(1−pt)γlog(pt)
其中ptpt为:
pt={p, 1−p,if y==1 otherwise pt={p,if y==1 1−p,otherwise
softmax公式:
pi=exi∑ekpi=exi∑ek
我们的目标得到x对FL的导数:
dFLdxi=dFLdpi∗dpidxidFLdxi=dFLdpi∗dpidxi
又,
dFLdpt =−α(d(1−pt)γdpt∗log(pt)+(1−pt)γ∗dlog(pt)dpt)=−α(−γ(1−pt)γ−1log(pt)+(1−pt)γ1pt)=−α(−γ(1−pi)γ−1log(pi)+(1−pi)γ1pi)because(y==1)(1)(2)(3)(1)dFLdpt=−α(d(1−pt)γdpt∗log(pt)+(1−pt)γ∗dlog(pt)dpt)(2) =−α(−γ(1−pt)γ−1log(pt)+(1−pt)γ1pt)(3) =−α(−γ(1−pi)γ−1log(pi)+(1−pi)γ1pi)because(y==1)
xixi 对softmax的求导,分两种情况:
ifi==j: dpidxi ifi!=j: dpidxi =exi∗∑exk−exi∗exi∑ex2k=exi∑exk−exi∑exk∗exi∑exk=pi−pi∗pi=pi(1−pi)=0−exi∗exj∑ex2k=−pi∗pj(4)(5)(6)(7)(8)(9)(10)(4)ifi==j:(5) dpidxi=exi∗∑exk−exi∗exi∑exk2(6) =exi∑exk−exi∑exk∗exi∑exk(7) =pi−pi∗pi=pi(1−pi)(8) ifi!=j:(9) dpidxi=0−exi∗exj∑exk2(10) =−pi∗pj
因此,
ifi==j: ifi!=j: dFLdxi=α(−γ(1−pi)γ−1log(pi)pi+(1−pi)γ)∗(pi−1)dFLdxi=α(−γ(1−pi)γ−1log(pi)pi+(1−pi)γ)∗pj(11)(12)(13)(14)(11)ifi==j:(12) dFLdxi=α(−γ(1−pi)γ−1log(pi)pi+(1−pi)γ)∗(pi−1)(13) ifi!=j:(14) dFLdxi=α(−γ(1−pi)γ−1log(pi)pi+(1−pi)γ)∗pj
darknet的softmax交叉熵反向传导时,当i==j时是,1-pi_1-pi_,;当i!=ji!=j时是−pj−pj,因此还需多一个负号。
默认alpha=0.25,gamma=2
int ti = index+stride*class; float grad =-2*(1-output[ti])*logf(fmaxf(output[ti],0.0000001))*output[ti]+(1-output[ti])*(1-output[ti]); for(n = 0; n < classes; ++n){ delta[index + stride*n] = scale * (((n == class)?1 : 0) - output[index + stride*n]); delta[index+stride*n] *= 0.25*grad; if(n == class) *avg_cat += output[index + stride*n];
如果alpha=1,训练就会出现nan。但是alpha=0.25,,训练又很慢,还需要多做实验。
2017.10.16更新:将alpha设置为0.5,经过漫长的训练,平均map能够上升2%。
相关文章推荐
- 深度学习(六十九)darknet 实现实验 Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffma
- keras实现常用深度学习模型LeNet,AlexNet,ZFNet,VGGNet,GoogleNet,Resnet
- MxNet+R︱用R语言实现深度学习(单CPU/API接口,一)
- 深度学习【18】ncnn与NNPACK-darknet速度比较
- MxNet+R︱用R语言实现深度学习
- [深度学习论文笔记][ICCV 17]Semi Supervised Semantic Segmentation Using Generative Adversarial Net
- 深度学习(六十八)darknet使用
- [pytorch] 深度学习分割网络U-net的pytorch模型实现
- YOLO: Real-Time Object Detection深度网络: 在Darknet上的实现方式
- 深度学习一:安装MXnet包,实现MNIST手写数体识别
- 深度学习分割网络U-net的pytorch模型实现
- TensorFlow实现经典深度学习网络(3):TensorFlow实现Google Inception Net
- [pytorch] 深度学习分割网络U-net的pytorch模型实现 原创 2017年03月08日 21:48:21 标签: python / 深度学习 / 生物图
- 2.深度学习FPGA实现基础知识17(图像处理卷积运算 矩阵卷积)
- MXNet动手学深度学习笔记:卷积神经网络实现
- 深度学习【16】YAD2K,pytorch-caffe-darknet-convert,转换后概率不一样的问题
- MXNet动手学深度学习笔记:GoogLeNet神经网络实现
- 深度学习(七十一)darknet 源码阅读
- 深度学习Caffe实战笔记(17)MATLAB实现卷积层卷积核权重的可视化