卷积神经网络的深入理解-优化目标(损失函数)篇

优化目标-损失函数(持续补充)

下面讲介绍两类基础任务(分类任务+回归任务,分类任务主要是预测概率的分布,而回归主要是预测具体的数值)的常见优化目标(损失函数)

一、分类任务损失

1、0-1损失

如下:
在这里插入图片描述
预测类别等于真实类别时loss为0,否则loss为1,但由于无法求导和优化,因此只具有理论意义。

2、KL散度 & 交叉熵损失(cross entropy loss)& softmax loss

提到KL散度,交叉熵损失之前我们先要知道另一个概念:信息熵

(1)信息熵

这个概念大家应该比较熟悉了,下面给出公式:
H ( X ) = − ∑ i = 1 n p ( x i ) l o g p ( x i ) H(X)=-\sum_{i=1}^{n}p(x_{i})logp(x_{i}) H(X)=i=1np(xi)logp(xi)
大家可以将 x i x_{i} xi看作是类别,
p ( x i ) p(x_{i}) p(xi)看作是 X X X x i x_{i} xi这一类的概率。下面给出例子:
1、 p ( x i ) p(x_{i}) p(xi)是确定的,即很明确的知道样本 X X X是否属于这一类 x i x_{i} xi

*篮球足球排球
label100

其信息熵为: H ( X ) = − ( 1 ∗ l o g ( 1 ) + 0 ∗ l o g ( 0 ) + 0 ∗ l o g ( 0 ) ) = 0 H(X)=-(1*log(1)+0*log(0)+0*log(0))=0 H(X)=(1log(1)+0log(0)+0log(0))=0
由于是确定的,因此信息熵为0。

2、 p ( x i ) p(x_{i}) p(xi)是不确定的,即只知道样本 X X X属于这一类 x i x_{i} xi的概率

*篮球足球排球
prediction0.60.30.1

其信息熵为: H ( X ) = − ( 0.6 ∗ l o g ( 0.6 ) + 0.3 ∗ l o g ( 0.3 ) + 0.1 ∗ l o g ( 0.1 ) ) H(X)=-(0.6*log(0.6)+0.3*log(0.3)+0.1*log(0.1)) H(X)=(0.6log(0.6)+0.3log(0.3)+0.1log(0.1))
由于只知道样本属于某一类的概率,因此信息熵不为0。

(2)KL散度(相对熵)

是指两个概率分布间差异的非对称性度量,通俗点说就是衡量同一个随机变量的两个不同分布之间的距离,可能还不太好理解后面会举一些具体的例子。先给出公式:
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) D_{KL}(p||q)=\sum_{i=1}^{n}p(x_{i})log(\frac{p(x_{i})}{q(x_{i})}) DKL(pq)=i=1np(xi)log(q(xi)p(xi))
这里 x i x_{i} xi可以被看作是不同的类别,
p ( x i ) p(x_{i}) p(xi)看作是这个样本在某种条件属于这一类的概率,
q ( x i ) q(x_{i}) q(xi)看作是这个样本在另一种条件属于这一类的概率
下面给出具体的例子

*真p(x)模型二认为该样本是什么的概率q(x)
🐱0.70.2
🐕0.20.6
🐖0.10.2

KL散度有两种计算
一种是模型一相对于模型二的KL散度:
D K L ( p ∣ ∣ q ) = 0.7 l o g ( 0.7 0.2 ) + 0.2 l o g ( 0.2 0.6 ) + 0.1 l o g ( 0.1 0.2 ) = 0.25535 D_{KL}(p||q)=0.7log(\frac{0.7}{0.2})+0.2log(\frac{0.2}{0.6})+0.1log(\frac{0.1}{0.2})=0.25535 DKL(pq)=0.7log(0.20.7)+0.2log(0.60.2)+0.1log(0.20.1)=0.25535
另一种是模型二相对于模型一的KL散度:
D K L ( q ∣ ∣ p ) = 0.2 l o g ( 0.2 0.7 ) + 0.6 l o g ( 0.6 0.2 ) + 0.2 l o g ( 0.2 0.1 ) = 0.23764 D_{KL}(q||p)=0.2log(\frac{0.2}{0.7})+0.6log(\frac{0.6}{0.2})+0.2log(\frac{0.2}{0.1})=0.23764 DKL(qp)=0.2log(0.70.2)+0.6log(0.20.6)+0.2log(0.10.2)=0.23764
那么如果有一种是已知分布,另一个是概率分布呢?看下面的例子(接下来在如何选择KL散度损失函数还是交叉熵损失函数会用到)。

*真实标签p(x)模型预测值q(x)
🐱10.7
🐕00.1
🐖00.2

