深度学习(13)神经网络中损失函数的作用

三要素

  • 机器学习的三要素就是:表示,评估和优化。
  1. 表示指的是将样本空间映射到一个合适的特征空间,一般地,我们更青睐于这样的表示是低维度的,是更加稀疏交互的,同时也希望是相互独立的。
  2. 评估指的是模型在数据上表现的量化形式,我们选取合适的函数来表示什么样子的模型是好的,性能度量就是评估。
  3. 在前两步都完成了以后,最后要做的就是优化,就是对评估函数进行求解,找出最合适的解,来确定最终的模型。

所谓的性能度量(performance measure) 就是关于真实值和预测值的关系,真实值与预测值越接近,或者说真实的分布与预测分布越接近,性能越好。对于 回归 问题,我们可以选用均方误差(mean squared error),绝对误差(absolute Loss),决定系数(coefficient of determination )以及Huber Loss来度量模型的性能,对于 分类 问题,我们可以用准确率,错误率,或者得到混淆矩阵,进一步得到查准率(precision)、查全率(recall)以及P-R曲线和ROC曲线

我们可以很容易想到,损失函数(Loss function)也是这样一回事情,真实值与预测值差别越大,Loss越大,我们的优化的目标就是减小Loss。从评估的角度来说,损失函数和性能度量所起到的作用是相同的,那么我们为什么既要有损失函数,也有要性能评估呢?事实上,常见的均方误差:

在这里插入图片描述

既可以被当作性能度量,同时也是回归问题的损失函数。但在更多的问题中,我们会发现,我们往往会为了减小模型的错误率,并不直接优化错误率,而是会优化另一个函数,比如在logistic回归中,我们会优化对数似然,在SVM中,我们会优化hinge loss,在adaboost中会优化指数损失。

期望风险与经验风险

  • 以二分类问题为例,我们的错误率,也就是0-1损失函数,可以定义为:

在这里插入图片描述

  • 如果我们的模型f携带参数θ,那么我们的任务可以是找到最佳的θ:
    在这里插入图片描述

但这样的函数并不是连续的,因为参数的变化会反映到错误率上,而错误率的变化不可能是连续的,当我们预测对样本每增加一个,错误率就会跃变1/m,如果我们采用梯度下降或者牛顿法去优化,就会利用到它的一阶导数甚至二阶导数,会发现导数根本不存在。

  • 所以损失函数一定要是连续的,这是寻找损失函数的第一个条件。此外,根本性的问题在于,我们想优化的根本不是经验风险,所谓的经验风险,如同上式,是定义在训练集上的样本上损失;我们真正想优化的是期望风险,定义在全部样本(包含测试集)的损失,用期望来表示:

在这里插入图片描述

将其拆开就是:

在这里插入图片描述

但是概率分布P(x,y)未知的话,我们连期望风险都无法计算,更无法将其最小化。但我们使用的数据越多,根据大数定律,期望风险也就越接近于经验风险,注意到,我们的联合分布还可以写为:

在这里插入图片描述

  • 联合分布可以被拆为先验概率和条件概率。但是当我们可以假设模型的概率分布时,比如线性回归假设了高斯分布,logistic回归假设了伯努利分布,我们就可以利用极大似然估计来逼近期望风险,这也叫做一致性(consistency ),这个是我们寻找损失的函数第二个条件

如果是连续的凸函数,在0处可导,且导数小于零,就具备与0-1损失函数的一致性,我们把这些损失函数叫做替代损失(Surrogate loss),值得注意的是,这是我们选用凸函数的最重要的原因,虽然凸函数具备局部最小值就是全局最小值的性质,但主要是为了计算上的便利,而非本质意义上的。

在这里插入图片描述

如图,除去Perceptron Loss,其余的Loss function均可以给出0-1损失的上界,也就是说,在优化替代损失的时候,也就优化了原本的损失函数。

结构风险与正则化

在《贝叶斯的回归模型》中曾经把岭回归的正则化项归结于高斯先验,把LASSO的正则化项归结于拉普拉斯先验,那么从损失函数的构造角度来看,**所谓正则化项,描述的其实是模型的复杂度,模型的复杂度越高,过拟合的风险也就越大,所谓的结构风险就是指模型本身结构的复杂度。**添加结构风险的Loss Function一般形式就是:

在这里插入图片描述

