深度学习05】 交叉熵损失函数

简介: 不同的信息,含有不同的信息量,假设下列对阵表中阿根廷的夺冠概率是1/8,A同学告诉我阿根廷夺冠了,那么这个信息量就很大了(因为它包括了阿根廷进了四强,决赛);B同学告诉我阿根廷进决赛了,那么这个信息量就较小。

基本损失函数


损失函数作用


1.计算出实际输出和目标之间的差距

2.为我们更新输出提供依据(反向传播)


image.png


交叉熵


image.png


两个不同的模型比较,需要熵作为中介。比如,黄金和白银比较价值,需要把他们都换算为美元,才能对比


1.信息量


1.不同的信息,含有不同的信息量,假设下列对阵表中阿根廷的夺冠概率是1/8,A同学告诉我阿根廷夺冠了,那么这个信息量就很大了(因为它包括了阿根廷进了四强,决赛);B同学告诉我阿根廷进决赛了,那么这个信息量就较小。


202206042246234.png


2.假设f(x):= 信息量(:=是定义符),x是信息


f ( 阿 根 廷 夺 冠 ) = f ( 阿 根 廷 进 决 赛 ) + f ( 阿 根 廷 赢 了 决 赛 )


因为事件越不确定,则其包含的信息量就越多,所以自变量又可以变为事件的概率


则有:


f ( 1 / 8 ) = f ( 1 / 4 ) + f ( 1 / 2 )


同时,也必须满足


。P ( 阿 根 廷 夺 冠 ) = P ( 阿 根 廷 进 决 赛 ) ∗ P ( 阿 根 廷 赢 得 了 决 赛 )


所以


🚀f ( P ( 阿 根 廷 夺 冠 ) ∗ P ( 阿 根 廷 赢 得 了 决 赛 ) ) = f ( P ( 阿 根 廷 进 决 赛 ) ) + f ( P ( 阿 根 廷 赢 得 了 决 赛 ) )


所以,用表达式中肯定有🌻log


又因为事件发生概率和信息量成反比,所以有 -log


202206042256684.png


2.熵


🔥熵:一个事件,从原来的不确定到完全确定,有多大的难度。而信息量的期望,就是熵H§


202206042245845.png


image.png

P f 是总信息量,f ( p i ) 是该事件的信息量,p i 是该事件发生的概率


交叉熵越小,两个模型就越接近


3.相对熵(KL散度)


f Q ( q i ) 表示Q系统的信息量;f P ( p i ) 是P系统的信息量


D K L ( P ∣ ∣ Q ) 表示两个系统的相对熵,或者说KL散度


D K L ( P ∣ ∣ Q ) 以P为基准,去考虑P、Q相差多少


D K L ( Q ∣ ∣ P )表示以Q为基准


$\sum_{i=1}^{m} p_{i} \cdot\left(f_{Q}\left(q_{i}\right)-f_{P}\left(p_{i}\right)\right) \$


f Q ( q i ) − f P ( p i ) 表示某一事件,在Q系统的信息量,减去P系统的信息量


83f52c22b9410c7e0a26033af49db9c2.png


image.png


image.png:P的熵,因为我们把P定做基准了,所以看散度时,只需要考虑image.png,这一部分,就是交叉熵了


202206092043871.png


1.二分类问题


交叉熵要包含所有可能的结果,而二分类的结果为:是/否,所以要有( 1 − x i ) ⋅ log ⁡ 2 ( 1 − y i )


image.png


2.多分类问题


KaTeX parse error: Expected 'EOF', got '&' at position 49: …boldsymbol{Q}) &̲ =\sum_{i=1}^{m…


4.交叉熵


2ecffdb29eeb97f089e37e0538ea4586.png


pytorch中的交叉熵有点不太一样,它是以softmax函数作为事件的概率


w c 是权重


理论很难,使用起来确很简单,就一句代码的事~😎


loss_fn = nn.CrossEntropyLoss() # 交叉熵损失


数学计算


image.png


程序


import torch
import torch.nn as nn
import math
criterion = nn.CrossEntropyLoss()
output = torch.randn(1, 5, requires_grad=True)
label = torch.empty(1, dtype=torch.long).random_(5)
loss = criterion(output, label)
print("网络输出为5类:")
print(output)
print("要计算label的类别:")
print(label)
print("计算loss的结果:")
print(loss)
first = 0
for i in range(1):
    first = -output[i][label[i]]
    print("output:{}".format(output[i]))
    print("label:{}".format(label[i]))
    print("first:{}".format(first))
second = 0
for i in range(1):
    for j in range(5):
        second += math.exp(output[i][j])
        print("second:{}".format(second))
res = 0
res = (first + math.log(second))
print("自己的计算结果:")
print(res)


手动计算


202206171751773.jpg


注意:python中log的底是e,即ln


e4d3c769a881af2e146d96336ac9eebd.png


程序输出


c27fb8e9a56e0df239656b935d207c43.png

相关文章
|
机器学习/深度学习 计算机视觉
深度学习常见的损失函数
深度学习常见的损失函数
172 1
深度学习常见的损失函数
|
2月前
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
237 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
3月前
|
机器学习/深度学习 自动驾驶 搜索推荐
深度学习之探索神经网络、感知器与损失函数
在当今的数字化时代,深度学习作为一种强大的机器学习技术,正在迅速改变着我们的生活方式。无论是智能推荐系统、自动驾驶车辆还是语音识别应用,深度学习都在背后默默地发挥作用。
56 1
|
4月前
|
机器学习/深度学习 编解码 算法
《零基础实践深度学习》2.5 手写数字识别之损失函数
这篇文章详细探讨了手写数字识别任务中损失函数的选择和优化,解释了为何均方误差不适用于分类任务,并介绍了Softmax函数和交叉熵损失函数在分类问题中的应用,以及如何使用PaddlePaddle框架实现这些概念来提升模型性能。
 《零基础实践深度学习》2.5 手写数字识别之损失函数
|
5月前
|
机器学习/深度学习 算法 数据挖掘
深度学习中常用损失函数介绍
选择正确的损失函数对于训练机器学习模型非常重要。不同的损失函数适用于不同类型的问题。本文将总结一些常见的损失函数,并附有易于理解的解释、用法和示例
166 0
深度学习中常用损失函数介绍
|
7月前
|
机器学习/深度学习 人工智能 测试技术
深度学习中损失函数和激活函数的选择
深度学习中损失函数和激活函数的选择
61 0
|
机器学习/深度学习 文字识别 算法
深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测
深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测
|
4天前
|
机器学习/深度学习 传感器 数据采集
深度学习在故障检测中的应用:从理论到实践
深度学习在故障检测中的应用:从理论到实践
30 5