CNN基础知识 || softmax与交叉熵

softmax+交叉熵 1、softmax函数 softmax函数的定义为: softmax函数的特点: ● 函数值在[0,1]之间; ● 所有的softmax(xi)相加的总和是1 面对一个分类问题,能将输出的yi转换成[0,1]的概率,选择最大的概率yi作为分类的结果。 sigmoid函数定义为: sigmoid函数将每个yi映射到[0,1]之间,但每个yi之间是相互独立的,∑yi与1没有关系,可以用作二分类;而softmax函数的本质是将一个k维数据[a1,a2,a3,…,ak]映射成另外一个K维向量[b1,b2,b3 阅读详情

一、函数

1 sigmoid

将一个数值通过函数映射到0-1之间。
sigmoid函数表达式如下
                                                                        
可以看到在趋于正无穷或负无穷时,函数趋近平滑状态,sigmoid函数因为输出范围(0,1),所以二分类的概率常常用这个函数。优点:1.值域在0和1之间;2.函数具有非常好的对称性

2 softmax

将一组数值进行组间的指数归一化

指数函数的值域取值范围是零到正无穷。与概率取值相似的地方是它们都是非负实数。那么我们可以利用指数函数将多分类结果映射到零到正无穷。然后进行归一化处理,便得到了近似的概率。

  1. 分子:通过指数函数,将实数输出映射到零到正无穷
  2. 分母:将所有结果相加,进行归一化。

二、熵的梳理

1 信息量

首先是信息量。假设我们听到了两件事,分别如下: 
事件A:巴西队进入了2018世界杯决赛圈。 
事件B:中国队进入了2018世界杯决赛圈。 
仅凭直觉来说,显而易见事件B的信息量比事件A的信息量要大。究其原因,是因为事件A发生的概率很大,事件B发生的概率很小。所以当越不可能的事件发生了,我们获取到的信息量就越大。越可能发生的事件发生了,我们获取到的信息量就越小。那么信息量应该和事件发生的概率有关。

                       
由于是概率所以p(x0)的取值范围是[0,1][0,1],绘制为图形如右图

2 熵(信息量的期望)

考虑另一个问题,对于某个事件,有nn种可能性,每一种可能性都有一个概率p(xi)
这样就可以计算出某一种可能性的信息量。举一个例子,假设你拿出了你的电脑,按下开关,会有三种可能性,下表列出了每一种可能的概率及其对应的信息量

我们现在有了信息量的定义,而熵用来表示所有信息量的期望,即:
                                                      

其中n代表所有的n种可能性,所以上面的问题结果就是

                                                 

然而有一类比较特殊的问题,比如投掷硬币只有两种可能,字朝上或花朝上。买彩票只有两种可能,中奖或不中奖。我们称之为0-1分布问题(二项分布的特例),对于这类问题,熵的计算方法可以简化为如下算式
                                                    

3 相对熵

相对熵又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异。

在机器学习中,P往往用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。Q用来表示模型所预测的分布,比如[0.7,0.2,0.1] 。
直观的理解就是如果用P来描述样本,那么就非常完美。而用Q来描述样本,虽然可以大致描述,但是不是那么的完美,信息量不足,需要额外的一些“信息增量”才能达到和P一样完美的描述。如果我们的Q通过反复训练,也能完美的描述样本,那么就不再需要额外的“信息增量”,Q等价于P。KL散度的计算公式:

                                                            
n为事件的所有可能性。
Dkl的值越小,表示q分布和p分布越接近。

4 交叉熵

对上面的式子进行形变得到:

                                                         

等式的前一部分恰巧就是p的熵,等式的后一部分,就是交叉熵:

                                                                

在机器学习中,我们需要评估label和predicts之间的差距,使用KL散度刚刚好,即DKL(y||y^)DKL(y||y^),由于KL散度中的前一部分−H(y)−H(y)不变,故在优化过程中,只需要关注交叉熵就可以了。所以一般在机器学习中直接用用交叉熵做loss,评估模型。

三、机器学习中交叉熵的应用

1.为什么使用交叉熵

在线性回归问题中,常使用到MSE(Mean Squared Error)作为loss函数,比如:
                                                   

这里的m表示m个样本,loss为m给我样本的loss均值
MSE在线性回归问题中比较好用,那么在逻辑分类问题中还是如此么

2 交叉熵在一对一分类问题中的使用

这里的一对一是指,每一张图像样本只能有一个类别,比如只能是狗或者只能是猫。
交叉熵在一对一问题上基本是标配的方法

                                                    

上式为一张样本的loss计算方法。式2.1中n代表着n种类别。

举例说明,比如有如下样本:

对应的标签和预测值
(网络的预测向量的和并不为1,一对一要求所有的概率和为1。所以网络最后一层要经过softmax,进行指数归一化,转成和为1的向量)

那么有

                             

对应的一个batch的loss就是
                               
m为当前batch的样本数

3 交叉熵在一对多分类问题中的使用

这里是指每一张图像样本可以有多个类别,比如同时包含一只猫和一只狗。
比如下面这张样本图,即有青蛙,又有老鼠,所以是一对多的分类问题

对应的标签和预测值
(网络的预测向量的每个值并不在0-1之间,一对多要求所有的概率处于0-1之间。所以网络最后一层要经过sigmoid,进行转换,保证每个值都在0-1之间)

对于预测向量的每一个值,我们可以看成是二分类的问题,交叉熵可以简化成

                                               

注意,上式只是针对一个节点的计算公式。这一点一定要和单分类loss区分开来。
例子中可以计算为:

                                     

单张样本的loss即为
每一个batch的loss就是:

                                         

式中m为当前batch中的样本量,n为类别数4

4 softmax和cross-entropy的关系

softmax是计算概率分布。cross-entropy是计算两个概率分布的相似性。求概率分布的方式和损失函数之间没有必然的联系。是在神经网络当中,经常会用softmax函数计算概率,然后再用cross-entropy计算损失值。

 

四 tensorflow中的使用

1 softmax_cross_entropy_with_logits
与 sparse_softmax_cross_entropy_with_logits

(用在一对一的分类的网络中)

(1) 在计算loss的时候,最常见的就是softmax_cross_entropy_with_logits

loss = tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)
loss = tf.reduce_mean(loss)
  • 参数logits:神经网络最后一层的输出,如有batch,它的大小为[batchsize, num_classes],类型为 float16/32/64
  • 参数labels:实际的标签,大小类型和logits保持一致

 等价于

