【深度学习】【PaddlePaddle】DAY 6 - 图像分类问题:手写数字识别案例(四)

本文介绍了在深度学习图像分类任务中,如何优化模型的损失函数,重点讨论了Softmax函数和交叉熵损失函数在分类问题中的作用。通过对比回归任务与分类任务的区别,阐述了Softmax将模型输出转换为概率的原理,并解释了为什么使用交叉熵作为分类任务的损失函数。同时,给出了代码实现示例,展示了在PaddlePaddle中如何应用这些概念进行模型训练。
摘要由CSDN通过智能技术生成

Chapter 3 图像分类问题

3.5 模型优化之损失函数

(1)概述

上一节尝试通过更复杂的模型(经典的全连接神经网络和卷积神经网络),提升手写数字识别模型训练的准确性。本节探讨损失函数的优化对模型训练效果的影响。

在这里插入图片描述损失函数是模型优化的目标,用于在众多的参数取值中,识别最理想的取值。损失函数的计算在训练过程的代码中,每一轮模型训练的过程都相同,分如下三步:

① 先根据输入数据正向计算预测输出。
② 再根据预测值和真实值计算损失
③ 最后根据损失反向传播梯度并更新参数。

(2)分类任务的损失函数

在之前的方案中,我们复用了房价预测模型的损失函数-均方误差。从预测效果来看,虽然损失不断下降,模型的预测值逐渐逼近真实值,但模型的最终效果不够理想。究其根本,不同的深度学习任务需要有各自适宜的损失函数。我们以房价预测和手写数字识别两个任务为例,详细剖析其中的缘由如下:

① 房价预测是回归任务,而手写数字识别是分类任务,使用均方误差作为分类任务的损失函数存在逻辑和效果上的缺欠。
② 房价可以是大于0的任何浮点数,而手写数字识别的输出只可能是0-9之间的10个整数,相当于一种标签。
③ 在房价预测的案例中,由于房价本身是一个连续的实数值,因此以模型输出的数值和真实房价差距作为损失函数(loss)是符合道理的。但对于分类问题,真实结果是分类标签,而模型输出是实数值,导致以两者相减作为损失不具备物理含义。实数减去标签,两者量纲都不同。

那么,什么是分类任务的合理输出呢?分类任务本质上是“某种特征组合下的分类概率”,下面以一个简单案例说明,如图所示。
在这里插入图片描述在本案例中,医生根据肿瘤大小 x x x作为肿瘤性质 y y y的参考判断(判断的因素有很多,肿瘤大小只是其中之一),那么我们观测到该模型判断的结果是 x x x y y y的标签(1为恶性,0为良性)。而这个数据背后的规律是不同大小的肿瘤,属于恶性肿瘤的概率。
观测数据是真实规律抽样下的结果,分类模型应该拟合这个真实规律,输出属于该分类标签的概率。

简单来说,分类问题输出的是分类标签,回归问题输出的是实数值。分类问题期望模型输出某一种标签的概率,如何将实数输出变为标签概率呢?下面的Softmax函数则能解决这个问题。

1)Softmax函数

如果模型能输出10个标签的概率,对应真实标签的概率输出尽可能接近100%,而其他标签的概率输出尽可能接近0%,且所有输出概率之和为1。这是一种更合理的假设!与此对应,真实的标签值可以转变成一个10维度的one-hot向量,在对应数字的位置上为1,其余位置为0,比如标签“6”可以转变成[0,0,0,0,0,0,1,0,0,0]。

为了实现上述思路,需要引入Softmax函数,它可以将原始输出转变成对应标签的概率,公式如下,其中C是标签类别个数。
在这里插入图片描述
从公式的形式可见,每个输出的范围均在0~1之间,且所有输出之和等于1,这是变换后可被解释成概率的基本前提。对应到代码上,我们需要在网络定义部分修改输出层:self.fc = Linear(input_dim=10, output_dim=1, act='softmax'),即是对全连接层的输出加一个softmax运算。

