zoukankan      html  css  js  c++  java
  • 机器学习常用损失函数

    信息熵

    信息熵也被称为熵,用来表示所有信息量的期望。
    公式如下:

    例如在一个三分类问题中,猫狗马的概率如下:

    label
    predict 0.7 0.2 0.1
    信息量 -log(0.7) -log(0.2) -log(0.1)

    信息熵为:H = −(0.5∗log(0.5)+0.2∗log(0.2)+0.3∗log(0.3))

    针对二分类问题可以简写如下:

    相对熵(KL散度)

    如果对于同一个随机变量X,有两个单独的概率分布P(x)和Q(x),则我们可以使用KL散度来衡量这两个概率分布之间的差异。
    用来表示两个概率分布的差异
    公式如下:

    # pytorch代码
    kl_loss = torch.nn.KLDivLoss()
    kl_loss_output = klloss(logit1, logit2)
    

    例如在一个三分类问题中,概率如下:

    label 1 0 0
    predict 0.7 0.2 0.1

    则KL散度如下:

    交叉熵(CE, Cross Entropy)

    交叉熵 = KL散度 + 信息熵,常作为损失函数来最小化KL散度,且计算比KL散度简单。
    常用于计算label和概率之间的差异,计算量比KL散度小
    公式如下(可以通过上文信息熵和KL散度推导):

    # pytorch代码
    crossentropy_loss = torch.nn.CrossEntropyLoss()
    crossentropy_loss_output = crossentropyloss(label, predict)
    

    举例如下:

    label 1 0 0
    predict 0.7 0.2 0.1

    那么loss计算公式如下:

    和MSE对比:当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数,因为它可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质。

    和方差(SSE)

    和方差用来计算两个概率分布之间的差异,计算公式如下:

    均方差(MSE)

    均方差也用来计算两个概率分布之间的差异,计算公式如下:

    # pytorch代码
    mse_loss = torch.nn.MSELoss(reduce=True, size_average=True)
    mse_loss_output = mse_loss(logit1, logit2)
    

    还是拿三分类问题举例:

    label 1 0 0
    teacher_pre 0.7 0.2 0.1
    student_pre 0.6 0.2 0.2

    那么mse loss = [(0.7-0.6)^2 + (0.2-0.2)^2 + (0.1-0.2)^2] / 3

    均方根误差(RMSE)

    也叫回归系统的拟合标准差,是MSE的平方根,计算公式如下:

    SSE、MSE、RMSE三者比较相似,其中MSE常用于模型蒸馏中,用于计算student和teacher的logit之间的概率分布差异

    Hinge损失函数

    专用于二分类的损失函数,公式如下:

    SVM使用的损失函数,如果分类正确,则loss为0,否则损失为1-yf(x),其中1可以作为一个超参数设置为其他值
    其中|f(x)|<=1,y是目标值1或者-1

    时间会记录下一切。
  • 相关阅读:
    char与byte的区别
    java 中的枚举类型
    * .mesh 体网格文件解析
    java 中的equals hashCode
    java 中的 hashCode()
    java 中的判断两个对象是否相等的比较严格的操作
    java 中的访问限制
    数学建模 投资模型
    java abstract
    java 中的多态 & 动态绑定
  • 原文地址:https://www.cnblogs.com/bincoding/p/14362557.html
Copyright © 2011-2022 走看看