预测值相对于真实标签的KL散度:
D K L ( p ∣ ∣ q ) = 1 ∗ l o g ( 1 0.7 ) + 0 ∗ l o g ( 0 0.1 ) + 0 ∗ l o g ( 0 0.2 ) = l o g ( 1 0.7 ) D_{KL}(p||q)=1*log(\frac{1}{0.7})+0*log(\frac{0}{0.1})+0*log(\frac{0}{0.2})=log(\frac{1}{0.7}) DKL(pq)=1log(0.71)+0log(0.10)+0log(0.20)=log(0.71)
KL散度的特性(这里不过多介绍,可以自己证明):
1、非对称性 D K L ( p ∣ ∣ q ) ≠ D K L ( q ∣ ∣ p ) D_{KL}(p||q)\neq D_{KL}(q||p) DKL(pq)=DKL(qp),只有在 p p p q q q概率分布完全一样时才相等。
2、非负性 D K L ( p ∣ ∣ q ) 恒 大 于 等 于 0 D_{KL}(p||q)恒大于等于0 DKL(pq)0,只有在 p p p q q q概率分布完全一样时才等于0。

下面我们来看一下KL散度的公式:
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) D_{KL}(p||q)=\sum_{i=1}^{n}p(x_{i})log(\frac{p(x_{i})}{q(x_{i})}) DKL(pq)=i=1np(xi)log(q(xi)p(xi))
= ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) =\sum_{i=1}^{n}p(x_{i})log(p(x_{i}))-\sum_{i=1}^{n}p(x_{i})log(q(x_{i})) =i=1np(xi)log(p(xi))i=1np(xi)log(q(xi))
= − ( − ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) ) − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) =-(-\sum_{i=1}^{n}p(x_{i})log(p(x_{i})))-\sum_{i=1}^{n}p(x_{i})log(q(x_{i})) =(i=1np(xi)log(p(xi)))i=1np(xi)log(q(xi))
= H ( P , Q ) − H ( P ) =H(P,Q)-H(P) =H(P,Q)H(P)
我们来看一下
− ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) 是 信 息 熵 , 记 为 H ( P ) -\sum_{i=1}^{n}p(x_{i})log(p(x_{i}))是信息熵,记为H(P) i=1np(xi)log(p(xi))H(P)
− ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) 也 就 是 我 们 接 下 来 要 介 绍 的 交 叉 熵 损 失 函 数 记 为 H ( P , Q ) -\sum_{i=1}^{n}p(x_{i})log(q(x_{i}))也就是我们接下来要介绍的交叉熵损失函数记为H(P,Q) i=1np(xi)log(q(xi))H(P,Q)

(3)交叉熵损失(cross entropy loss)

交叉熵主要用于度量同一个随机变量 x x x的预测分布Q和真实分布P之间的差距。(需要注意的是真实分布是P,预测分布是Q
公式为:
H ( P , Q ) = − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) H(P,Q)=-\sum_{i=1}^{n}p(x_{i})log(q(x_{i})) H(P,Q)=i=1np(xi)log(q(xi))
下面举一个例子这个例子还是上面那个例子:

*真实标签p(x)模型预测概率q(x)
🐱10.7
🐕00.1
🐖00.2

其交叉熵损失为:
− ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) = − ( 1 ∗ l o g ( 0.7 ) + 0 ∗ l o g ( 0.1 ) + 0 ∗ l o g ( 0.2 ) ) = − l o g ( 0.7 ) -\sum_{i=1}^{n}p(x_{i})log(q(x_{i}))=-(1*log(0.7)+0*log(0.1)+0*log(0.2))=-log(0.7) i=1np(xi)log(q(xi))=(1log(0.7)+0log(0.1)+0log(0.2))=log(0.7)
一个样本只有一个类别的标签为真(不考虑一个样本有多个真实标签)从这里我们可以得到一个更加简化的公式:
H ( P , Q ) = − p ( x ) l o g ( q ( x ) ) = − l o g ( q ( x ) ) , p ( x ) 为 1 H(P,Q)=-p(x)log(q(x))=-log(q(x)),p(x)为1 H(P,Q)=p(x)log(q(x))=log(q(x)),p(x)1
交叉熵损失只与真实标签为1的预测概率有关。

那么为什么很多网络模型中使用交叉熵作损失函数呢?