一个三个标签的分类模型(三个分类)使用的softmax输出层,从中可见原始输出的三个实数3、1、-3,经过softmax层后转变成加和为1的三个概率值0.88、0.12、0。softmax运算经过是先将x变为以e为底的指数,将三个指数的和作为分母,三个指数的值作为分子,则能计算概率值。
在这里插入图片描述

上文解释了为何让分类模型的输出拟合概率的原因,但为何需要对x取指数呢?即为何偏偏用softmax函数完成这个职能? 下面以二分类问题(只输出两个标签)进行探讨。

对于二分类问题,使用两个输出接入softmax作为输出层,等价于使用单一输出接入Sigmoid函数。如图所示,利用两个标签的输出概率之和为1的条件,softmax输出0.6和0.4两个标签概率,从数学上等价于输出一个标签的概率0.6。
在这里插入图片描述
假设模型为一层且没有激活函数,将权重相乘加和,通过sigmoid进行预测输出。当模型预测为1的概率即为sigmoid函数的输出,模型预测为0的概率就是1-sigmoid函数的输出。

在这种情况下,只有一层的模型为S(wTxi),S为Sigmoid函数。模型预测为1的概率为S(wTxi),模型预测为0的概率为1−S(wTxi)。

下图是肿瘤大小和肿瘤性质的数据图。左图的x轴为肿瘤大小,y轴为良恶性的输出。
从图中可发现,往往尺寸越大的肿瘤几乎全部是恶性,尺寸极小的肿瘤几乎全部是良性。只有在中间区域,即边界区域会出现稍大点的是良性,稍小的是恶性的情况。肿瘤的恶性概率会从0逐渐到1(绿色区域),这种数据的分布是符合多数现实问题的规律。

如果用线性函数的输出去模拟整个问题,相当于红色的直线,会发现这个线性会被拉平。但实际上我们希望拟合曲线0-1的区域与真实的分类边界区域重合。那么,怎么样的函数能更好的将中间部分落到0-1之间的概率输出呢?可以分为三段,第一段斜率小,直线较平缓;第二段为中间交错部分,斜率大,直线较陡;第三段斜率小,直线较平缓。

因此,观察下Sigmoid的曲线趋势可以满足我们对这个问题的一切期望,0-1的输出会集中在相对比较窄的区域内,即它的概率变化会集中在一个边界区域,有助于模型提升边界区域的分辨率。

在这里插入图片描述这就类似于公共区域使用的带有恒温装置的热水器温度阀门。由于人体适应的水温在34度-42度之间,我们更期望阀门的水温条件集中在这个区域,而不是在0-100度之间线性分布。

因此,使用sigmoid函数能将原始的实数输出变为概率输出。但概率输出依然不能和分类标签进行比较,依然存在量纲等问题。下面的交叉熵函数则能解决这个问题。

2)交叉熵

在模型输出为分类标签的概率时,直接以标签和概率做比较也不够合理,人们更习惯使用交叉熵误差作为分类问题的损失衡量。

交叉熵损失函数的设计是基于最大似然思想:最大概率得到观察结果的假设是真的。如一次试验,从盒子取球且不放回的例子。
( P ( D ∣ h ) ) (P(D|h)) (P(Dh))为从盒子取出一个黑球的概率, ( P ( h ∣ D ) ) (P(h|D)) (P(hD))为一个黑球从盒中取出的概率。 D D D是观测的数据,即白球黑球; h h h是模型,即甲乙盒子。这就是贝叶斯公式所表达的思想:
P ( h ∣ D ) ∝ P ( h ) ⋅ P ( D ∣ h ) P(h∣D)∝P(h)⋅P(D∣h) P(hD)P(h)P(Dh)
【P(A|B)=P(B|A)*P(A)/P(B) 描述两个条件概率的关系】

依据贝叶斯公式,假设某二分类模型“生成”n个训练样本的概率:
P(x1​)⋅S(wTx1​)⋅P(x2​)⋅(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值