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

基本步骤:

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)。

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


若使 模型与测量数据最接近,那么其概率积就最大。概率积,就是概率密度函数的连续积,这样,就形成了一个最大似然函数估计。对最大似然函数估计进行推导,就得出了求导后结果: 平方和最小公式

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

输入:

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

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

输出:

损失的值:

适合场景:

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

对比损失函数(Contrastive loss)

输入:

形状:  特征 

形状:  特征 

形状:  相似性 

输出:

形状:

对比损失函数为: 

其中  .

适合场景:

可以用来训练Siamese网络

铰链损失函数(Hinge Loss)

求和后便成了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)

信息熵是对于信息的一种量化,是对于某种系统信息的一种量度,熵就是系统的平均信息量,也可以理解为某种信息出现的概率。
信息增益是在加入一个条件后,所得到的熵和原来的熵的差,具体形式如下:

输入:

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

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

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

输出:

形状:

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

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

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


那么事件几率的概念是指的发生的概率与不发生的概率的比值,取对数则称为对数几率(log odds)。
the logit 

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

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

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

输入:

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

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

输出:

形状:  计算公式: 

应用场景:

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

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

输入:

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

  2. 形状:  标签 

输出:

  1. 形状:  计算公式: 

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

Softmax+损失函数(Softmax With Loss)


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

在概率论中,一个归一化常数的的作用让所有的密度函数满足和为1这样一个条件

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

得到

根据和为1这样的约束可以得到

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

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

4. softmax和multinomial logistic的统一性

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

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

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

这个输出就是multinomial logistic.

输入:

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

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

输出:

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

应用场景:

在一对多分类中应用。

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


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

8. TANH

9. ReLU

relu是rectified linear unit的简写

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

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

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


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

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

caffe 中的损失函数分析相关推荐

  1. Caffe中的损失函数解析

    Caffe中的损失函数解析 导言 在有监督的机器学习中,需要有标签数据,与此同时,也需要有对应的损失函数(Loss Function). 在Caffe中,目前已经实现了一些损失函数,包括最常见的L2损 ...

  2. Caffe中的损失函数

    文章从自己的QQ(632846506)2年前的日志中移过来的.https://user.qzone.qq.com/632846506/infocenter. 机器学习的目的就是通过对训练样本输出与真实 ...

  3. caffe中各种loss函数

    转自: http://www.mamicode.com/info-detail-594961.html Caffe中的损失函数解析 导言 在有监督的机器学习中,需要有标签数据,与此同时,也需要有对应的 ...

  4. caffe中loss函数代码分析--caffe学习(16)

    接上篇:caffe中样本的label一定要从序号0开始标注吗?–caffe学习(15) A: 1:数学上来说,损失函数loss值和label从0开始还是从1或者100开始是没有直接联系的,以欧式距离损 ...

  5. Caffe源码中Net文件分析

    Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件,这里介绍下include/caffe/net.hpp文件的内容: ...

  6. Caffe源码中layer文件分析

    Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件,这里介绍下include/caffe/layer.hpp文件的内 ...

  7. Caffe源码中common文件分析

    Caffe源码(caffe version:09868ac , date: 2015.08.15)中的一些重要头文件如caffe.hpp.blob.hpp等或者外部调用Caffe库使用时,一般都会in ...

  8. Caffe源码中io文件分析

    Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件,这里介绍下include/caffe/util/io.hpp文件 ...

  9. Caffe源码中blob文件分析

    Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件,这里介绍下include/caffe/blob.hpp文件的内容 ...

最新文章

  1. vue-cli ——解决多次复用含有Echarts图表组件的问题
  2. VB为自己的程序设定消息(可接收处理)
  3. python热力图背景_python 绘制场景热力图的示例
  4. 【英语学习】【WOTD】imbroglio 释义/词源/示例
  5. 普通人学python有意义吗-自学Python编程的第一天----------来自苦逼的转行人
  6. eFrameWork学习笔记-eList
  7. 用pyqt5做个图书馆数据管理客户端!--pyqt+mysql的使用(入门必看!)
  8. ServiceStack.Redis之IRedisClient(转载)
  9. mac下nginx安装及与tomcat简单配置
  10. 控制终端, 用户登录、mail、hostname、随机数 (笔记)
  11. 无法从“cstring”转换为“lpcstr”_别用Sketchup一个个转模型的版本了,用这些批量转换器真香…...
  12. wordpress php幻灯片代码,WordPress无需插件实现幻灯片效果
  13. python保存图片到本地代码_python保存网页图片到本地的方法
  14. STM32 之十二 FLASH 使用详解 及 LL 库 FLASH 驱动实现
  15. 2021年饶州中学高考成绩查询,鄱阳饶州中学2019高考成绩喜报、一本二本上线人数情况...
  16. 基于Element UI Calendar实现日程提醒功能
  17. 如何快速绘制一个等边三角形呢?
  18. QT——移植官方MQTT库
  19. Java容器(集合)
  20. 店铺管理系统项目总结

热门文章

  1. 关于国密HTTPS的那些事(一)
  2. 32位指针强制转换成64位数据
  3. 软件测试实习生面试归来
  4. 使用plugman开发cordova 高德地图定位插件
  5. canvas 画线条
  6. c语言课程设计--贪吃蛇
  7. 创建、删除ubuntu账户,添加用户到组
  8. Padavan老毛子的二级路由,怎样设置与主路由在同一网段
  9. connect() failed (111 Connection refused) while connecting to upstream
  10. 电子商务网站之购买欲望和购买目标