以色列理工暑期学习-机器学习中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

相关文章

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Go之errors.New和fmt.Errorf 的区别小结

《Go之errors.New和fmt.Errorf的区别小结》本文主要介绍了Go之errors.New和fmt.Errorf的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考... 目录error的基本用法1. 获取错误信息2. 在条件判断中使用基本区别1.函数签名2.使用场景详细对

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程