损失函数loss function-- 对自己学习有帮助的资源集锦

前言:

学无止境,在学习损失函数loss function的理论及使用方法时,有以下文章及github开源代码为我提供了很大帮助,特此附上链接,表示感谢!希望对您也有参考借鉴的意义!

大佬笔记:

(1)损失函数loss大大总结 (讲解很全,易理解,推荐~)

个人笔记:

根据大佬笔记整理常用的损失函数如下:

备注: y_hat – 真实值; y – 预测值

1. 分类任务

(1)二分类交叉熵损失sigmoid_cross_entropy:

损失函数loss function-- 对自己学习有帮助的资源集锦_第1张图片

TensorFlow 接口:

tf.losses.sigmoid_cross_entropy(
    multi_class_labels,
    logits,
    weights=1.0,
    label_smoothing=0,
    scope=None,
    loss_collection=tf.GraphKeys.LOSSES,
    reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)
tf.nn.sigmoid_cross_entropy_with_logits(
    _sentinel=None,
    labels=None,
    logits=None,
    name=None
)

Keras 接口:

binary_crossentropy(y_true, y_pred)
(2)二分类平衡交叉熵损失balanced_sigmoid_cross_entropy:

该损失也是用于2分类的任务,相比于sigmoid_cross_entrop的优势在于引入了平衡参数 ,可以进行正负样本的平衡,得到比sigmoid_cross_entrop更好的效果。
损失函数loss function-- 对自己学习有帮助的资源集锦_第2张图片

(3)多分类交叉熵损失softmax_cross_entropy:

损失函数loss function-- 对自己学习有帮助的资源集锦_第3张图片
TensorFlow 接口:

tf.losses.softmax_cross_entropy(
    onehot_labels,
    logits,
    weights=1.0,
    label_smoothing=0,
    scope=None,
    loss_collection=tf.GraphKeys.LOSSES,
    reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)
tf.nn.softmax_cross_entropy_with_logits(
    _sentinel=None,
    labels=None,
    logits=None,
    dim=-1,
    name=None
)
tf.nn.sparse_softmax_cross_entropy_with_logits(
    _sentinel=None,
    labels=None,
    logits=None,
    name=None
)

Keras 接口:

categorical_crossentropy(y_true, y_pred)
sparse_categorical_crossentropy(y_true, y_pred)

2. 回归任务

(1)均方误差mean square error(MSE)和L2范数:

MSE表示了预测值与目标值之间差值的平方和,然后求平均。
损失函数loss function-- 对自己学习有帮助的资源集锦_第4张图片
L2损失表示了预测值与目标值之间差值的平方和然后开根方,L2表示的是欧几里得距离。
损失函数loss function-- 对自己学习有帮助的资源集锦_第5张图片

MSE和L2的曲线走势都一样。区别在于一个是求的平均np.mean(),一个是求的根方np.sqrt()。
损失函数loss function-- 对自己学习有帮助的资源集锦_第6张图片

TensorFlow 接口:

tf.losses.mean_squared_error(
    labels,
    predictions,
    weights=1.0,
    scope=None,
    loss_collection=tf.GraphKeys.LOSSES,
    reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)
tf.metrics.mean_squared_error(
    labels,
    predictions,
    weights=None,
    metrics_collections=None,
    updates_collections=None,
    name=None
)

Keras 接口:

mean_squared_error(y_true, y_pred)
(2)平均绝对误差mean absolute error(MAE )和L1范数:

MAE表示了预测值与目标值之间差值的绝对值然后求平均。
损失函数loss function-- 对自己学习有帮助的资源集锦_第7张图片

L1表示了预测值与目标值之间差值的绝对值,L1也叫做曼哈顿距离。
损失函数loss function-- 对自己学习有帮助的资源集锦_第8张图片

MAE和L1的区别在于一个求了均值np.mean(),一个没有求np.sum()。二者的曲线走势也是完全一致的。
损失函数loss function-- 对自己学习有帮助的资源集锦_第9张图片
TensorFlow 接口:

tf.metrics.mean_absolute_error(
    labels,
    predictions,
    weights=None,
    metrics_collections=None,
    updates_collections=None,
    name=None
)

Keras 接口:

mean_absolute_error(y_true, y_pred)

MSE,MAE对比:
损失函数loss function-- 对自己学习有帮助的资源集锦_第10张图片

MAE损失对于局外点更鲁棒,但它的导数不连续使得寻找最优解的过程低效;MSE损失对于局外点敏感,但在优化过程中更为稳定和准确。

(3)Huber Loss和smooth L1:

Huber loss具备了MAE和MSE各自的优点,当δ趋向于0时它就退化成了MAE,而当δ趋向于无穷时则退化为了MSE。
损失函数loss function-- 对自己学习有帮助的资源集锦_第11张图片

Smooth L1 loss也具备了L1 loss和L2 loss各自的优点,本质就是L1和L2的组合。
损失函数loss function-- 对自己学习有帮助的资源集锦_第12张图片
Huber loss和Smooth L1 loss具有相同的曲线走势,当Huber loss中的δ等于1时,Huber loss等价于Smooth L1 loss。
损失函数loss function-- 对自己学习有帮助的资源集锦_第13张图片
对于Huber损失来说,δ的选择十分重要,它决定了模型处理局外点的行为。当残差大于δ时使用L1损失,很小时则使用更为合适的L2损失来进行优化。

Huber损失函数克服了MAE和MSE的缺点,不仅可以保持损失函数具有连续的导数,同时可以利用MSE梯度随误差减小的特性来得到更精确的最小值,也对局外点具有更好的鲁棒性。

但Huber损失函数的良好表现得益于精心训练的超参数δ。
TensorFlow 接口:

tf.losses.huber_loss(
    labels,
    predictions,
    weights=1.0,
    delta=1.0,
    scope=None,
    loss_collection=tf.GraphKeys.LOSSES,
    reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)

你可能感兴趣的:(基础知识)