| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 理解「交叉熵」损失函数(包含自信息、信息熵、KL散度、交叉熵概念整理) -> 正文阅读 |
|
[人工智能]理解「交叉熵」损失函数(包含自信息、信息熵、KL散度、交叉熵概念整理) |
文章目录引言KL散度、交叉熵通常被用来衡量两个分布之间的差异程度,可以用于衡量模型的“损失”。 要深入理解KL散度和交叉熵,首先要从信息论中的基础概念入手。 自信息(self-information)假如有两条消息,一条内容是“今天太阳从东边升起”,另一条内容是“今天有日食”。 显然后一条消息的发生概率低,消息内容也更有信息量。 信息论的目标之一就是用最少的编码来传递信息。概率越低的事件,对应更高的信息量,概率越高的事件,对应更低的信息量。 所以在信息论中,把发生随机事件
X
=
x
X=x
X=x时的信息量进行量化,定义为自信息1:
信息熵/香农熵(Entropy)自信息反映的是单个随机事件的信息量,如果要反映整个随机变量分布的信息量,可以用数学期望来衡量这个分布的信息总量,这就是香农熵,又称为信息熵: 信息熵给出了对分布为P的符号进行编码时的最优平均编码长度2。单位与自信息相同。 KL散度(Kullback-Leibler(KL)divergence)KL散度也叫KL距离或相对熵(Relative Entropy),用来表达以分布Q来近似分布P时的信息损失量。
D
K
L
(
P
,
Q
)
=
E
x
~
P
(
l
o
g
P
(
x
)
?
l
o
g
Q
(
x
)
)
D_{KL}(P,Q)=\mathbb{E}_{\bold{x} \text{\textasciitilde} P}{(log {P(x)}-log{Q(x)})}
DKL?(P,Q)=Ex~P?(logP(x)?logQ(x)) 交叉熵(cross-entropy)交叉熵 H ( P , Q ) H(P,Q) H(P,Q)与KL散度相比,少一项 H ( P ) H(P) H(P):
H
(
P
,
Q
)
=
?
E
x
~
P
l
o
g
Q
(
x
)
H(P,Q)=-\mathbb{E}_{\bold{x} \text{\textasciitilde} P}{log{Q(x)}}
H(P,Q)=?Ex~P?logQ(x) 由于训练数据上的经验分布
P
^
d
a
t
a
\hat{P}_{data}
P^data?是不变的,所以最小化两个分布之间的差异性,就相当于最小化两个分布之间的交叉熵: 分类任务中的交叉熵损失交叉熵可以衡量模型输出和标签之间的距离,所以机器学习、深度学习都常用交叉熵作为损失函数。 以分类任务为例,标签是 [ 0 , 0 , 1 ] T [0, 0, 1]^T [0,0,1]T,而模型的输出概率是 [ 0.3 , 0.3 , 0.4 ] T [0.3, 0.3, 0.4]^T [0.3,0.3,0.4]T,则交叉熵损失为 ? ( 0 × l o g ( 0.3 ) + 0 × l o g ( 0.3 ) + 1 × l o g ( 0.4 ) ) = ? l o g ( 0.4 ) -(0×log(0.3)+0×log(0.3)+1×log(0.4)) = -log(0.4) ?(0×log(0.3)+0×log(0.3)+1×log(0.4))=?log(0.4)。2 为了减少模型输出和标签之间的距离,模型学习的准则就是找到使经验风险最小化的参数。 经验风险用训练集
D
D
D上的平均损失来表示: pytorch代码示例pytorch中交叉熵损失对应的实现是torch.nn.CrossEntropyLoss3。
前向计算:
CrossEntropyLoss结合了LogSoftmax4 + NLLLoss5,通过在网络的最后一层添加LogSoftmax层,可以轻松获得神经网络中的对数概率 。如果不想添加额外的层,可以直接用CrossEntropyLoss。 以上一节的分类任务为例,标签是 [ 0 , 0 , 1 ] T [0, 0, 1]^T [0,0,1]T,而模型输出是 [ 0.3 , 0.3 , 0.4 ] T [0.3, 0.3, 0.4]^T [0.3,0.3,0.4]T,计算一下nn.CrossEntropyLoss的损失是多少:
输出:0.9162907318741551,与前面计算的-log(0.4)的结果一致。 小结简单总结一下本文涉及的基本概念:
如果本文对你有帮助的话,欢迎一键三连支持下博主~ |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 10:30:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |