损失函数的总结与推导
损失函数的总结与推导
- 1. 概念区分
- 2.回归常用损失函数
- 2.1 均方差损失(MSE)
- 2.2 平均绝对损失 (MAE)
- MAE与MSE的比较
- 2.3 Huber Loss
- 3.分类常用损失函数
- 3.1 交叉熵损失
- 3.1.1 二分类
- 3.1.2 多分类
- 分类为什么是交叉熵
- 总结
1. 概念区分
Loss Function
损失函数 Loss Function
损失函数 Loss Function还分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,通常是针对单个训练样本而言,给定一个模型输出 y^ 和一个真实 y ,损失函数输出一个实值损失y - y^ 。用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。结构风险损失函数是指经验风险损失函数加上正则项。
Cost Function
代价函数 Cost Function 通常是针对整个训练集(或者在使用 mini-batch gradient descent 时一个 mini-batch)的总损失 。
Objective Function
目标函数 Objective Function 是一个更通用的术语,表示任意希望被优化的函数,用于机器学习领域和非机器学习领域(比如运筹优化)
即:损失函数和代价函数只是在针对样本集上有区别。
2.回归常用损失函数
2.1 均方差损失(MSE)
均方差 Mean Squared Error (MSE)损失是机器学习、深度学习回归任务中最常用的一种损失函数,也称为 L2 Loss。其基本形式如下
原理推导
实际上在一定的假设下,我们可以使用最大化似然得到均方差损失的形式。假设模型预测与真实值之间的误差服从标准高斯分布,则给定一个x,模型输出真实值的概率为
进一步我们假设数据集中 N 个样本点之间相互独立,则给定所有X输出所有真实值y的概率,即似然 函数,为所有p(y|x)的累乘
通常为了计算方便,我们通常最大化对数似然(通过去log,将乘机转为和的形式,方便计算)
去掉与y无关的第一项,将最大化对数似然转化为最小化负对数似然 ,就可以使用梯度下降等方法对其求最小值了。
可以看到这个实际上就是均方差损失的形式。也就是说在模型输出与真实值的误差服从高斯分布的假设下,最小化均方差损失函数与极大似然估计本质上是一致的,因此在这个假设能被满足的场景中(比如回归),均方差损失是一个很好的损失函数选择;当这个假设没能被满足的场景中(比如分类),均方差损失不是一个好的选择。
2.2 平均绝对损失 (MAE)
平均绝对误差 Mean Absolute Error (MAE)是另一类常用的损失函数,也称为 L1 Loss。其基本形式如下
MAE 损失的最小值为 0(当预测等于真实值时),最大值为无穷大。随着预测与真实值绝对误差的增加,MAE 损失呈线性增长.原理推导
同样的我们可以在一定的假设下通过最大化似然得到 MAE 损失的形式,假设模型预测与真实值之间的误差服从拉普拉斯分布 Laplace distribution,则给定一个X模型输出真实值y的概率为
与上面推导 MSE 时类似,我们可以得到的负对数似然实际上就是 MAE 损失的形式
MAE与MSE的比较
1. MSE 通常比 MAE 可以更快地收敛
2. MAE 对于 outlier 更加 robust。
我们可以从两个角度来理解这一点:
第一个角度是直观地理解,下图是 MAE 和 MSE 损失画到同一张图里面,由于MAE 损失与绝对误差之间是线性关系,MSE 损失与误差是平方关系,当误差非常大的时候,MSE 损失会远远大于 MAE 损失。因此当数据中出现一个误差非常大的 outlier 时,MSE 会产生一个非常大的损失,对模型的训练会产生较大的影响。
第二个角度是从两个损失函数的假设出发,MSE 假设了误差服从高斯分布,MAE 假设了误差服从拉普拉斯分布。拉普拉斯分布本身对于 outlier 更加 robust,当右图右侧出现了 outliers 时,拉普拉斯分布相比高斯分布受到的影响要小很多。因此以拉普拉斯分布为假设的 MAE 对 outlier 比高斯分布为假设的 MSE 更加 robust。
2.3 Huber Loss
上文我们分别介绍了 MSE 和 MAE 损失以及各自的优缺点,MSE 损失收敛快但容易受 outlier 影响,MAE 对 outlier 更加健壮但是收敛慢,Huber Loss则是一种将 MSE 与 MAE 结合起来,取两者优点的损失函数,也被称作 Smooth Mean Absolute Error Loss 。其原理很简单,就是在误差接近 0 时使用 MSE,误差较大时使用 MAE,公式为
- Huber Loss 的特点
Huber Loss 结合了 MSE 和 MAE 损失,在误差接近 0 时使用 MSE,使损失函数可导并且梯度更加稳定;在误差较大时使用 MAE 可以降低 outlier 的影响,使训练对 outlier 更加健壮。缺点是需要额外地设置一个超参数。
- Huber Loss python实现
# huber 损失
def huber(true, pred, delta):loss = np.where(np.abs(true-pred) < delta , 0.5*((true-pred)**2), delta*np.abs(true - pred) - 0.5*(delta**2))return np.sum(loss)
3.分类常用损失函数
3.1 交叉熵损失
3.1.1 二分类
考虑二分类,在二分类中我们通常使用Sigmoid函数将模型的输出压缩到 (0, 1) 区间内,用来代表给定输入 ,模型判断为正类的概率。下图是对二分类的交叉熵损失函数的可视化,蓝线是目标值为 0 时输出不同输出的损失,黄线是目标值为 1 时的损失。可以看到约接近目标值损失越小,随着误差变差,损失呈指数增长。
原理推导
由于只有分两类,因此同时也得到了正负类的概率, 则可以假设样本服从伯努利分布(0-1分布) 。
将两条式子合并成一条
假设数据点之间独立同分布,则似然函数,即各样本的概率乘机可以表示为
对似然取对数,然后加负号变成最小化负对数似然,即为交叉熵损失函数的形式
3.1.2 多分类
在多分类的任务中,交叉熵损失函数的推导思路和二分类是一样的,变化的地方有两个:
真实值 y 现在是一个 One-hot 向量,每个值代表每个类对应的概率,和为1
模型输出的激活函数由原来的 Sigmoid 函数换成 Softmax函数
Softmax 函数将每个维度的输出范围都限定在0-1 之间,同时所有维度的输出和为 1,用于表示一个概率分布。
举例:假设一个5分类问题,然后一个样本I的标签y=[0,0,0,1,0],也就是说样本I的真实标签是4。
假设模型预测的结果概率(softmax的输出)p=[0.1,0.15,0.05,0.6,0.1],可以看出这个预测是对的,那么对应的损失L=-log(0.6),也就是当这个样本经过这样的网络参数产生这样的预测p时,它的损失是-log(0.6)。
那么假设p=[0.15,0.2,0.4,0.1,0.15],这个预测结果就很离谱了,因为真实标签是4,而你觉得这个样本是4的概率只有0.1(远不如其他概率高,如果是在测试阶段,那么模型就会预测该样本属于类别3),对应损失L=-log(0.1)。
再假设p=[0.05,0.15,0.4,0.3,0.1],这个预测结果虽然也错了,但是没有前面那个那么离谱,对应的损失L=-log(0.3)。我们知道log函数在输入小于1的时候是个负数,而且log函数是递增函数,所以-log(0.6) < -log(0.3) < -log(0.1)。简单讲就是你预测错比预测对的损失要大,预测错得离谱比预测错得轻微的损失要大。
- 原理推导
我们知道Softmax 函数将每个维度的输出范围都限定在0-1之间,同时所有维度的输出和为 1,用于表示一个概率分布。那末对应类的概率可以表示为。
假设模型输出为[0.1,0.15,0.05,0.6,0.1] ,真实样本为[0,0,0,1,0],计算得p刚好为0.6,非1项的幂都为1了。
其中k表示 K 个类别中的一类,同样的假设数据点之间独立同分布,可得到负对数似然为
由于输出的y是一个 one-hot 向量,除了目标类为 1 之外其他类别上的输出都为 0,因此上式也可以写为
其中C是样本X的目标类。通常这个应用于多分类的交叉熵损失函数也被称为 Softmax Loss 或者 Categorical Cross Entropy Loss。
分类为什么是交叉熵
分类中为什么不用均方差损失?上文在介绍均方差损失的时候讲到实际上均方差损失假设了误差服从高斯分布,在分类任务下这个假设没办法被满足,因此效果会很差。为什么是交叉熵损失呢?有两个角度可以解释这个事情。
一个角度从最大似然的角度,也就是我们上面的推导,另一个角度是可以用信息论来解释交叉熵损失
以下是信息论的角度来解释。
可以看到通过最小化交叉熵的角度推导出来的结果和使用最大化似然得到的结果是一致的。
总结
- 交叉熵函数与最大似然函数的联系和区别
区别:交叉熵函数使用来描述模型预测值和真实值的差距大小,越大代表越不相近;似然函数的本质就是衡量在某个参数下,整体的估计和真实的情况一样的概率,越大代表越相近。
联系:交叉熵函数可以由最大似然函数在伯努利分布的条件下推导出来,或者说最小化交叉熵函数的本质就是对数似然函数的最大化。
分类中的交叉熵损失相当于在数据分布为伯努利分布的情况下的log损失,均方损失相当于数据在高斯分布下的log损失,绝对值损失则是在拉普拉斯分布下的log损失。
通常在损失函数中还会有正则项(L1/L2 正则),这些正则项作为损失函数的一部分,通过约束参数的绝对值大小以及增加参数稀疏性来降低模型的复杂度,防止模型过拟合。
损失函数的总结与推导相关推荐
- 基于阈值的损失函数_【代码+推导】常见损失函数和评价指标总结
(给机器学习算法与Python学习加星标,提升AI技能) 作者:董文辉 本文长度为4500字,建议阅读10+分钟 本文为你总结常见损失函数和评价指标. 目录 一.损失函数 1.1 回归问题 1.2 分 ...
- 交叉熵代价函数(损失函数)及其求导推导
转自:http://blog.csdn.net/jasonzzj/article/details/52017438 前言 交叉熵损失函数 交叉熵损失函数的求导 前言 说明:本文只讨论Logistic回 ...
- 关于MSELoss、BCELoss、CELoss损失函数求导的推导
1.MSELoss求导 y: ~ 真实值 p: ~ 预测值 M S E l o s s = 1 2 ⋅ ∑ i = 1 n ( y i − p i ) 2 p i = x i ⋅ w + b MS ...
- 【西瓜书笔记】补充1:logistic回归及其损失函数,梯度下降推导
Logistic回归理论知识补充 建模流程 假设我们建立一个二分类模型.假设有两个人A.B在争论如何对一个新样本 x x x进行0-1二分类,他们两个分别对新样本进行打分,如果A的分数大于B的分数,则 ...
- 交叉熵代价函数(损失函数)及其求导推导 (Logistic Regression)
目录 1. 前言 2. 交叉熵损失函数 3. 交叉熵损失函数的求导 前言 说明:本文只讨论Logistic回归的交叉熵,对Softmax回归的交叉熵类似(Logistic回归和Softmax回归两者本 ...
- 损失函数-交叉熵的推导和二分类交叉熵
交叉熵 期望: 期望就是所有随机变量的均值. E(X)=X1*P(X1)+X2*P(X2)+X3*P(X3) 熵: 熵表示所有信息量的期望. 信息量如何计算呢? 概率值取Log,然后加个负号,就是信息 ...
- Softmax及其损失函数求导推导过程
Softmax激活函数的损失函数求导过程推导 Softmax函数介绍 Softmax的损失函数:交叉熵 Softmax求导过程 损失函数求导 Softmax函数介绍 在深度学习领域,多分类问题的激活函 ...
- Logistic回归损失函数推导
Logistic回归损失函数推导 前言 Logistic回归损失函数的极大似然推导:西瓜书公式3.27怎么推来的? Logistic回归损失函数的极大似然推导:西瓜书公式3.27怎么推来的? Logi ...
- 深度学习常见问题解析
深度学习常见问题解析 计算机视觉与自动驾驶 今天 一.为什么深层神经网络难以训练? 1.梯度消失.梯度消失是指通过隐藏层从后向前看,梯度会变得越来越小,说明前面层的学习会显著慢于后面层的学习,所以学习 ...
最新文章
- Oracle: 三、Oracle的隐藏事务与视图的创建
- N - New Game(DFS+剪枝)
- Qt小传——从诞生到发展、繁荣
- boost::mpl::vector用法的测试程序
- jqGrid Events
- android:showAsAction 无效
- ROS----小乌龟之你追我赶
- php 获取上周日期_php 获取上一周下一周的日期列表
- 利用JQuery在动态页面的倒计时器
- android 呼吸灯权限_Android 呼吸灯效果
- 开发MT4指标和EA(自动交易系统)
- C# 将图片转成字符画
- 使用RedRocket方便的查看证券数据
- SpringCloud Netflix---Eureka服务注册
- slab为什么要进行染色处理
- {__ob__: Observer }的解决方式
- 20-30岁怎么规划自己的人生呢?
- windows下安装启动rocketmq可视化界面
- 动态规划-(基本知识总结)
- OpenGL-聚光灯-spot
热门文章
- Java实现 LeetCode 136 只出现一次的数字
- Android APK 的构建流程以及Gradle多版本构建
- 工作多年的工作焦虑症-广泛性焦虑症
- 微信小程序使用for循环展示图片,如果点击其中一个怎么获取该图片的src
- 【JS算法】 排序算法及性能汇总
- 代码编辑器源代码_10个最佳免费源代码编辑器可供下载
- 市场调查与分析概述1
- 自定义Scrollbar样式-封装复用
- 华为手表注册无法连接服务器,华为watch3网络未连接是怎么回事 华为watch3手表怎么正确连接网络...
- ESP8266_RTOS_SDK v3.x 读DS18B20温度数据