作者:章华燕

编辑:赵一帆

1、机器学习中常见的损失函数

一般来说,我们在进行机器学习任务时,使用的每一个算法都有一个目标函数,算法便是对这个目标函数进行优化,特别是在分类或者回归任务中,便是使用损失函数(Loss Function)作为其目标函数,又称为代价函数(Cost Function)。损失函数是用来评价模型的预测值 Y_hat=f(X) 与真实值Y的不一致程度,它是一个非负实值函数。通常使用 L(Y,f(x))来表示损失函数,损失函数越小,模型的性能就越好。

设总有N个样本的样本集为(X,Y)=(xi,yi),yi,i∈[1,N]为样本i的真实值,yi_hat=f(xi),i∈[1,N] 为样本i的预测值,f 为分类或者回归函数。 那么总的损失函数为:


常见的损失函数 L(yi,yi_hat) 有以下几种:

01

Zero-one Loss

Zero-one Loss即0-1损失,它是一种较为简单的损失函数,如果预测值与目标值不相等,那么为1,否则为0,即:


该损失函数的意义就是,当预测错误时,损失函数值为1,预测正确时,损失函数值为0。该损失函数不考虑预测值和真实值的误差程度,也就是只要预测错误,预测错误差一点和差很多是一样的。可以看出上述的定义太过严格,如果真实值为1,预测值为0.999,那么预测应该正确,但是上述定义显然是判定为预测错误,那么可以进行改进为Perceptron Loss。

Perceptron Loss

02

Perceptron Loss即为感知损失。即:


其中t是一个超参数阈值,如在PLA(Perceptron Learning Algorithm,感知机算法)中取t=0.5。

03

Hinge Loss

Hinge损失可以用来解决间隔最大化问题,如在SVM中解决几何间隔最大化问题,其定义如下:


Log Loss

04

在使用似然函数最大化时,其形式是进行连乘,但是为了便于处理,一般会套上log,这样便可以将连乘转化为求和,由于log函数是单调递增函数,因此不会改变优化结果。因此log类型的损失函数也是一种常见的损失函数,如在LR(Logistic Regression, 逻辑回归)中使用交叉熵(Cross Entropy)作为其损失函数。即:


规定:


05

Square Loss

Square Loss即平方误差,常用于回归中。即:


Absolute Loss

06

Absolute Loss即绝对值误差,常用于回归中。即:


07

Exponential Loss

Exponential Loss为指数误差,常用于boosting算法中,如AdaBoost。即:


各损失函数图形如下:

08


2、正则

一般来说,对分类或者回归模型进行评估时,需要使得模型在训练数据上使得损失函数值最小,即使得经验风险函数最小化,但是如果只考虑经验风险(Empirical risk),容易过拟合(详细参见防止过拟合的一些方法),因此还需要考虑模型的泛化能力,一般常用的方法便是在目标函数中加上正则项,由损失项(Loss term)加上正则项(Regularization term)构成结构风险(Structural risk),那么损失函数变为:


其中λ是正则项超参数,常用的正则方法包括:L1正则与L2正则。

正则化方法是指在进行目标函数或代价函数优化时,在目标函数或代价函数后面加上一个正则项,一般有L1正则与L2正则等。

01

L1正则

L1正则是基于L1范数,即在目标函数后面加上参数的L1范数和项,即参数绝对值和与参数的积项,即:


其中 C0 代表原始的代价函数,n是样本的个数,λ就是正则项系数,权衡正则项与 C0 项的比重。后面那一项即为L1正则项。

在计算梯度时,w的梯度变为:


其中,sign是符号函数,那么便使用下式对参数进行更新:


对于有些模型,如线性回归中(L1正则线性回归即为Lasso回归),常数项b的更新方程不包括正则项,即:


其中,梯度下降算法中,α<0,β<0,而在梯度上升算法中则相反。

从上式可以看出,当w为正时,更新后w会变小;当w为负时,更新后w会变大;因此L1正则项是为了使得那些原先处于零(即|w|≈0)附近的参数w往零移动,使得部分参数为零,从而降低模型的复杂度(模型的复杂度由参数决定),从而防止过拟合,提高模型的泛化能力。

其中,L1正则中有个问题,便是L1范数在0处不可导,即|w|在0处不可导,因此在w为0时,使用原来的未经正则化的更新方程来对w进行更新,即令sign(0)=0,这样即:


L2正则是基于L2范数,即在目标函数后面加上参数的L2范数和项,即参数的平方和与参数的积项,即:


其中C0代表原始的代价函数,n是样本的个数,与L1正则化项前面的参数不同的是,L2项的参数乘了12,是为了便于计算以及公式的美感性,因为平方项求导有个2,λ就是正则项系数,权衡正则项与C0项的比重。后面那一项即为L2正则项。