结构风险加上经验风险,是在数据量有限的情况下,为了更好的近似期望风险的策略,这一策略的本质意义是,是希望在模型拟合数据能力和复杂度之间取得平衡,拟合数据相同的模型,我们偏向于复杂度低的模型,复杂度相同的模型,我们偏向于拟合得好的模型。虽然我们早就知道了正则化,但从这样的思路去理解正则话会使得我们在神经网络这样解释能力极差的模型中,也可以添加相应对连接权重的正则化项:

在这里插入图片描述


  • 有人认为,凸函数在统计学习中最好的性质就是局部最优即全局最优,这样算法就不用担心其会陷入局部最优而非全局最优,但在神经网络这样极其复杂的参数空间中,我们有充足的理由不去过分担心全局最优的问题。 从这个意义上来说, 寻找一致性的连续的损失函数才是最关键的问题。 对于某些模型,结构风险天然就被包含在了模型之中,比如SVM,它的结构风险项是划分超平面间隔的大小。

  • 有人认为,什么模型就只能用什么损失函数 ,因为其他的损失函数,书上没有讲过,这样的看法是片面的,logistic回归这样一种广义的线性模型也可以用平方损失函数,只是平方损失并不会满足一致性,得到的结果无法改善原来的损失。


损失函数层

cnn进行前向传播阶段,依次调用每个Layer的Forward函数,得到逐层的输出,最后一层与目标函数比较得到损失函数,计算误差更新值,通过反向传播逐层到达第一层,所有权值在反向传播结束时一起更新。

loss layer 是CNN的终点,接受两个Blob作为输入,其中一个是CNN的预测值,另一个是真实标签。损失层则将这两个输入进行一系列运算,得到当前网络的损失函数(Loss Function),一般记做L(θ)其中θ是当前网络权值构成的向量空间。机器学习的目的是在权值空间中找到让损失函数L(θ) 最小的权值θ(opt),可以采用一系列最优化方法(如SGD方法)逼近权值θ(opt)。

损失函数是在前向传播计算中得到的,同时也是反向传播的起点。

Softmax函数

假设有K个类别,Softmax计算过程为:
在这里插入图片描述

其中,j=0,1,2,3,4,5,…,K-1

下面图更直观:

在这里插入图片描述

  • softMax的结果相当于输入图像被分到每个标签的概率分布,该函数是单调增函数,即输入值越大,输出也就越大,输入图像属于该标签的概率就越大。

SVM只选自己喜欢的男神,Softmax把所有备胎全部拉出来评分,最后还归一化一下

对softmax的结果计算交叉熵分类损失函数为:

在这里插入图片描述

取log里面的值就是这组数据正确分类的Softmax值,它占的比重越大,这个样本的Loss也就越小,这种定义符合我们的要求.

  • softmax函数的本质就是将一个K 维的任意实数向量压缩(映射)成另一个K维的实数向量,其中向量中的每个元素取值都介于(0,1)之间。将高维的输入x转化一个K维的实数,即K类的各自的概率。

loss计算

理想的分类器应当是除了真实标签的概率为1,其余标签概率均为0,这样计算得到其损失函数为-ln(1)=0.

损失函数越大,说明该分类器在真实标签上的分类概率越小,性能也就越差。

当损失函数接近正无穷时表明训练发散,需要调小学习速率。

在ImageNet-1000分类问题中,初始状态为均匀分布,每个类别的分类概率均为0.001,此时损失函数-ln(0.001)=ln(1000)=6.90775…,

当loss总在6.9左右时,说明 没有训练收敛的迹象,尝试调大学习速率,或者修改权值初始化方式。

  • softmax_loss的计算包含2步:

    1. 计算softmax归一化概率

    2. 计算损失

这里以batchsize=1的2分类为例:

设最后一层的输出为[1.2 0.8],减去最大值后为[0 -0.4],

然后计算归一化概率得到[0.5987 0.4013],

假如该图片的label为1,则Loss=-log0.4013=0.9130

  • 可选参数
    1. ignore_label
      int型变量,默认为空。如果指定值,则label等于ignore_label的样本将不参与Loss计算,并且反向传播时梯度直接置0.

    2. normalize
      bool型变量,即Loss会除以参与计算的样本总数;否则Loss等于直接求和

    3. normalization

发布了61 篇原创文章 · 获赞 15 · 访问量 941

猜你喜欢

转载自blog.csdn.net/weixin_42535423/article/details/103930211
今日推荐