从sigmoid,softmax,到交叉熵,到focal-loss

sigmoid,softmax;

交叉熵损失,样本不均衡的focalloss损失;

0x01 sigmoid

image-20210317205423645

求导

image-20210317205446308

0x02 softmax

image-20210317205508221

image-20210317205527163

求导,并且简单推导下只有一层hidden layer加softmax的多分类神经网络

x为输入,z为中间隐层神经元,a为最终输出结果

image-20210321175444430

损失函数

image-20210321180104828

对某个参数进行求导

image-20210321175515040

对于划线部分,分为两种情况

image-20210321180247838

softmax实质是将,最后一层的、数量与预测种类相同的神经元的输出,转化为概率

image-20210321164711451

0x03 Entropy

信息论 香农 : 定义:无损编码事件信息的最小平均编码长度。
20230202193334

  • “““ 熵是服从某一特定概率分布事件的理论最小平均编码长度”,只要我们知道了任何事件的概率分布,我们就可以计算它的熵;那如果我们不知道事件的概率分布,又想计算熵,该怎么做呢?那我们来对熵做一个估计吧,熵的估计的过程自然而然的引出了交叉熵。”””

  • 交叉熵就是在真实概率P下,对预测概率Q的最小编码长度,的平均

    • 熵:
      20230202201218
    • 交叉熵:
      20230202201157

0x04 Cross-Entropy与logsoftmax

先说LogSoftmax

image-20210317182903831

logsoftmax省了一个指数计算,省了一个除法,数值上相对稳定一些。

其实 Softmax_Cross_Entropy里面也是这么实现的。这也就引出了交叉熵softmax的关系。

cross-entropy 不是机器学习独有的概念,本质上是用来衡量两个概率分布的相似性的。

cross-entropy 公式为:

image-20210317205549767

其中预测概率q(k)就对应着softmax所输出的值,前边是log,所以,一般都直接采用logsoftmax节省计算。

特殊的 二分类 cross-entropy
20230202205601

  • 交叉熵用作损失函数(多分类)
    20230202201616

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import random
    from math import log2
    p = [random.randint(0, 1) for i in range(10)]
    q = [random.random() for i in range(10)]
    print(p, q)
    res = 0
    for pp, qq in zip(p, q):
    res -= pp * log2(qq)
    print(res)
  • 手撕交叉熵

P.S. 相对熵 KL散度

image-20210317205746072

0x04 Focal-Loss

何恺明 Kaiming 团队

交叉熵

image-20210319224143004

image-20210319224208761

image-20210319224234969

image-20210319224248148

image-20210319224301439

Appendix

  1. 一文搞懂熵(Entropy),交叉熵(Cross-Entropy)

师弟手绘 FUJUFILM

image-20210319212804699