损失函数(Loss function)是用来估量你模型的预测值 f(x)与真实值 Y 的不一致程度,它是一个非负实值函数,通常用 L(Y,f(x))来表示。损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数的重要组成部分。模型的风险结构包括了风险项和正则项,通常如下所示:
                                     

前面的均值函数表示的是经验风险函数,L代表的是损失函数,后面的 Φ 是正则化项(regularizer)或者叫惩罚项penalty term,它可以是L1,也可以是L2,或者其他的正则函数。整个式子表示的意思是找到使目标函数最小时的θ值 。

一、常用损失函数

常见的损失误差有五种: 
1. 合页、铰链损失(Hinge Loss):主要用于支持向量机(SVM) 中; 
2. 平方损失(Square Loss):主要是最小二乘法; 
3. 绝对值损失
4. 交叉熵损失 (Cross Entropy Loss,Softmax Loss ):用于Logistic回归与Softmax分类中; 
5. 指数损失(Exponential Loss) :主要用于Adaboost 集成学习算法中; 
6.Huber Loss (嘿呦波)是一个用于回归问题的带参损失函数, 优点是能增强平方误差损失函数(MSE, mean square error)对离群点的鲁棒性。Huber损失可以看做L2和L1损失的结合。

  • 当预测偏差小于 δ 时,它采用平方误差,
  • 当预测偏差大于 δ 时,采用的线性绝对值误差。

相比于最小二乘的线性回归,HuberLoss降低了对离群点的惩罚程度,所以 HuberLoss 是一种常用的鲁棒的回归损失函数。

smoothL1就是HuberLoss损失.Huber Loss 定义如下:https://www.cnblogs.com/nowgood/p/Huber-Loss.html

1、Hinge loss

Hinge loss 的叫法来源于其损失函数的图形,为一个折线,通用的函数表达式为:

表示样本真实分类,=-1表示负样本,=1表示正样本.Yi~表示预测的点到分离超平面的距离,当该距离大于1时,1与该距离做差为负值,此时损失为0,表示样本被被正确分类。反之,差值即为具体的损失.

Hing损失可以用来解间距最大化的问题,最有代表性的就是SVM问题,在支持向量机中,最初的SVM优化的函数:


    将约束项进行变形,则为:
                                               
    则损失函数可以进一步写为:

2、 均方误差MSE(也称L2损失)

最小二乘法是线性回归的一种,最小二乘的基本原则是:最优拟合直线应该是使各点到回归直线的距离和最小的直线,即平方和最小。平方损失(Square loss)的标准形式如下:
                                                        
在实际应用中,我们使用均方差(L2)作为一项衡量指标,公式如下:

3、平均绝对值误差(也称L1损失)

4、交叉熵损失

交叉熵损失是基于softmax计算来的,softmax将网络最后输出z通过指数转变成概率形式。首先看一下softmax计算公式:


   分子 是要计算的类别  的网络输出的指数;分母是所有类别网络输出的指数和,共k个类别。这样就得到了类别i的输出概率  。

实际上,softmax是由逻辑回归模型(用于二分类)推广得到的多项逻辑回归模型(用于多分类)。逻辑回归的P(Y=y|x)表达式如下(为了将类别标签y统一为1和0,下面将表达式分开表示):

逻辑回归损失函数如下:

交叉熵损失公式定义如下:

其中, 是类别 的真实标签;是上面softmax计算出的类别 的概率值;k是类别数,N是样本总数。

5、指数损失函数

  AdaBoost就是损失函数为损失函数的。指数损失函数的标准形式:


体现在更新样本权重上:第一轮训练完成后对进行更新,得到,更新公式通过下边的公式来计算更新:


from:https://blog.csdn.net/qq_30815237/article/details/86540528

二、正则项

1. 权重衰减(weight decay)L2

L2正则化的目的就是为了让权重衰减到更小的值,在一定程度上减少模型过拟合的问题,所以权重衰减也叫L2正则化。L2正则化就是在代价函数后面再加上一个正则化项:


例如:就是在均方误差成本函数后加了L2正则,称为“岭回归”。

为什么可以对权重进行衰减

我们对加入L2正则化后的代价函数进行推导,先求导:

可以发现L2正则化项对b的更新没有影响,但是对于w的更新有影响:

在不使用L2正则化时,求导结果中w前系数为1,现在w前面系数为1-ηλ/n,因为η、λ、n都是正的,所以1-ηλ/n小于1,它的效果是减小w,这也就是权重衰减(weight decay)的由来。当然考虑到后面的导数项,w最终的值可能增大也可能减小。
另外,需要提一下,对于基于mini-batch的随机梯度下降,w和b更新的公式跟上面给出的有点不同:

,  
   后面那一项变了,变成所有导数加和,乘以η再除以m,m是一个mini-batch中样本的个数。