y = tf.nn.softmax(logits)                   
cross_entropy = -y_*tf.log(y)               #向量
loss = tf.reduce_sum(cross_entropy)         #值
  • 网络的输出是向量,要先进行softmax(转换成概率)然后计算交叉熵(label的概率和预测的概率的分布的差异)

(2) sparse_softmax_cross_entropy_with_logits

label = [0,1,3,2]
logits = tf.convert_to_tensor([[1.0,2.0,3.0], [1.0, 2.0, 3.0],[1.0,2.0,3.0]])   #our NN's output
cross_entropy = tf.reduce_sum(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=label,logits=logits))
  • label:元素的类型为int,大小为[batch]
  • logits:网络的输出。元素为tf.float,大小为[batch, num_classes]

栗子

import tensorflow as tf

label_or = [0,2,1]
label = tf.cast(label_or, tf.int32)
label = tf.one_hot(label, 3, 1, 0, axis=0)       #3:分3类,类别位置为1,其余为0,
label = tf.to_float(label)
# label = [[1 0 0 0], [0 0 1 0], [0 1 0 0]]      #true label

a = [[1.0,2.0,3.0], [1.0, 2.0, 3.0],[1.0,2.0,3.0]]
logits = tf.convert_to_tensor(a)   #our NN's output

y = tf.nn.softmax(logits)                          # 默认axis = -1
# predicts = tf.argmax(y, axis=-1, name='predicts')  # 预测时候使用
  
cross_entropy = -tf.reduce_sum(label*tf.log(y))   #不推荐。当a的元素过大,自己写的交叉熵计算会失败
cross_entropy2 = tf.reduce_sum(tf.nn.softmax_cross_entropy_with_logits(labels=label, logits=logits))
cross_entropy3 = tf.reduce_sum(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=label_or,logits = logits))  #label_or必须在0-(n-1)之间,n为分类数量

with tf.Session() as sess:
    print('step1: softmax is:',sess.run(y))
    print('softmax method 1 is:', sess.run(cross_entropy))
    print('softmax method 2 is:',sess.run(cross_entropy2))
    print('softmax method 3 is:',sess.run(cross_entropy3))

softmax的计算与数值稳定性

在Python中,softmax函数为:

def softmax(x):
    exp_x = np.exp(x)
    return exp_x / np.sum(exp_x)

# 传入数值较小时
softmax([1, 2, 3, 4, 5])
# array([ 0.01165623,  0.03168492,  0.08612854,  0.23412166,  0.63640865])

# 传入数值较大时
softmax([1000, 2000, 3000, 4000, 5000])
# array([ nan,  nan,  nan,  nan,  nan])

这是因为在求exp(x)时候溢出了:

