参考自:https://www.aiuai.cn/aifarm636.html,这里讲的很清楚
Focal Loss 主要解决难分样本和易分样本的问题,即hard sample 和easy sample。那难分样本和易分样本是怎么定义的,
那么我们可以根据Pt来定义难易样本,即大的Pt是easy samples, 小的Pt为hard samples.
这是因为当标签为正样本时,P越大说明该样本好分啊,越小说明越难分;
当标签为负样本时,P越大,则Pt越小,说明很难分,反之则很好分。
因此我们就可以认为大的Pt是好分的样本,那我们可以根据上述的交叉熵公式画出来,下面我用Matlab重新画了一下,下面两图分别是用Matlab画的和论文里面的图,发现线的颜色都一样的,估计作者也是用Matlab画的。可以对比一下,发现通过Focal loss降低了easy samples的损失。
%% Matlab
clear;clc;
fx = @(pt, gamma) - (1-pt).^gamma.*log(pt);
x=linspace(0, 1, 100);
gamma = [0, 0.5, 1, 2, 5];
for i=1:length(gamma)
y = fx(x, gamma(i));
plot(x, y, 'LineWidth', 3);
hold on;
end
legend({['gamma ' num2str(gamma(1))],...
['gamma ' num2str(gamma(2))],...
['gamma ' num2str(gamma(3))],...
['gamma ' num2str(gamma(4))],...
['gamma ' num2str(gamma(5))]}, 'Fontsize', 12);
xlabel('probability of ground truth class', 'Fontsize', 20);
ylabel('loss', 'Fontsize', 20);
hold off;
这里解释下Focal loss
可以看到前面加了权重因子,因此,Focal loss 可以兼顾样本不均匀和难易样本问题。关于它的求导和代码都在参考链接里,写的很不错。