caffe 中的损失函数分析

目前大部分机器学习算法都是基于统计学, 统计学习方法的三要素:模型策略和算法。

基本步骤:

    1 得到有限的训练数据集合

    2 确定包含所有可能的模型假设空间,即学习模型的集合

   3 确定模型选择的准则,其学习策略

   4 实现求解最优模型的算法,即学习的算法

   5 通过学习方法 选择最优模型,(刚开始随机初始化模型)

 6 利用学习的最优模型对新数据进行预测或分析


统计学习方法 主要用有监督方法, 包括 分类标注和回归等问题。



策略是三大要素之一,

  有了模型的假设空间,统计学习接着需要考虑的是按照什么样的准则学习或选择最优的模型,统计学习的目标在于从假设空间中选取最优的模型。

所有就有了损失函数

caffe中实现了 七种常见的损失函数

 

  1. 损失函数可以看做 误差部分(loss term) + 正则化部分(regularization term)

1.1 Loss Term

  • Gold Standard (ideal case)
  • Hinge (SVM, soft margin)
  • Log (logistic regression, cross entropy error)
  • Squared loss (linear regression)
  • Exponential loss (Boosting)


loss 是估计值和真实值之映射到某一空间的误差,而loss function就是这种误差的描述形式,loss function反映出了对于问题的定义。在caffe中,包含了常用的loss function,主要有以下几种:

CONTRASTIVE_LOSS 
MULTINOMIAL_LOGISTIC_LOSS
SIGMOID_CROSS_ENTROPY_LOSS
SOFTMAX_LOSS
EUCLIDEAN_LOSS
HINGE_LOSS
INFOGAIN_LOSS


Caffe中的损失函数解析

导言

在有监督的机器学习中,需要有标签数据,与此同时,也需要有对应的损失函数(Loss Function)。

在Caffe中,目前已经实现了一些损失函数,包括最常见的L2损失函数,对比损失函数,信息增益损失函数等等。在这里做一个笔记,归纳总结Caffe中用到的不同的损失函数,以及分析它们各自适合的使用场景。

欧式距离损失函数(Euclidean Loss)

这个loss的具体含义就是所有样本估计值和预测值的欧式距离平方的均值,也就是均方根误差(MSE)。

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

假设模型结果与测量值 误差满足,均值为0的高斯分布,即正态分布。这个假设是靠谱的,符合一般客观统计规律。
数据x与y的条件概率:

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function
若使 模型与测量数据最接近,那么其概率积就最大。概率积,就是概率密度函数的连续积,这样,就形成了一个最大似然函数估计。对最大似然函数估计进行推导,就得出了求导后结果: 平方和最小公式


MSE误差的优点是执行简单,较容易理解,缺点就是强制预测和标注要exactly的匹配,也就是一个非0即1的概念,本节点和其他节点是独立的,这样带来的问题是会导致最后的train出来的model有可能并不是那么准确。

输入:

预测的值:  , 其中,它们的形状为:

标签的值:  , 其中,它们的形状为:

输出:

损失的值:

适合场景:

回归,特别是其回归的值是实数值得时候。

对比损失函数(Contrastive loss)

输入:

形状:  特征 

形状:  特征 

形状:  相似性 

输出:

形状:

对比损失函数为: 

其中  .

适合场景:

可以用来训练Siamese网络

铰链损失函数(Hinge Loss)

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

求和后便成了Hinge loss
   
这个loss就是SVM用到的loss。Hinge loss就是0-1 loss的改良版,这个改良主要在两个方面,一个是在t.y在【0 1】之间不再是采用hard的方式,而是一个soft的方式。另外一个就是在【-inf,0】之间不再采用固定的1来定义能量的损失,而是采用一个线性函数对于错误分类的情况进行惩罚。

For an intended output t = ±1 and a classifier score y, the hinge loss of the prediction y is defined as

Note that y should be the "raw" output of the classifier's decision function, not the predicted class label. E.g., in linear SVMs, 

It can be seen that when t and y have the same sign (meaning y predicts the right class) and 

, the hinge loss 

, but when they have opposite sign, 

increases linearly with y (one-sided error).

   

来自 <http://en.wikipedia.org/wiki/Hinge_loss>

Plot of hinge loss (blue) vs. zero-one loss (misclassification, green:y < 0) for t = 1 and variable y. Note that the hinge loss penalizes predictions y < 1, corresponding to the notion of a margin in a support vector machine.

   

来自 <http://en.wikipedia.org/wiki/Hinge_loss>

   

   

在Pegasos: Primal Estimated sub-GrAdient SOlver for SVM论文中

这里把第一部分看成正规化部分,第二部分看成误差部分,注意对比ng关于svm的课件

不考虑规则化

考虑规则化


输入:

形状:  预测值   代表着预测   个类中的得分(注:CHW表示着在网络设计中,不一定要把预测值进行向量化,只有其拉直后元素的个数相同即可。) . 在SVM中,   是 D 维特征 , 和学习到的超平面参数  内积的结果   
所以,一个网络如果仅仅只有全连接层 + 铰链损失函数,而没有其它的可学习的参数,那么它就等价于SVM

标签值:

 标签  , 是一个整数类型的数   其代表在   个类中的正确的标签。

输出:

形状:  
损失函数计算:   范数 (默认是  , 是 L1 范数; L2 范数,正如在 L2-SVM中一样,也有实现),

其中 

应用场景:

在一对多的分类中应用,类似于SVM.

信息增益损失函数(InformationGain Loss)

信息熵是对于信息的一种量化,是对于某种系统信息的一种量度,熵就是系统的平均信息量,也可以理解为某种信息出现的概率。

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

信息增益是在加入一个条件后,所得到的熵和原来的熵的差,具体形式如下:

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

输入:

  1. 形状:  预测值   内, 表示这预测每一类的概率,共   个类, 每一个预测 概率  的和为1:  .

  2. 形状:  标签值:  , 是一个整数值,其范围是   表示着在   个类中的索引。

  3. 形状:  (可选) 信息增益矩阵  .作为第三个输入参数,. 如果  , 则它等价于多项式逻辑损失函数

输出:

形状:

计算公式:  , 其中   表示 行   of  .

多项式逻辑损失函数(Multinomial Logistic Loss)

如果一个事件发生的概率为:

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

那么事件几率的概念是指的发生的概率与不发生的概率的比值,取对数则称为对数几率(log odds)。
the logit 
caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

对于对元的分布,采用base-line logit,如下所示。(从某种意义上二元的logit是多元的一个特例)

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

通过概率和为1这样一个约束,可以得到Pr(Y=K)的表示,从而推导出K-1个分布的公式,如下所示:

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

所有样本的概率和就是最后使用到的 MULTINOMIAL_LOGISTIC_LOSS

输入:

形状:  预测值  范围中, 表示这预测的每一类的概率,共   个类. 每一个预测概率  的和为1:  .

形状:  标签  , 是一个整数值,其范围是   表示着在   个类中的索引。

输出:

形状:  计算公式: 

应用场景:

在一对多的分类任务中使用,直接把预测的概率分布作为输入.

Sigmoid 交叉熵损失函数(Sigmoid Cross Entropy Loss)

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

输入:

  1. 形状:   得分  , 这个层使用 sigmoid 函数   映射到概率分布 

  2. 形状:  标签 

输出:

  1. 形状:  计算公式: 

应用场景: 
预测目标概率分布

Softmax+损失函数(Softmax With Loss)


caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function


下面看一下基本的softmax的推导过程

 在概率论中,一个归一化常数的的作用让所有的密度函数满足和为1这样一个条件
caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

此处采用log的形式描述,其中Z为归一化的常数

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

得到
caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function
根据和为1这样的约束可以得到

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

softmax 则采用了连续函数来进行函数的逼近,最后采用概率的形式进行输出,这样就弱化了EUCLIDEAN_LOSS中带来的问题。

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function


softmax中,各个节点的输出是一个归一化后的概率值,这个值随着每次迭代是动态变化的。

4. softmax和multinomial logistic的统一性

最后得到softmax的形式,在所有的beta参数中,只有K-1个是独立的,对于所有添加一个常量C不改变softmax的值,证明如下:

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

如果这个把最后一个第K个样本的beta设置为常数,得到如下的变换

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function



带入原来的公式,可以得到:

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

这个输出就是multinomial logistic.

输入:

  1. 形状:  预测值   代表预测每个类的得分。 共   类. 这一层把得分通过softmax映射到概率分布 

  2. 形状:  标签值 是一个整数值,其范围是   表示着在   个类中的索引。

输出:

  1. 形状:  计算公式:  , 其中   为softmax输出的类概率。

应用场景:

在一对多分类中应用。

版权声明:本文为博主原创文章,未经博主允许不得转载。





下面是两个常用的激活函数


8. TANH


caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function


9. ReLU

relu是rectified linear unit的简写

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

对于ReLU函数的近soft-plus函数

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

他们的函数曲线如下图所示

caffe <wbr>study(3) <wbr>关于激活函数以及loss <wbr>function

和其他的函数比较起来,ReLU函数更符合生物学的激活模型。

a.ReLU是单方向的
b.在激活方面,这个函数强制阈值下的值为0,因此可以不使用l1正则就可以达到稀疏的目的。
c.可以有效的缓解vanishing gradient problem,原来的vanishing gradient problem主要因为在backward过程中gradient随着深度的增加不断的连乘,如果每部分都小于1的话,随着层数的增加这个值会越来越小,从而导致vanishing gradient的问题。而ReLU函数由于没有上限,因此其导数在很大层度上缓解了这个问题。而sigmod以及tanh函数都没有这样的一个性质。
d.计算速度快。

因此ReLU是现在DNN模型中比较常用的激活函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值