L2正则化中则使用下式对模型参数进行更新:


对于有些模型,如线性回归中(L2正则线性回归即为Ridge回归,岭回归),常数项b的更新方程不包括正则项,即:


其中,梯度下降算法中,α<0,β<0,而在梯度上升算法中则相反。

从上式可以看出,L2正则项起到使得参数w变小加剧的效果,但是为什么可以防止过拟合呢?一个通俗的理解便是:更小的参数值w意味着模型的复杂度更低,对训练数据的拟合刚刚好(奥卡姆剃刀),不会过分拟合训练数据,从而使得不会过拟合,以提高模型的泛化能力。

在这里需要提到的是,在对模型参数进行更新学习的时候,有两种更新方式,mini-batch (部分增量更新)与 full-batch(全增量更新),即在每一次更新学习的过程中(一次迭代,即一次epoch),在mini-batch中进行分批处理,先使用一部分样本进行更新,然后再使用一部分样本进行更新。直到所有样本都使用了,这次epoch的损失函数值则为所有mini batch的平均损失值。设每次mini batch中样本个数为m,那么参数的更新方程中的正则项要改成:


而full-batch即每一次epoch中,使用全部的训练样本进行更新,那么每次的损失函数值即为全部样本的误差之和。更新方程不变。

正则项是为了降低模型的复杂度,从而避免模型区过分拟合训练数据,包括噪声与异常点(outliers)。从另一个角度上来讲,正则化即是假设模型参数服从先验概率,即为模型参数添加先验,只是不同的正则化方式的先验分布是不一样的。这样就规定了参数的分布,使得模型的复杂度降低(试想一下,限定条件多了,是不是模型的复杂度降低了呢),这样模型对于噪声与异常点的抗干扰性的能力增强,从而提高模型的泛化能力。还有个解释便是,从贝叶斯学派来看:加了先验,在数据少的时候,先验知识可以防止过拟合;从频率学派来看:正则项限定了参数的取值,从而提高了模型的稳定性,而稳定性强的模型不会过拟合,即控制模型空间。

另外一个角度,过拟合从直观上理解便是,在对训练数据进行拟合时,需要照顾到每个点,从而使得拟合函数波动性非常大,即方差大。在某些小区间里,函数值的变化性很剧烈,意味着函数在某些小区间里的导数值的绝对值非常大,由于自变量的值在给定的训练数据集中的一定的,因此只有系数足够大,才能保证导数的绝对值足够大。如下图:


另外一个解释,规则化项的引入,在训练(最小化cost)的过程中,当某一维的特征所对应的权重过大时,而此时模型的预测和真实数据之间距离很小,通过规则化项就可以使整体的cost取较大的值,从而,在训练的过程中避免了去选择那些某一维(或几维)特征的权重过大的情况,即过分依赖某一维(或几维)的特征。

L2与L1的区别在于,L1正则是拉普拉斯先验,而L2正则则是高斯先验。它们都是服从均值为0,协方差为1λ。当λ=0时,即没有先验)没有正则项,则相当于先验分布具有无穷大的协方差,那么这个先验约束则会非常弱,模型为了拟合所有的训练集数据, 参数w可以变得任意大从而使得模型不稳定,即方差大而偏差小。λ越大,标明先验分布协方差越小,偏差越大,模型越稳定。即,加入正则项是在偏差bias与方差variance之间做平衡tradeoff。下图即为L2与L1正则的区别:


上图中的模型是线性回归,有两个特征,要优化的参数分别是w1和w2,左图的正则化是L2,右图是L1。蓝色线就是优化过程中遇到的等高线,一圈代表一个目标函数值,圆心就是样本观测值(假设一个样本),半径就是误差值,受限条件就是红色边界(就是正则化那部分),二者相交处,才是最优参数。可见右边的最优参数只可能在坐标轴上,所以就会出现0权重参数,使得模型稀疏。

其实拉普拉斯分布与高斯分布是数学家从实验中误差服从什么分布研究中得来的。一般直观上的认识是服从应该服从均值为0的对称分布,并且误差大的频率低,误差小的频率高,因此拉普拉斯使用拉普拉斯分布对误差的分布进行拟合,如下图:


而拉普拉斯在最高点,即自变量为0处不可导,因为不便于计算,于是高斯在这基础上使用高斯分布对其进行拟合,如下图:


  1. 从AlexNet剖析—卷积网络CNN的一般结构

  2. 深度神经网络训练的必知技巧

  3. 深入浅出解读卷积神经网络

  4. 机器学习/深度学习入门资料汇总