让我们来推一下:
D K L ( p ∣ ∣ q ) = H ( P , Q ) − H ( P ) D_{KL}(p||q)=H(P,Q)-H(P) DKL(pq)=H(P,Q)H(P)
这是我们从上面推出的公式, D K L ( p ∣ ∣ q ) D_{KL}(p||q) DKL(pq)是KL散度, H ( P , Q ) H(P,Q) H(P,Q)是交叉熵, H ( P ) H(P) H(P)是信息熵,上面我们已经知道 D K L ( p ∣ ∣ q ) = l o g ( 1 0.7 ) D_{KL}(p||q)=log(\frac{1}{0.7}) DKL(pq)=log(0.71) H ( P , Q ) = − l o g ( 0.7 ) = l o g ( 1 0.7 ) H(P,Q)=-log(0.7)=log(\frac{1}{0.7}) H(P,Q)=log(0.7)=log(0.71),显然一个样本的真实标签只有一个为1,不属于其余类别标签(这里不考虑一个样本属于多种类别),因此很容易算出 H ( P ) H(P) H(P)为0,在有真实分布时, H ( P ) H(P) H(P)都为0。
由此得到一个重要结论,在有真实分布时,KL散度等于交叉熵,此时选择交叉熵,没有真实分布时建议使用KL散度
那么为什么有真实分布要使用交叉熵损失函数呢?KL散度与交叉熵不是相等吗?

这就考虑到网络的梯度更新了,因为更新梯度时,损失函数要进行求导,而信息熵此时是一个常数,在计算KL散度时,这个常数每次都会计算,而我们都知道它为0,这就使得每次计算损失时会多余的计算这个常数,浪费计算资源。

(4)Softmax 损失函数(Softmax loss)

Softmax损失函数其实就是将Softmax与交叉熵损失函数的结合。
Softmax如下:
其是将数字转换为给概率,用到了数据归一化。
在这里插入图片描述
Softmax公式如下:
S i = e Z i ∑ i = 1 n e Z i S_{i}=\frac{e^{Z_{i}}}{\sum_{i=1}^{n}e^{Z_{i}}} Si=i=1neZieZi
H ( P , Q ) = − l o g ( q ( x ) ) H(P,Q)=-log(q(x)) H(P,Q)=log(q(x)) q ( x ) q(x) q(x)换为 S i S_{i} Si可得Softmax loss的公式如下:
H ( P , Q ) = − l o g ( e Z i ∑ i = 1 n e Z i ) H(P,Q)=-log(\frac{e^{Z_{i}}}{\sum_{i=1}^{n}e^{Z_{i}}}) H(P,Q)=log(i=1neZieZi)
= − Z i + l o g ( ∑ i = 1 n e Z i ) =-Z_{i}+log({\sum_{i=1}^{n}}e^{Z_{i}}) =Zi+log(i=1neZi)

二、回归任务损失

1、L1/L2-loss & Huber loss & smooth L1 loss

L1/L2 Loss与下面介绍的正则化方法中的参数正则化类似
下面分别介绍。

(1)L1 Loss

