损失函数loss数学含义

一、处理回归问题

1. 均方根误差(MSE)

tf.losses.mean_squared_error

# Tensorflow中集成的函数
mse = tf.losses.mean_squared_error(y_true, y_pred)

# 利用Tensorflow基础函数手工实现
mse = tf.reduce_mean(tf.square(y_true -  y_pred))

优点是便于梯度下降,误差大时下降快,误差小时下降慢,有利于函数收敛。
缺点是受明显偏离正常范围的离群样本的影响较大

2. 平均绝对误差(MAE)

tf.losses.absolute_difference

maes = tf.losses.absolute_difference(y_true, y_pred)
maes_loss = tf.reduce_sum(maes)

优点是其克服了 MSE 的缺点,受偏离正常范围的离群样本影响较小。
缺点是收敛速度比 MSE 慢,因为当误差大或小时其都保持同等速度下降,而且在某一点处还不可导,计算机求导比较困难。

3. Huber loss —— 集合 MSE 和 MAE 的优点,但是需要手动调超参数

tf.losses.huber_loss

hubers = tf.losses.huber_loss(y_true, y_pred)
hubers_loss = tf.reduce_sum(hubers)

在这里插入图片描述
sklearn 关于 huber 回归的文档中建议将 δ=1.35 以达到 95% 的有效性。

二、处理分类问题

交叉熵损失(CE loss)& KL散度

参考:
【1】Tensorflow 中的损失函数 —— loss 专题汇总 https://zhuanlan.zhihu.com/p/44216830
【2】白话TensorFlow+实战系列(三)常用损失函数以及参数优化 https://zhuanlan.zhihu.com/p/26454768

交叉熵的由来

  • 先搞明白几个概念
    • 对于事件 X X X,发生的概率是 P ( X ) P(X) P(X),对于发生概率越大的事情,其包含的信息量越少 (比如,人一天吃三顿饭,对于我们没有任何信息量)
    • 信息量 y = − l o g ( P ( X ) ) y=-log(P(X)) y=log(P(X))
    • :熵越大,混乱程度越高
      在这里插入图片描述
  • 期望本身 E ( X ) = ∑ X ∗ P ( X ) E(X)= \sum X*P(X) E(X)=XP(X), 数值✖️发生的概率,类比熵——信息量*发生的概率
交叉熵(KL散度)
  • 交叉熵(KL散度):衡量对于同一个随机变量x的两个分布 p ( x ) p(x) p(x) p ( x ) p(x) p(x)之间的差异。一般 p ( x ) p(x) p(x)指真实分布, q ( x ) q(x) q(x)指预测的分布。两者的分布越接近,KL散度越小
    在这里插入图片描述

  • 简单记忆:p分布1,q分布2,kl loss,分布1 比 分布2,乘分布1的期望。

  • 交叉熵
    在这里插入图片描述
    机器学习中,我们常常使用KL散度来评估predict和label之间的差别,但是由于KL散度的前半部分是一个常量,所以我们常常将后半部分的交叉熵作为损失函数,其实交叉熵和KL散度是一样的

MSE和CE

  • 回归问题用MSE进行数值逼近,比较合适;
  • 分类问题用CE更为优秀;
  • 原因:MSE在梯度求解的时候,最终梯度公式仍然有sigmoid函数,导致收敛速度和误差大小不成正比;
    在这里插入图片描述
    而CE函数中最后不存在sigmoid,有的是sigmoid的值和实际值之间的差,也就满足了我们之前所说的错误越大,下降的越快。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值