L2正则化项有让w变小的效果,可以避免模型过拟合问题,为什么w变小可以防止过拟合呢

原理:(1)从模型的复杂度上解释:更小的权值w,从某种意义上说,表示网络的复杂度更低,对数据的拟合更好(这个法则也叫做奥卡姆剃刀),而在实际应用中,也验证了这一点,L2正则化的效果往往好于未经正则化的效果。

(2)从数学方面的解释:过拟合的时候,拟合函数的系数往往非常大,为什么?如下图所示,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。

2、L1 正则

在原始的代价函数后面加上一个L1正则化项,即所有权重w的绝对值的和,乘以λ/n:
                                                          
例如下式表示套索回归的成本函数:
                                                          

同样先计算导数:
                                                              

上式中sgn(w)表示符号函数,w为正,返回1,w为负,返回“-1”。

权重w的更新规则为:
                                                     

比原始的更新规则多出了η * λ * sgn(w)/n这一项。当w为正时,更新后的w变小。当w为负时,更新后的w变大——因此它的效果就是让w往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。

当w为0时怎么办?当w等于0时,|W|是不可导的,所以我们只能按照原始的未经正则化的方法去更新w,这就相当于去掉η*λ*sgn(w)/n这一项,所以我们可以规定sgn(0)=0,这样就把w=0的情况也统一进来了。(在编程的时候,令sgn(0)=0, sgn(w>0)=1,sgn(w<0)=-1)

     此外: 由于lasso回归的损失函数是不可导的,所以梯度下降算法将不再有效,可以使用利用坐标轴下降法进行求解。坐标轴下降法和梯度下降法具有同样的思想,都是沿着某个方向不断迭代,但是梯度下降法是沿着当前点的负梯度方向进行参数更新,而坐标轴下降法是沿着坐标轴的方向。

对于一个可微凸函数,其中的向量,如果对于一个解,使得在某个坐标轴

都能达到最小值,则就是的全局的最小值点。

3、Dropout

L1、L2正则化是通过修改代价函数来实现的,而Dropout则是通过修改神经网络本身来实现的,它是在训练网络时用的一种技巧(trike)。它的流程如下:

,    

假设我们要训练上左图这个网络,在训练开始时,我们随机地“删除”一半的隐层单元,视它们为不存在,得到上右图的网络。保持输入输出层不变,按照BP算法更新上图神经网络中的权值(虚线连接的单元不更新,因为它们被“临时删除”了)。

以上就是一次迭代的过程,在第二次迭代中,也用同样的方法,只不过这次删除的那一半隐层单元,跟上一次删除掉的肯定是不一样的,因为我们每一次迭代都是“随机”地去删掉一半。第三次、第四次……都是这样,直至训练结束。

Dropout为什么有助于防止过拟合呢?可以简单地这样解释,运用了dropout的训练过程,相当于训练了很多个只有半数隐层单元的神经网络(后面简称为“半数网络”),每一个这样的半数网络,都可以给出一个分类结果,这些结果有的是正确的,有的是错误的。随着训练的进行,大部分半数网络都可以给出正确的分类结果,那么少数的错误分类结果就不会对最终结果造成大的影响。

4、数据集扩增

特别是在深度学习方法中,更多的训练数据,意味着可以用更深的网络,训练出更好的模型。但是,收集更多的数据意味着需要耗费更多的人力物力,有弄过人工标注的同学就知道,效率特别低,简直是粗活。所以,可以在原始数据上做些改动,得到更多的数据,以图片数据集举例,可以做各种变换,如:

  1. 将原始图片旋转一个小角度
  2. 添加随机噪声
  3. 一些有弹性的畸变(elastic distortions),对MNIST做了各种变种扩增。
  4. 截取(crop)原始图片的一部分。比如DeepID中,从一副人脸图中,截取出了100个小patch作为训练数据,极大地增加了数据集。

更多数据意味着什么?

用50000个MNIST的样本训练SVM得出的accuracy94.48%,用5000个MNIST的样本训练NN得出accuracy为93.24%,所以更多的数据可以使算法表现得更好。在机器学习中,算法本身并不能决出胜负,不能武断地说这些算法谁优谁劣,因为数据对算法性能的影响很大。

from:https://www.jianshu.com/p/ffb6808d54cd


学习率衰减:

学习率衰减(learning rate decay)就是一种可以平衡这两者之间矛盾的解决方案。学习率衰减的基本思想是:学习率随着训练的进行逐渐衰减。

学习率衰减基本有两种实现方法:

  • 线性衰减。例如:每过5个epochs学习率减半。
  • 指数衰减。例如:随着迭代轮数的增加学习率自动发生衰减,每过5个epochs将学习率乘以0.9998。具体算法如下:

decayed_learning_rate=learning_rate*decay_rate^(global_step/decay_steps)
其中decayed_learning_rate为每一轮优化时使用的学习率,learning_rate为事先设定的初始学习率,decay_rate为衰减系数,decay_steps为衰减速度。

