focal loss分析图 (完善知乎的一个评论)

Focal loss 全图

Focal loss 局部放大图

  • 首先我觉得(个人猜测)一个样本的作用大小, 不是直接由它对应的loss决定的, 而是由这个样本对应loss对权值w的梯度决定的. 因为梯度越大, 则权值更新得越多(是朝着该样本loss减小的方向更新越多)
  • 用one-hot做交叉熵loss的话, 样本 x i x^i xi(假设属于类别k)对应的loss: l o s s x k i = − l o g ( y k ( x i ) ) = 简 写 为 − l o g ( y k i ) loss_{x_k^i} = -log(y_k(x^i)) \overset{简写为}{=}-log(y_k^i) lossxki=log(yk(xi))=log(yki), 其中 y k ( x i ) y_k(x^i) yk(xi) x i x^i xi的第k个类别的输出值.
  • 这个时候一些博客的分析是说如果 y k ( x i ) y_k(x^i) yk(xi)越大, 则说明它越容易分类, 即为简单样本, 此时需要降低它的loss权重, 所以就有了focal loss: − ( 1 − y k ( x i ) ) r ∗ l o g ( y k ( x i ) -(1-y_k(x^i))^r*log(y_k(x^i) (1yk(xi))rlog(yk(xi), 此时如果 y k ( x i ) y_k(x^i) yk(xi)接近1的话, 则前面一项将非常小, 使得容易分类的样本的loss更小, 而如果接近于0, 则前面那项接近1, loss 基本不变. 这个说法有一定道理, 但是我还是那句话, 让一个样本起作用的, 不是他的loss绝对大小, 而是它的梯度大小, 因为梯度才是直接导致参数更新程度的指标, 而不是loss绝对大小. 所以有必要分析一下添加这个focal loss系数后loss函数的导数.
  • 上面画的图有两个子图, 第一个子图是focal loss在r取不同值时, focal loss关于模型预测概率y的变化关系, 第二个子图是focal loss对y的导数曲线. 全局图的第二个子图看不出啥东西(太密了), 所以就放大了看第二个局部子图.竖线是对应r取不同值时和r取0(原始交叉熵loss)的交点. 竖线的左边是小于原始交叉熵的部分, 右边是大于的部分, 这里需要说一下的是, 因为导数都是负数, 所以导数越小, 其实绝对值是更大的(绝对值大则更新快), 也就是说竖线左边是对样本权重加大的, 而竖线右边是减少的. 可以看到r=5时, 竖线在y=0.18左右, 也就是说输出的y<0.18时, focal loss才会对这些样本加一个比原始交叉熵loss更大的权重, 即认为它是难分类样本, 而y>0.18时, 则它的权重就开始小于交叉熵的了, 即认为它是简单样本了(这句话不严谨).这个明显不是很合理, 因为y>0.5才能正确分类, 而0.5>y>0.18都没有正确分类就认为他是简单样本了.原文(我还没细看)中也是说r=2时最好, 可以看出r=2时, 交点在比0.3小一点处, 明显这个是比r=5更合理的.
  • 但是这个解释呢, 也有问题, 因为明显如果那个交点在y=0.5处是最好的呀, 左边(错误分类了)加大权重, 右边(正确分类了)减少权重, 所以r=1和r=0.5应该都是效果比r=2好的呀?为啥r=2就最好了呢??这个会不会是我们没有考虑到, 不同的r时, 导数的绝对值大小没有太大关系, 而是不同的y有一个不同且对应的导数即可, 大概意思就是说我不纠结y=0.2和y=0.3时, 这个导数和原始交叉熵导数的大小关系, 而是只要保证y=0.2的导数>y=0.3>1, 且1> y=0.6导数>y=0.7导数就可以了, 即保证相对关系即可(都是瞎猜的哈哈)
  • 以上都是一些不成熟的想法, 欢迎大家来一起讨论.

你可能感兴趣的:(dl&ml)