import math
math.exp(1000)
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# OverflowError: math range error

一种简单有效避免该问题的方法就是让exp(x)中的x值不要那么大或那么小,在softmax函数的分式上下分别乘以一个非零常数: 

这样做相当于

def softmax(x):
    shift_x = x - np.max(x)   #[1000, 2000, 3000, 4000, 5000]==>>[-4000,-3000,-2000,-1000,0]
    exp_x = np.exp(shift_x)
    return exp_x / np.sum(exp_x)

a = softmax([1000, 2000, 3000, 4000, 5000])
# array([ 0.,  0.,  0.,  0.,  1.])

这样也是有问题的:softmax函数不可能产生0值,但这总比出现nan的结果好,并且真实的结果也是非常接近0的。

在tensorflow中tf.nn.softmax和tf.nn.softmax_cross_entropy_with_logits等都将这个滑动操作添加。自己写交叉熵时,输入元素较大时得到的输出元素中出现为0,计算tf.log会失败。

2 sigmoid_cross_entropy_with_logits

(用在一对多分类的网络中)
用法和softmax_cross_entropy_with_logits基本一样,原理有所差别

 

 

 

 

 

 

 

 

 

 

softmax函数与交叉熵损失详解 由于Softmax函数的数值计算过程中,很容易因为输出节点的输出值比较大而发生数值溢出的现象,在计算交叉熵的时候也可能会出现数值溢出的问题。softmax直白来说就是将原来输出是3,1,-3通过softmax函数一作用,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标!结果还是挺明显的,经过使用指数形式的Softmax函数能够将差距大的数值距离拉的更大。 阅读详情

相关推荐

关于交叉熵(Cross Entropy)与Softmax

目录 写在前面 KL散度 交叉熵 Softmax 交叉熵与Softmax的关系 交叉熵损失 Softmax的求导 堆叠+向量化 其他关于Softmax函数的问题 赠品 写在前面 Softmax、交叉熵、交叉熵损失是机器学习与神经网络模型的重要组成部分,一般来说,Softmax一般用于criterion(标准),交叉熵与交叉熵损失用来衡量模型预测与实际结果间的差别并产生用于反向传播的梯度。...

qqq_aaa_zzz1的博客 5040

熵,交叉熵与softmax

参考视频链接:各种熵视频了解 经常说交叉熵+softmax(或者交叉熵损失函数),应该是对多分类下,softmax作为最后一层输出,交叉熵再判断这softmax的概率和真实值之间对不对(感觉不对,应该是用softmax的公式去求交叉熵简化公式中的q(ci)q(c_i)q(ci​))。二分类其实也可以,只是不常用softmax吧。softmax和sigmoid一样可以做激活,在最后一层就叫损失,前者多分类,后者二分类。 熵:是一个物理学概念,一个系统的不确定性程度,或者说是一一个系统的混乱程度。 信息熵:一

weixin_49497024的博客 711

卷积神经网络系列之softmax loss对输入的求导推导

我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CNN网络主要包含卷积层,池化层(pooling),全连接层,损失层等。虽然现在已经开源了很多深度学习框架(比如MxNet,Caffe等),训练一个模型变得非常简单,但是你对损失函数求梯度是怎么求的真的了解吗?相信很多人不一定清楚。虽然网上的资料很多,但是质量参差不齐,常常看得眼花缭乱。为了让大家少走弯路,特地整理了下这些知识点...

AI之路 2万+

简简单单了解一下softmax与交叉熵

也看了不少softmax和交叉熵的文章了,不少文章对它们的来龙去脉做了比较清晰地梳理,有些文章讲得过于复杂,从信息量、相对熵(KL散度)讲到交叉熵,对于想要实际应用的同学来说,其实没有必要掌握它的来龙去脉,于是在此,对softmax和交叉熵的概念和公式进行简要说明,辅助以实际例子对它们具体说明。

非晚非晚的博客 4635

softmax函数和交叉熵损失函数

