深度学习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

相关文章
|
12月前
|
机器学习/深度学习 计算机视觉
深度学习常见的损失函数
深度学习常见的损失函数
137 1
深度学习常见的损失函数
|
4天前
|
机器学习/深度学习 自动驾驶 搜索推荐
深度学习之探索神经网络、感知器与损失函数
在当今的数字化时代,深度学习作为一种强大的机器学习技术,正在迅速改变着我们的生活方式。无论是智能推荐系统、自动驾驶车辆还是语音识别应用,深度学习都在背后默默地发挥作用。
13 1
|
1月前
|
机器学习/深度学习 编解码 算法
《零基础实践深度学习》2.5 手写数字识别之损失函数
这篇文章详细探讨了手写数字识别任务中损失函数的选择和优化,解释了为何均方误差不适用于分类任务,并介绍了Softmax函数和交叉熵损失函数在分类问题中的应用,以及如何使用PaddlePaddle框架实现这些概念来提升模型性能。
 《零基础实践深度学习》2.5 手写数字识别之损失函数
|
2月前
|
机器学习/深度学习 算法 数据挖掘
深度学习中常用损失函数介绍
选择正确的损失函数对于训练机器学习模型非常重要。不同的损失函数适用于不同类型的问题。本文将总结一些常见的损失函数,并附有易于理解的解释、用法和示例
51 0
深度学习中常用损失函数介绍
|
4月前
|
机器学习/深度学习 人工智能 测试技术
深度学习中损失函数和激活函数的选择
深度学习中损失函数和激活函数的选择
47 0
|
机器学习/深度学习 文字识别 算法
深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测
深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测
|
机器学习/深度学习 搜索推荐 PyTorch
机器学习/深度学习中的常用损失函数公式、原理与代码实践(持续更新ing...)
本文的结构是首先介绍一些常见的损失函数,然后介绍一些个性化的损失函数实例。
机器学习/深度学习中的常用损失函数公式、原理与代码实践(持续更新ing...)
|
3天前
|
机器学习/深度学习 监控 自动驾驶
基于深度学习的图像识别技术及其应用
【9月更文挑战第16天】本文深入探讨了基于深度学习的图像识别技术,并详细阐述了其在不同领域的应用。通过分析深度学习在图像识别中的作用机制和关键技术,本文揭示了该技术在自动驾驶、医疗诊断、安防监控等领域的应用前景。同时,文章还讨论了当前面临的挑战和未来的发展方向,为读者提供了对深度学习图像识别技术的全面认识。