机器学习算法全栈工程师


一个用心的公众号



长按,识别,加关注

进群,学习,得帮助

你的关注,我们的热度,

我们一定给你学习最大的帮助



公众号商务合作请联系  ▶▶▶

从损失函数的角度详解常见机器学习算法(1)相关推荐

  1. 【详解】机器学习算法详解

    目录 1 机器学习算法原理介绍 1.1 K-近邻算法 1 定义 2 算法流程 3 K-近邻实现 4 拓展:fit().tansform().fit_transform()区别 5 K近邻算法优缺点 1 ...

  2. Tensorflow 2.x(keras)源码详解之第十二章:keras中的损失函数之BinaryCrossentropy详解

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  3. Python-Matplotlib可视化(1)——一文详解常见统计图的绘制

    Python-Matplotlib可视化(1)--一文详解常见统计图的绘制 matplotlib库 曲线图 曲线图的绘制 结合Numpy库,绘制曲线图 绘制多曲线图 读取数据文件绘制曲线图 散点图 条 ...

  4. 视频编码全角度详解 PDF

    ====================================================================== 视频编码全角度详解.pdf, 清晰度一般,见 上图. 不介 ...

  5. 常见机器学习算法思想简单梳理

    转载自:http://blog.jobbole.com/74438/ 前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你 ...

  6. 8种常见机器学习算法比较

    8种常见机器学习算法比较 2016-08-04 17:46 转载 陈圳 0条评论 雷锋网(搜索"雷锋网"公众号关注)按:本文转自刘志伟责编,在机器学习中选择一个恰当的算法十分重要, ...

  7. 【算法知识】详解希尔排序算法

    前言 已发布: [算法知识]详解选择冒泡算法 [算法知识]详解选择排序算法 [算法知识]详解插入排序算法 当待插入元素是一个很小(当需求是从小到大排序时,从大到小排序时此处为很大)直接插入排序需要移动 ...

  8. 【算法知识】详解直接插入排序算法

    前言 已发布: [算法知识]详解选择冒泡算法 [算法知识]详解选择排序算法 在玩扑克牌的时候,我们抽到一张牌的时候,都是将它插入到当前手中牌的合适位置的. 如下图: (上图来自算法导论) 直接插入排序 ...

  9. 算法详解_常用算法详解——打印杨辉三角形

    杨辉三角,是二项式系数在三角形中的一种几何排列.在中国南宋数学家杨辉1261年所著的<详解九章算法>一书中出现.在欧洲,这个表叫做帕斯卡三角形.帕斯卡(1623----1662)是在165 ...

最新文章

  1. css选择器及float(浮动)
  2. 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第二章 深入理解Netd
  3. Springboot+mybatisplus搭建新闻管理系统
  4. oracle 的服务器进程(PMON, SMON,CKPT,DBWn,LGWR,ARCn)
  5. 3.4 参数展开-机器学习笔记-斯坦福吴恩达教授
  6. wxpython按钮形状如何修改_Python图形化界面入门教程 - 使用wxPython自定义表
  7. php new self()关键字的用法
  8. C#学习笔记-数据的传递(公共变量)以及Dictionary
  9. 在Chrome78浏览器上如何实现自动播放音视频
  10. struts中action与页面之间的传值方式
  11. MySQL的position值是什么_MySQL数据库中系统函数POSITION功能简介
  12. .NET技术(Path)
  13. ai人工智能操控什么意思_为什么要建立AI分散式自治组织(AI DAO)
  14. 视频应用在区块链上的应用
  15. 简单、免费但强大的高效率截图工具——Snipaste(下载安装+常用快捷键教学)
  16. vim中使用color_coded为c/cpp文件配色
  17. Excel如何将两列数据左右调换位置
  18. 生产稳定:JVM-MySQL-Tomcat-服务调用,调优相关
  19. 中国土地市场网数据爬取
  20. 怎么优雅的介绍自己的项目?

热门文章

  1. 电化学传感器电路设计
  2. 一次 JDBC 与 MySQL 因 “CST” 时区协商误解导致时间差了 14 或 13 小时的排错经历...
  3. python安装扩展库常用的工具是什么和conda_python习题01——董付国学习系列
  4. matlab中poly2sym,poly2sym 与 sym2poly
  5. R 线性模型 检验异常观测值
  6. 51nod 1072 威佐夫游戏
  7. UE4使用以及打包注意事项
  8. 罗斯蒙特3144PD1A1NAB4温度变送器
  9. SQL基本语法入门 看这里就够了
  10. linux mysql命令行导入_在linux中导入sql文件的方法分享(使用命令行转移mysql数据库)...