机器学习--- 交叉熵损失(CrossEntropy Loss)--(附代码)
文章目录
- 一、 Softmax 介绍
- 1.1 Softmax 的形式
- 1.2 一些问题
- 1.2.1 为什么训练阶段需要 Softmax 层?推理阶段通常不使用 Softmax 层?
- 二、交叉熵损失(CrossEntropy Loss)
- 2.0 信息熵
- 2.0.0 定义:
- 2.0.1 KL散度 (Kullback–Leibler divergence)
- 2.0.2 JS 散度(Jensen-Shannon divergence)
- 2.0.3 KL散度和JS散度存在的问题:
- 2.1 交叉熵定义
- 2.1.1 为什么交叉熵可以作为**预测值和真实标签值的距离度量**?
- 2.2 交叉熵与 KL散度的关系
- 2.2.1 为什么使用交叉熵用在分类任务中?
- 2.3 在机器学习中的交叉熵
- 2.3.1 二分类的交叉熵损失
- 2.4 对交叉熵求导
- 2.4.1 计算 ∂Loss∂aj\frac{\partial Loss}{\partial {a_j}}∂aj∂Loss
- 2.4.2 计算 ∂aj∂zi\frac{\partial {a_j}}{\partial z_i}∂zi∂aj
- 1.当i=j时,有1. 当 i=j 时,有1.当i=j时,有
- 2.当i≠j时,有2. 当 i \neq j 时,有2.当i=j时,有
- 2.4.3 计算 ∂Loss∂zj\frac{\partial Loss}{\partial {z_j}}∂zj∂Loss
- 2.5 代码实现
- 2.5.1 python 代码实现
- 2.5.2 torch 代码实现 nn.NLLLoss()
- 2.5.3 torch 代码实现 nn.CrossEntropyLoss()
- 参考资料
一、 Softmax 介绍
1.1 Softmax 的形式
若 x=[x1⋯xi⋯xn]x = \left[ \begin{matrix} x_1 \\ \cdots \\ x_i \\ \cdots \\x_n \end{matrix} \right]x=⎣⎢⎢⎢⎢⎡x1⋯xi⋯xn⎦⎥⎥⎥⎥⎤,
那么 Softmax(x)=[ex1∑kexk⋯exi∑kexk⋯exn∑kexk]Softmax(x) = \left[ \begin{matrix} \frac{e^{x_1}}{\sum_k e^{x_k}} \\ \cdots \\ \frac{e^{x_i}}{\sum_k e^{x_k}} \\ \cdots \\\frac{e^{x_n}}{\sum_k e^{x_k}} \end{matrix} \right]Softmax(x)=⎣⎢⎢⎢⎢⎢⎡∑kexkex1⋯∑kexkexi⋯∑kexkexn⎦⎥⎥⎥⎥⎥⎤
若 y=Softmax(x)y = Softmax(x)y=Softmax(x), 那么对于任意 yiy_iyi 有以下特点:
- yi∈(0,1)y_i \in (0,1)yi∈(0,1),且 ∑iyi=1\sum_i y_i = 1∑iyi=1, ⟹\Longrightarrow⟹ yi可以看做是类i的概率y_i 可以看做是 类 i 的概率yi可以看做是类i的概率
- 在 计算任意一个 yiy_iyi 时, 都会用到所有的 xix_ixi
- 会产生马太效应 ⇒\Rightarrow⇒ “大的更大, 小的更小” ⇒\Rightarrow⇒ 以 eee 为底数, exe^xex 会随着 xxx 的增大而急剧增大。
1.2 一些问题
1.2.1 为什么训练阶段需要 Softmax 层?推理阶段通常不使用 Softmax 层?
相同的问题:
由于 Softmax 函数具有保序性,在推理时,去掉 Softmax 也总能找到最大概率的类别,去掉与否有什么差别?在推理阶段 为 样本 XXX 分配最优的类别 YYY 实际上有三类模型,对应三种层次的需求。
{生成模型判别模型判别函数\begin{cases} 生成模型\\ 判别模型 \\ 判别函数 \end{cases}⎩⎪⎨⎪⎧生成模型判别模型判别函数生成模型
- 不仅关心 给定XXX 时 YYY 的概率分布;还关心输入变量的分布。
- 建模的是 X和Y的联合分布P(XY)X 和 Y 的联合分布 P(XY)X和Y的联合分布P(XY); 在决策时 通过 BayesBayesBayes 定理获取条件分布P(Y∣X)P(Y|X)P(Y∣X)
- 决策结果
- 条件概率分布
- 输入的边际分布
判别模型
- 只关心 给定XXX 时 YYY 的概率分布;不关心输入变量的分布。
- 建模的是 条件分布 $P(Y|X)。
- 不仅可以获得一个 决策结果(给定XXX 时,最优的 YYY)
- 还可以得到模型给出的 条件分布(模型决策结果的置信度)
判别函数
- 不关心 给定XXX 时 YYY 的概率分布;只关心输入和输出的一种对应关系。
- 建模的是 判定函数Y=f(x)判定函数 Y= f(x)判定函数Y=f(x)
- 只能得到 Input和OutputInput 和 OutputInput和Output之间的对应关系
- 无法获得任何其他信息
- 在分类场景中:只得到一个分类的决策边界。
解答:
SoftmaxSoftmaxSoftmax 函数一般对应判别函数
将SoftmaxSoftmaxSoftmax 作为 LossLossLoss 的一部分,可以认为你得到一个判别模型。
如果不关心模型决策的条件概率分布,那么去掉SoftmaxSoftmaxSoftmax 没有什么差别。
二、交叉熵损失(CrossEntropy Loss)
2.0 信息熵
- 熵 是关于不确定性的数学描述。
- 信息的大小跟随机事件的概率有关。越小概率的事情发生了产生的信息量越大。
- 所以 信息的量度应该依赖于概率分布 p(x)p(x)p(x)
- 性质:
- 单调性:发生概率越高的事件,其携带的信息量越低;
- 非负性:信息熵可以看作为一种广度量,非负性是一种合理的必然;
- 累加性:即多随机事件同时发生存在的总不确定性的量度是可以表示为各事件不确定性的量度的和,这也是广度量的一种体现。
2.0.0 定义:
- 熵描述的是整个系统内部样本之间的一个距离,或者称之为系统内样本分布的集中程度(一致程度)、分散程度、混乱程度(不一致程度)。
- 系统内样本分布越分散(或者说分布越平均),信息熵就越大。
- 分布越有序(或者说分布越集中),信息熵就越小。
- 数学公式表示:
H(X)=−∑i=1np(xi)logp(xi)H(X) = - \sum_{i=1}^n p(x_i)\ log\ p(x_i)H(X)=−i=1∑np(xi) log p(xi)- 对概率取负对数表示了一种可能事件发生时候携带出的信息量。
- 把各种可能表示出的信息量乘以其发生的概率之后求和,就表示了整个系统所有信息量的一种期望值。
2.0.1 KL散度 (Kullback–Leibler divergence)
- 作用:
- 用于衡量两个概率分布之间的差异。值越小,表示两个分布越接近。
- 数学形式
- 离散形式:DKL(p∣∣q)=∑i=1np(xi)log(p(xi)q(xi))D_{KL}(p||q) = \sum_{i=1}^n p(x_i) log(\frac{p(x_i)}{q(x_i)})DKL(p∣∣q)=i=1∑np(xi)log(q(xi)p(xi))
- 连续形式:DKL(A∣∣B)=∫a(x)log(a(x)b(x))D_{KL}(A||B) = \int a(x) log(\frac{a(x)}{b(x)})DKL(A∣∣B)=∫a(x)log(b(x)a(x))
- 特点
- 非对称性 KL(p∣∣q)≠KL(q∣∣p)KL(p || q) \neq KL(q || p)KL(p∣∣q)=KL(q∣∣p),KL散度尽管被用来度量两个分布的相似度或者说距离,但是KL散度本身不是距离。
- 非负性,【当 p(x)和q(x)p(x) 和 q(x)p(x)和q(x)两个分部完全相同时,其值=0,】
- 不满足三角不等式性
本质上,KL散度度量的是两者之间的信息损失,而不是两者之间的距离。
2.0.2 JS 散度(Jensen-Shannon divergence)
- JS散度度量两个概率分布的差异度,它基于KL散度的变体,
- 解决了KL散度非对称的问题
- 其取值是 0 到 1 之间。
定义如下:
JS(p∣∣q)=12KL(p,p+q2)+12KL(q,p+q2)J S ( p ∣ ∣ q ) = \frac{1}{2} KL( p , \frac{p + q}{ 2 }) + \frac{1}{2} K L ( q , \frac{p + q}{ 2 } ) JS(p∣∣q)=21KL(p,2p+q)+21KL(q,2p+q)
2.0.3 KL散度和JS散度存在的问题:
- 如果两个分配
机器学习--- 交叉熵损失(CrossEntropy Loss)--(附代码)相关推荐
- 【BraTS】Brain Tumor Segmentation 脑部肿瘤分割4--UNet的损失函数(交叉熵损失Cross-Entropy,Dice Loss和Focal Loss)
下面,是我与chatGPT3.5的一段对话,主要是从以下几个点展开的: UNet是什么? UNet输出的channel和pixel表示什么? UNet计算损失使用的什么函数? Cross-Entrop ...
- 机器学习中的损失函数(交叉熵损失、Hinge loss)
损失函数 文章目录 损失函数 1 交叉熵损失 1.1 从最大似然估计到交叉熵损失 概率论中的MLE 机器学习中的MLE 交叉熵损失 1.2 多分类的交叉熵损失函数 1.3 比较 2. Hinge lo ...
- sklearn基于make_scorer函数为Logistic模型构建自定义损失函数+代码实战(二元交叉熵损失 binary cross-entropy loss)
sklearn基于make_scorer函数为Logistic模型构建自定义损失函数+代码实战(二元交叉熵损失 binary cross-entropy loss) # 广义线性模型中的各种连接函数: ...
- 【损失函数】NLLLoss损失、CrossEntropy_Loss交叉熵损失以及Label Smoothing示例与代码
机缘巧合下,近期又详细学习了一遍各损失函数的计算,特此记录以便后续回顾. 为了公式表示更加清晰,我们设 y n ∈ { 1 , 2 , - , K } {{y_n} \in \{ 1,2, \ ...
- 交叉熵损失(Cross Entropy Loss)计算过程
交叉熵损失(Cross Entropy Loss)计算过程_藏知阁-CSDN博客_交叉熵计算公式
- 【机器学习】 二次损失函数的不足及交叉熵损失softmax详解
二次代价函数的不足: 以sigmoid激活函数为例,由于初始化是随机的,假设目标值为0,第一次随机初始化使得输入为0.82,那么还可以,多次迭代之后可以收敛到0.09,但如果第一次随机初始化到0.98 ...
- 神经网络适用于分类问题的最后一层-Softmax和交叉熵损失介绍及梯度推导
前言 传统机器学习中两大经典任务就是回归与分类.分类在深度学习中也很常见,令我印象最深的是图像分类.当然,在NLP中,分类也无处不在.从RNN与其变体,到Transformer.Bert等预训练模型, ...
- Softmax函数下的交叉熵损失含义与求导
交叉熵损失函数(CrossEntropy Function)是分类任务中十分常用的损失函数,但若仅仅看它的形式,我们不容易直接靠直觉来感受它的正确性,因此我查阅资料写下本文,以求彻底搞懂. 1.Sof ...
- 交叉熵损失公式与手动计算
1.交叉熵损失函数 交叉熵的公式有多种形式,一般写作 loss=−1n∑j=1nyjlnaj(∗∗)loss=-\frac{1}{n}\sum_{j=1}^{n}y_jlna_j (**) loss= ...
最新文章
- Pytorch使用tensorboardX可视化。超详细
- linux 安装分区设置分区大小
- JavaScript 高级程序设计第四章解读,总结。
- 吴恩达【深度学习工程师】 04.卷积神经网络 第四周特殊应用(1)人脸识别
- 在四个小时内组装好这个游戏机
- rnn 简要_注重文化的简要招聘指南
- 三菱四节传送带控制梯形图_【毕业设计】三菱plc(论文)基于PLC的传送带的控制系统设计毕业设计...
- 52 - 算法 - LeetCode 21 数据结构链表 头插法 递归
- MySQL-InnoDB-事务
- 计算机类和鼠标类是什么关系,什么是机械鼠标和光学鼠标?两者有什么区别?...
- Python Flask微信公众号开发
- linux 命令chmod 755的意思
- 股票实时数据如何分析?
- 初识FineBI数据分析
- presto获取上月第一天和最后一天、当月第一天
- JavaWeb09_Cookie Session
- 【Python turtle 画爱心】实战学习
- python-22-使用Kivy开发手机app
- 短视频平台搭建图片压缩
- Android WebView截屏空白或者一片黑如何解决?使用MediaProjection截图。
热门文章
- 【BraTS】Brain Tumor Segmentation 脑部肿瘤分割4--UNet的损失函数(交叉熵损失Cross-Entropy,Dice Loss和Focal Loss)