以色列理工暑期学习-机器学习中Loss函数的小结

2023-10-24 22:50

本文主要是介绍以色列理工暑期学习-机器学习中Loss函数的小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

机器学习作为一种优化方法,最重要的一点是找到优化的目标函数——损失函数和正则项的组合;有了目标函数的“正确的打开方式”,才能通过合适的机器学习算法求解优化。

通俗来讲Loss函数是一种关于fitness的测度(关于数据是否合适模型的匹配度),或者是对于预测是否准确的一种判断,如果预测和判断没有错误,则损失函数的值为0;如果有错误则会进行一些“惩罚”措施,也可以称之为代价(风险)函数。借助文献中的原话:“the loss function measures “how bad” the mistake is. The loss can be interpreted as a penalty or error measure.”回到最开始的机器学习的问题上,对于机器学习一般会包含以下五个部分:

  1. 假设空间:如在线性回归、逻辑回归以及SVM中的参数

  2. 测度函数:最大似然或最小损失

  3. 是否有偏和方差的权衡:正则项或MAP最大后验估计

  4. 在假设空间中找到一个好的假设模型:优化模型、全局凸模型等

  5. 验证模型:在测试数据上实现预测,进行交叉验证

    通常我们定义Loss function如下:

图1 优化目标:损失函数+正则项

通常我们的误差函数包含以下五种:

  1. 黄金标准损失即 0-1 loss(在理想状态下的判别:下图中蓝色线)

  2. 铰链函数即 hinge loss(用于SVM中soft margin情况:下图中红色线)

  3. 对数函数即 log loss(用于逻辑回归、交叉熵损失:下图中黄色线)

  4. 平方损失即 square loss(用于线性回归:下图中黑色线)

  5. 指数损失即 exponential loss(用于boost情况:下图中绿色线)


下面我们来一一解释这些loss函数:

1. 0-1 Loss作为最为基本的分类器的评价函数,对于错误分类结果的一种计数,比较好理解:


这里需要引用参考文献的原文说明一点:

“The cost function induced by the 0-1-loss is the average misclassification error and the cost function induced by the squared loss is the mean squared error (MSE).

However, there are cost functions which cannot be decomposed using a loss function. For example, the area under the curve (AUC). In other words, all loss functions generate a cost function, but not all cost functions must be based on a loss function.“

cost函数可以归结为0-1Loss平均误分类的误差或由square损失的均方误差(最小二乘法推演);可能在一些问题上有所区分。

2. Hinge Loss作为SVM推导的损失函数去逼近0-1 Loss;很明显可以看出0-1是理想情况下的损失函数显式表达,SVM在感知机(Perceptron)的基础上,通过最大化分类边界(max margin)去进行分类;

然而对于不可分的情况下,引入soft margin,加入松弛,允许分类数据存在异常点:


所以SVM参数中,最重要的就是求解C和hinge loss,不同的情况下soft margin是不一样的,有待优化。所以最终的hinge loss的形式才会变成:

这样的近似对于优化来讲,就可以用一些凸优化的方法,第一项正则项为凸,hinge loss也是凸函数:

3. Log Loss看形式我们基本可以猜测是从概率的方向得到的;看过经典斯坦福的ML课程的同学都知道,先是讲 linear regression 然后引出最小二乘误差,之后概率角度高斯分布解释最小误差。然后讲逻辑回归,使用MLE来引出优化目标是使得所见到的训练数据出现概率最大。

如果我们在逻辑回归模型中,利用逻辑回归sigma函数,带入判别参数,求出最大似然估计式,其对应的就是我们的最小化的交叉熵函数。关于交叉熵与KL divergence关系,读者可以自行查找资料验证。

4. Square Loss就是这里大家最为熟知的最小二乘法在线性回归中的推导,最小二乘法是线性回归的一种,OLS将问题转化为一个凸优化的问题,假设样本和噪声满足高斯分布,最后通过极大似然推导出最小二乘,将样本点到拟合最优的回归线的距离最小,即残差最小化。

5. Exponential Loss 指数损失可能会有些陌生,形式如下:

用在boosting机制中,本公众号的经典算法文章中有关于boosting的介绍。可以作为补充阅读。


其实简明来讲就是通过弱分类器投票进行强分类器的合成,优势有很多,比如,序列性迭代决策,分类函数线介于square和log,对于过拟合的情况不必担心,但是计算量会较大。在学习boosting的过程中,会发现通过弱分类器发现的错误的会被逐渐削弱,弱分类器在已有分类器分出的错误空间上不断切割(分类空间),如图:

上图中,关于迭代停止条件,因为弱分类器的定义就是分类判别概率小于0.5,就像一枚硬币一样。大家应该会比较疑惑,关于参数是怎么得到的,然后去更新每一个弱分类器的权重,下图会根据定理求出上边界

参数a表示分类误差率越小的基本分类器在最终分类器中的作用越大。参考文献【5】中,July在博文中推导了,作为加法模型的指数损失函数的原型:向前分步学习算法的损失函数证明为指数形式,下图中,在做相关公式推导的过程中,也是比较直接的通过已经在算法中设定好的指数形式loss函数,根据最小化函数目标,求导得出a的参数值。

当然,现实情景中的损失函数可以进行自定义,但是需要考虑数据本身和未来通过什么优化的方法去求解更为方便。而且在真正的优化函数中会涉及到正则项,对于特征筛选和防止过拟合问题也是十分关键。需要各位读者认真领会Loss函数和正则项的意义才能更好地设计出符合实际的优化目标函数。

参考文献:

【1】https://www.youtube.com/watch?v=BsqqMVjzxCY

【2】https://github.com/JohnLangford/vowpal_wabbit/wiki/Loss-functions

【3】http://image.diku.dk/shark/sphinx_pages/build/html/rest_sources/tutorials/concepts/library_design/losses.html

【4】http://www.cs.cmu.edu/~yandongl/loss.html

【5】http://blog.csdn.net/v_july_v/article/details/40718799

这篇关于以色列理工暑期学习-机器学习中Loss函数的小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/278289

相关文章

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客