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

相关文章
|
9月前
|
机器学习/深度学习 计算机视觉
深度学习常见的损失函数
深度学习常见的损失函数
113 1
深度学习常见的损失函数
|
1月前
|
机器学习/深度学习 人工智能 测试技术
深度学习中损失函数和激活函数的选择
深度学习中损失函数和激活函数的选择
30 0
|
机器学习/深度学习 文字识别 算法
深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测
深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测
|
机器学习/深度学习 搜索推荐 PyTorch
机器学习/深度学习中的常用损失函数公式、原理与代码实践(持续更新ing...)
本文的结构是首先介绍一些常见的损失函数,然后介绍一些个性化的损失函数实例。
机器学习/深度学习中的常用损失函数公式、原理与代码实践(持续更新ing...)
|
机器学习/深度学习 人工智能 自然语言处理
深度学习与CV教程(3) | 损失函数与最优化
本文讲解了损失函数(数据损失与正则损失)、多类 SVM 损失与Softmax损失比较、梯度计算方法(数值梯度与解析梯度)、梯度下降优化算法等【对应 CS231n Lecture 3】
1476 3
深度学习与CV教程(3) | 损失函数与最优化
|
机器学习/深度学习 存储 人工智能
【深度学习之美】损失函数减肥用,神经网络调权重(入门系列之六)
有人开玩笑说,男人有两大烦恼:一是把别人的肚子搞大了,二是把自己的肚子搞大了。对于后者,除了减(jian)肥(shen),似乎别无他法。可你知道吗?这减肥背后的机理,和前馈神经网络利用损失函数,来反向调节各个神经元之间的连接权重,其实是一样一样的。为啥咧?
2959 1
|
1天前
|
机器学习/深度学习 自然语言处理 数据可视化
深度学习在自然语言处理中的应用与挑战
随着人工智能技术的飞速发展,深度学习已成为自然语言处理(NLP)领域的核心驱动力。本文将深入探讨深度学习在NLP中的广泛应用,包括语音识别、机器翻译、情感分析等方面,并分析其面临的挑战,如数据稀缺性、模型可解释性等问题。通过引用权威研究数据和案例,揭示深度学习技术在推动NLP进步的同时,如何应对这些挑战,以实现更高效、准确的语言处理能力。
7 1
|
1天前
|
机器学习/深度学习 自动驾驶 算法
深度学习在图像识别中的应用与挑战
本文深入探讨了深度学习技术在图像识别领域的应用及其面临的主要挑战。通过分析近期的科研数据和实验结果,我们揭示了深度学习模型在提高图像识别准确率方面的潜力以及存在的局限性。同时,文章还讨论了如何通过技术创新克服这些挑战,以实现更高效、更准确的图像识别。