在CNN中,全连接层后会加上softmax函数,并且一般用交叉熵函数作为损失函数。这篇文章主要记录softmax把CNN的输出变成概率的过程以及交叉熵如何为优化过程提供度量,并且用python实现。 softmax函数 softmax函数将一个N维向量的输入的每一维都转换成区间维(0,1)之间的一个实数,公式如下: pi=eai∑Nk=1eakpi=eai∑k=1Nekap_i=\frac{...

诗蕊的专栏 7008

台湾大学李宏毅:图解卷积神经网络CNN

台湾大学李宏毅老师图解卷积神经网络CNN

尤尔小屋 3856

卷积神经网络系列之softmax,softmax loss和cross entropy的讲解

我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CNN网络主要包含卷积层,池化层(pooling),全连接层,损失层等。虽然现在已经开源了很多深度学习框架(比如MxNet,Caffe等),训练一个模型变得非常简单,但是你对这些层具体是怎么实现的了解吗?你对softmax,softmax loss,cross entropy了解吗?相信很多人不一定清楚。虽然网上的资料很多,但是...

AI之路 18万+

tensorflow下运行softmax和CNN实例

#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: cc """ tensorflow中采用softmax分类mnist """ # 1) 载入数据 # 从目录:/home/cc/tensorflow/lib/python2.7/site-packages/ ... \ # tensorflow/examples/tutorials/m

cc的博客 2803

交叉熵与 Softmax 在多分类问题中的应用

交叉熵与 Softmax 在多分类问题中的应用 文章目录交叉熵与 Softmax 在多分类问题中的应用Softmax 函数交叉熵损失函数实际案例数据准备模型结构训练过程示例计算平均交叉熵损失不使用平均交叉熵的影响实例分析关注真实类别的预测概率小结 在机器学习和深度学习中,Softmax 函数和交叉熵损失函数是解决多分类问题的关键组成部分。本文将详细介绍这两个概念,并通过一个实际案例来说明它们的应用。 Softmax 函数 Softmax 函数是一个常用的激活函数,用于将一组数值转换为概率分布。假设我们

weixin_51524504的博客 1457

一文读懂卷积神经网络中softmax,softmaxloss, 交叉熵的理解

softmax:应用于分类问题,位于卷积神经网络层的最后一层。 softmax意义:输出输入图片,对应概率最大的类别,以及属于该类别的可能性概率。 以下文献对softmax有很好的解释: https://blog.youkuaiyun.com/u014380165/article/details/77284921 ...

weixin_38410551的博客 5114

001-基础入门-Web演示源码&资源&工具箱等

小迪安全2023笔记

wushangyu32335的博客 4263

一文读懂Softmax与卷积:CNN的核心原理详解

本文介绍了卷积神经网络(CNN)中的两个核心组件:Softmax和卷积。Softmax通过指数归一化将原始分数转换为概率分布,使分类结果直观可解释,且与交叉熵损失结合提高了训练效率。卷积则通过滑动窗口提取局部特征,不同卷积核可检测边缘、纹理等模式。两者协同工作:卷积层逐步抽象特征,Softmax完成最终分类决策,共同构成CNN的基础架构。理解这两个组件对掌握深度学习模型原理至关重要。

hour_go的博客 1246

数字信号的艺术演绎:用FPGA+DAC实现音乐合成器的核心原理

本文深入探讨了如何利用FPGA和DAC技术实现数字音乐合成器的核心原理,涵盖DDS架构、多波形合成、MIDI协议解析及动态包络控制等关键技术。通过详细的Verilog代码示例和硬件实现方案,展示了数字信号处理在音乐合成中的艺术演绎,为电子音乐创作提供了强大的硬件支持。

weixin_28256233的博客 390

全面理解softmax与交叉熵

交叉熵的作用 想了解softmax函数的原理以及交叉熵的配合使用,看我的这一篇博文基本足够了,其他人要么写的不够清晰,甚至有错误,要么不够全面,你可以查看我的引用链接获取更加详细的推导流程,用图表示,很良心的写法。 交叉熵最早起源于信息论,1948 年,香农提出了“信息熵”(shāng) 的概念,才解决了对信息的量化度量问题。 一条信息的信息量大小和它的不确定性有直接的关系。比如说,...

edward_zcl的博客 1万+

中国高精度年度平均气温栅格数据集(1901-2024)

本文基于中国月度平均气温栅格数据集,计算生成1901-2024年1km分辨率的年度平均气温数据集,并按中国省市行政区划进行裁剪。该数据集融合CRU全球数据和WorldClim高分辨率数据,经496个站点验证,具有高时空精度和长时间序列特点,覆盖全国(含港澳台)逾百年气温记录,为气候变化研究、生态水文分析及农业生产评估等提供重要数据支撑。数据格式为Tif,单位为0.1℃,可获取全国、各省及各市三个尺度的气温栅格数据。

PPdata_Academy的博客 1244

Vue+Echarts监控大屏实例四:智慧农业监控模板实例

本实例通过Vue-Echarts实现了智慧农业监控模板实例界面,学习并使用了vue-echarts的使用,接入高德地图并展示,添加了全屏切换、加载动画小鼓、站点切换及退出等相关功能,提供源码下载。

Java、前端、小程序学习笔记、问题汇总、项目实例分享,有需要请联系。 7667

Softmax和交叉熵的深度解析和Python实现

作者 | PARAS DAHAL译者 | zzq出品 | 人工智能头条(公众号ID:AI_Thinker)【导读】如果你稍微了解一点深度学习的知识或者看过深度学习的在线课...

优快云人工智能头条 4753

181、LLC谐振变换器的PCB设计实战(文件归档)

PCB设计实战经验总结:LLC谐振变换器的关键要点 本文通过实际案例总结了LLC谐振变换器PCB设计中的核心经验和常见误区。重点包括: 文件命名规范(项目代号_板卡类型_版本号_日期格式) 四层板标准层叠结构设计要点 谐振回路走线原则(宽度、长度控制) 地线处理技巧(功率地/控制地隔离) 散热设计注意事项(MOSFET过孔阵列、变压器布局) 完整的文件归档清单(Gerber、钻孔、装配图等) 作者特别强调,良好的设计归档习惯能显著降低生产问题概率,建议采用双重备份机制。文中多个真实案例(如谐振频率偏移、EM

Jack010169的博客 43

基于卷积神经网络(CNN)的滚动轴承故障诊断

基于cnn的西储大学数据集故障诊断

m0_60804625的博客 3356

第 5 篇:责任链模式 (Chain of Responsibility) —— 协议栈的流水线

本文介绍了责任链模式在嵌入式通信协议解析中的应用。针对传统"面条式"代码维护困难的问题,提出将各协议解析器解耦为独立处理单元,通过链表形式串联。文章详细展示了模式实现:定义抽象处理者接口、实现具体协议处理器、构建链表管理器。该方案具有内存占用低(O(1)栈空间)、可动态扩展、支持优先级调整等优势,并探讨了性能优化策略及动态插件系统等扩展应用,为嵌入式通信协议处理提供了清晰的架构方案。

一路往蓝-Anbo 的博客 177

【100%通过率】华为OD机试真题 C++ 实现【打印机队列】【2022.11 Q4 新题】

有5台打印机打印文件,每台打印机有自己的待打印队列。因为打印的文件内容有轻重缓急之分,所以队列中的文件有1~10不同的代先级,其中数字越大优先级越高。打印机会从自己的待打印队列中选择优先级最高的文件来打印。如果存在两个优先级一样的文件,则选择最早进入队列的那个文件。现在请你来模拟这5台打印机的打印过程。

MISAYAONE的博客 9946

【机器学习】手写数字识别的最优解:CNN+Softmax、Sigmoid与SVM的对比实战

本文对基于卷积神经网络(CNN)和支持向量机(SVM)的MNIST手写数字分类方法进行全面解析,涵盖CNN+Softmax、CNN+Sigmoid、CNN+SVM及传统SVM模型。通过实验从准确率、精确率、召回率、F1分数及训练时间等维度对比,发现CNN+Softmax在性能与效率间达到平衡,适合通用分类任务;CNN+Sigmoid性能最佳但训练耗时长;CNN+SVM适合资源受限场景。文章结合详尽的数据与分析,为手写数字识别中的模型选择和优化提供了实用参考。

一位人工智能领域的小新,想要努力发光发热 2712

1、初探 Tiny Machine Learning

Tiny Machine Learning(TinyML)是机器学习与嵌入式系统的融合领域,致力于在资源受限的微控制器上运行AI模型。本文介绍了机器学习基础、TinyML的核心概念、应用领域(如智能家居、工业物联网、医疗保健)、面临的挑战(如资源限制、模型压缩、数据质量),以及从硬件准备到模型部署的实践步骤。通过利用训练与推理的资源不对称性,可在PC上训练模型并部署至低功耗设备进行实时推理,推动边缘智能的发展。

loss4bartender的博客 121

转载 softmax softmaxloss 交叉熵的理解

我们知道卷积神经网络(CNN)在图像领域的应用已经...

qq_41615583的博客 719

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

卷积神经网络系列之softmax,softmax loss和cross entropy的详细讲解 简单明了

softmax 我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CNN网络主要包含卷积层,池化层(pooling),全连接层,损失层等。虽然现在已经开源了很多深度学习框架(比如MxNet,Caffe等),训练一个模型变得非常简单,但是你对这些层具体是怎么实现的了解吗?你对softmax,softmax loss,cross entropy了解吗?相信很多人不一定清楚。虽然网上...

weixin_42713739的博客 2471

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: Ubuntu pycharm 的安装,并创建快捷键
下一篇: C++ || dll的封装、显式调用和隐式调用(函数 / 类)
magic_ll
博客等级 码龄9年 3万+粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值