常见损失函数及正则项相关推荐

  1. 原创 | 常见损失函数和评价指标总结(附公式代码)

    作者:董文辉 本文长度为4500字,建议阅读10+分钟 本文为你总结常见损失函数和评价指标. 目录 一.损失函数 1.1 回归问题 1.2 分类问题 二.评价指标 2.1 回归问题 2.2 分类问题 ...

  2. 原创 | 常见损失函数和评价指标总结(附代码)

    作者:董文辉 本文长度为4500字,建议阅读10+分钟 本文为你总结常见损失函数和评价指标. 注:本文采用markdown进行编写,用markdown打开可得更佳展示效果- ## 1. 损失函数: # ...

  3. 常见损失函数和评价指标总结

    作者:董文辉 本文长度为4500字,建议阅读10+分钟 本文为你总结常见损失函数和评价指标. 注:本文采用markdown进行编写,用markdown打开可得更佳展示效果- ## 1. 损失函数: # ...

  4. AI理论知识基础(26)-机器学习常见损失函数, 共轭梯度法(2)

    机器学习常见损失函数, 共轭梯度法(2)

  5. 基于阈值的损失函数_【代码+推导】常见损失函数和评价指标总结

    (给机器学习算法与Python学习加星标,提升AI技能) 作者:董文辉 本文长度为4500字,建议阅读10+分钟 本文为你总结常见损失函数和评价指标. 目录 一.损失函数 1.1 回归问题 1.2 分 ...

  6. display函数怎么使用_损失函数—深度学习常见损失函数总结【图像分类|上】

    点击蓝字关注我们 AI研习图书馆,发现不一样的精彩世界 学习 笔记 常见损失函数总结-图像分类篇[上] 一.前言在深度学习中,损失函数扮演着至关重要的角色.通过最小化损失函数,使模型达到收敛状态,减少 ...

  7. 机器学习中目标函数、损失函数以及正则项的通俗解释

    目录: 前言: 1.什么是目标函数? 2.损失函数 3.正则化 总结: 目录: 前言: 今天看到一篇很精简的文章来说明目标函数.损失函数以及正则项是什么.以下是文章正文. 转自:https://xia ...

  8. 基于阈值的损失函数_推荐 :常见损失函数和评价指标总结(附公式amp;代码)...

    作者:董文辉 本文长度为4500字,建议阅读10+分钟 本文为你总结常见损失函数和评价指标. 目录 一.损失函数 1.1 回归问题 1.2 分类问题 二.评价指标 2.1 回归问题 2.2 分类问题 ...

  9. 推荐 :常见损失函数和评价指标总结(附公式代码)

    作者:董文辉 本文长度为4500字,建议阅读10+分钟 本文为你总结常见损失函数和评价指标. 目录 一.损失函数 1.1 回归问题 1.2 分类问题 二.评价指标 2.1 回归问题 2.2 分类问题 ...

最新文章

  1. redis 双写一致性 看一篇成高手系列1
  2. windows主要鼠标消息
  3. 做了几道Linux笔试题1
  4. Linux/Centos7系统管理之进程与计划任务管理
  5. MFC 添加文件路径 遍历文件
  6. GIT 这么好用,为什么还是有人不知道怎么用它提交代码?
  7. echarts 地图自定义图标_DMKB08:Echarts 分段设色
  8. Ubuntu 14.04中修复默认启用HDMI后没有声音的问题
  9. CVE-2015-1642 POC
  10. 圣斗士星矢服务器维护时间,圣斗士星矢正义传说开服时间表 什么时候开新服...
  11. Google Gears 体验(1):本机数据库
  12. 新中大计算机知识,新中大财务软件操作步骤
  13. 【Python】基于Python的百度迁徙2——迁徙规模指数(附代码)
  14. 非线性调频信号matlab仿真,线性调频信号回波仿真
  15. matlab系统解列模块,基于MATLAB的电力系统仿真终稿.doc
  16. azkaban build报错
  17. vs中css样式转换_在现实世界中使用CSS转换
  18. docker中报错Error: Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirro
  19. fme转换shp面文件到cad自定义填充图案
  20. 美国在家办公员工被监控,远程办公成噩梦?

热门文章

  1. 最详细的SSD论文笔记
  2. H3C认证路由交换网络高级工程师
  3. 2019下半年系统集成项目管理工程师下午真题
  4. java 4位数,java 找出4位数的所有吸血鬼数字
  5. 框架简述 带你认识 Mybatis
  6. 8.5-Day1T1--Asm.Def 谈笑风生
  7. Android开发学习之TabView选项卡具体解释 -- 基于Android4.4
  8. 元素属性、类名、内容、获取和设置、删除
  9. 信息安全系统设计基础第四次实验报告 201352012013530620135307
  10. Javascript UserAgent 获取平台及浏览器信息