L1-loss全称 Mean absolute loss(MAE),是以绝对误差作为距离。
公式为:
M A E = 1 n ∑ i = 1 n ∣ ( y i − y i ˙ ) ∣ MAE=\frac{1}{n}\sum_{i=1}^{n}|(y_{i}-\dot{y_{i}})| MAE=n1i=1n(yiyi˙)
假设n=1时,L1损失函数图像如下, M A E MAE MAE是纵坐标, ( y i − y i ˙ ) (y_{i}-\dot{y_{i}}) (yiyi˙)是横坐标。
在这里插入图片描述
( y i − y i ˙ ) = 0 (y_{i}-\dot{y_{i}})=0 (yiyi˙)=0处不可导。MAE损失函数在 ( y i − y i ˙ ) (y_{i}-\dot{y_{i}}) (yiyi˙)不为0处梯度是相等的,这意味着即使对于小的损失值,其梯度也是大的。这不利于函数的收敛和模型的学习。但是,无论对于什么样的输入值,都有着稳定的梯度,不会导致梯度爆炸问题,具有较为稳健性的解。(这里参考的是这篇博文回归损失函数1:L1 loss, L2 loss以及Smooth L1 Loss的对比

(2)L2 Loss

L2 Loss 全称 Mean Squared Loss/Quadratic Loss(MSE loss),称为欧式距离,误差平方和作为距离。
公式为:
M S E = 1 n ∑ i = 1 n ( y i − y i ˙ ) 2 MSE=\frac{1}{n}\sum_{i=1}^{n}(y_{i}-\dot{y_{i}})^2 MSE=n1i=1n(yiyi˙)2
假设n=1时,L2损失函数图像如下, M S E MSE MSE是纵坐标, ( y i − y i ˙ ) (y_{i}-\dot{y_{i}}) (yiyi˙)是横坐标。
在这里插入图片描述
能够发现的是,当预测值与目标值相差很大时,梯度很容易爆炸。MSE的函数曲线光滑、连续,处处可导,便于使用梯度下降算法,是一种常用的损失函数。 而且,随着误差的减小,梯度也在减小,这有利于收敛,即使使用固定的学习速率,也能较快的收敛到最小值。
( y i − y i ˙ ) (y_{i}-\dot{y_{i}}) (yiyi˙)大于1时,会放大误差;而当 ( y i − y i ˙ ) (y_{i}-\dot{y_{i}}) (yiyi˙)小于1时,则会缩小误差,MSE对于较大的误差(>1)给予较大的惩罚,较小的误差(<1)给予较小的惩罚。

(3)Huber loss

为解决L1 loss梯度不平滑,L2 loss梯度爆炸的问题,提出了Huber loss
公式如下:
l H u b e r ( y i − y i ˙ ) { 0.5 ( y i − y i ˙ ) 2 i f ∣ y i − y i ˙ ∣ ⩽ δ δ ∗ ( ∣ y i − y i ˙ ∣ − 1 2 δ ) o t h e r w i s e l_{Huber}(y_{i}-\dot{y_{i}})\left\{\begin{matrix} 0.5(y_{i}-\dot{y_{i}})^2 & if|y_{i}-\dot{y_{i}}|\leqslant \delta \\ \delta *(|y_{i}-\dot{y_{i}}|-\frac{1}{2}\delta )& otherwise \end{matrix}\right. lHuber(yiyi˙){0.5(yiyi˙)2δ(yiyi˙21δ)ifyiyi˙δotherwise
δ \delta δ可由自己设置,当预测偏差小于 δ \delta δ时,它采用平方误差,当预测偏差大于 δ \delta δ时,采用的线性误差。

(4)smooth L1 loss

smooth L1 loss其实是Huber loss中 δ \delta δ=1时的损失函数,公式如下:
s m o o t h L 1 ( y i − y i ˙ ) { 0.5 ( y i − y i ˙ ) 2 i f ∣ y i − y i ˙ ∣ ⩽ 1 ( ∣ y i − y i ˙ ∣ − 0.5 ) o t h e r w i s e smooth_{L_{1}}(y_{i}-\dot{y_{i}})\left\{\begin{matrix} 0.5(y_{i}-\dot{y_{i}})^2 & if|y_{i}-\dot{y_{i}}|\leqslant 1 \\ (|y_{i}-\dot{y_{i}}|-0.5 )& otherwise \end{matrix}\right. smoothL1(yiyi˙){0.5(yiyi˙)2(yiyi˙0.5)ifyiyi˙1otherwise
( y i − y i ˙ ) (y_{i}-\dot{y_{i}}) (yiyi˙)比较小时,等价于L2 loss,保持平滑, ( y i − y i ˙ ) (y_{i}-\dot{y_{i}}) (yiyi˙)比较大时,等价于L1 loss,可以限制数值的大小。
下面是三种loss的函数图像。
在这里插入图片描述
这就是神经网络损失函数的理解,如有不对的地方欢迎指正,之后会持续更新

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CNN(卷积神经网络)是一种广泛应用于图像识别和计算机视觉任务的深度学习模型。它的设计灵感来自于人类视觉系统的工作原理,并通过卷积层、池化层和全连接层等组件来有效地提取图像特征。 学习CNN可以包括以下几个方面: 1. 卷积层:了解卷积操作的基本原理,以及如何使用卷积核在图像上进行特征提取。学习卷积核的选择、步长、填充等参数对输出特征图的影响。 2. 池化层:了解池化操作的作用,如最大池化和平均池化,可以减少特征图的维度,并保留主要信息。 3. 激活函数:学习不同类型的激活函数,如ReLU、sigmoid和tanh,以及它们在CNN中的应用。 4. 全连接层:理解全连接层的作用,将前面的特征图映射到分类结果,并学习如何使用softmax函数进行多类别分类。 5. 损失函数优化器:了解常用的损失函数,如交叉熵损失函数,并学习如何使用梯度下降等优化器来训练CNN模型。 6. 数据预处理:学习如何对输入图像进行预处理,如归一化、数据增强等,以提高模型的鲁棒性和泛化能力。 7. 模型结构和参数调整:了解CNN的不同模型结构,如LeNet、AlexNet、VGG、ResNet等,以及它们在不同任务上的应用。学习如何调整模型的超参数,如学习率、批量大小等。 8. 实践项目:通过实践中的项目来深入理解CNN的应用,例如图像分类、目标检测、语义分割等。 记住,要掌握CNN,需要理解其基本原理和常用技术,并通过实践来加深理解和提升技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值