前言
- 今天是第二部分Loss函数
二、Loss函数
损失函数(Loss Function):是定义在单个样本上的,是指一个样本的误差。
代价函数(Cost Function):是定义在整个训练集上的,是所有样本误差的平均,也就是所有损失函数值的平均。
目标函数(Object Function):是指最终需要优化的函数,一般来说是经验风险+结构风险,也就是(代价函数+正则化项)。
1. 常用的损失函数
1)0-1损失函数(0-1 loss function)
𝐿(𝑦,𝑓(𝑥))={1,0,𝑦≠𝑓(𝑥)𝑦=𝑓(𝑥)
也就是说,当预测错误时,损失函数为1,当预测正确时,损失函数值为0。该损失函数不考虑预测值和真实值的误差程度。只要错误,就是1。
(2)平方损失函数(quadratic loss function)
𝐿(𝑦,𝑓(𝑥))=(𝑦−𝑓(𝑥))2
是指预测值与实际值差的平方。
(3)绝对值损失函数(absolute loss function)
𝐿(𝑦,𝑓(𝑥))=|𝑦−𝑓(𝑥)|
该损失函数的意义和上面差不多,只不过是取了绝对值而不是求绝对值,差距不会被平方放大。
2. 常用的代价函数
(1) 均方误差(Mean Squared Error)
𝑀𝑆𝐸=1𝑁∑𝑁𝑖=1(𝑦(𝑖)−𝑓(𝑥(𝑖)))2
均方误差是指参数估计值与参数真值之差平方的期望值; MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。( i
(2)均方根误差
𝑅𝑀𝑆𝐸=1𝑁∑𝑁𝑖=1(𝑦(𝑖)−𝑓(𝑥(𝑖)))‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾√
均方根误差是均方误差的算术平方根,能够直观观测预测值与实际值的离散程度。
通常用来作为回归算法的性能指标。
(3)平均绝对误差(Mean Absolute Error)
𝑀𝐴𝐸=1𝑁∑𝑁𝑖=1|𝑦(𝑖)−𝑓(𝑥(𝑖))|
平均绝对误差是绝对误差的平均值 ,平均绝对误差能更好地反映预测值误差的实际情况。
通常用来作为回归算法的性能指标。
(4)交叉熵代价函数(Cross Entry)
交叉熵:它主要刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。用来评估当前训练得到的概率分布与真实分布的差异情况,减少交叉熵损失就是在提高模型的预测准确率。
通常用做分类问题的代价函数。特别常用!!!
这里有一篇详细介绍的博文,如果想要深入了解可以点这里!
3. 正则化
正则化的作用就是使网络在训练过程中没那么容易过拟合,提高网络的稳定性。如果将所有的参数都加上惩罚项,就相当于尽量去简化假设模型。当这些参数越小时,得到的函数曲线越平滑,也越简单,也更不容易出现过拟合现象
(1)L2 规范化
L2 规范化是一种最为常用
的正则化手段 —— 有时候被称为权重衰减(weight decay)。L2 规范化的想法是增加一个额外的项到代价函数上,这个项叫做规范化项(有时也叫惩罚项)。
上式右边第一项是常规的损失函数,第二项就是L2规范化项, [公式] 称为规范化参数,n为训练集合的大小。 直觉地看,规范化的效果是让网络倾向于学习小一点的权重,其他的东西都一样的。大的权重只有能够给出代价函数第一项足够的提升时才被允许。换言之,规范化可以当做一种寻找小的权重和最小化原始的代价函数之间的折中。这两部分之间相对的重要性就由 λ 的值来控制了: λ 越小,就偏向于最小化原始代价函数,反之,倾向于小的权重。
(2)L1 规范化
L1 规范化是在未规范化的代价函数上加上一个权重绝对值的和:
L1 规范化和L2 规范化都会使参数变小,但如果对参数求导便可以看出:当参数接近于0时,L1 规范化的导数为1而L2 规范化的导数很小,L1正则会很容易让参数变为0让参数变得更稀疏,而L2不会。其次,L2正则项可导,L1正则项不可导,这样使得带L2正则项的损失函数更方便更容易优化,而带L1正则项的损失函数的优化就比较复杂。
(3)Dropout(暂退用在神经网络中,因为也有正则化的效果,所以列在这里)
Dropout 的思想和L1 norm,L2 norm 不同,它并不是通过学习到较小的权重参数来防止过拟合的,它是通过在训练的过程中随机丢掉部分神经元来减小神经网络的规模从而防止过拟合。
这里的丢掉不是永远的丢掉,而是在某一次训练中丢掉一些神经元,这些丢掉的神经元有可能在下一次迭代中再次使用的。
(4)Batch Normalization(批归一化层和Dropout层情况一样,也是用在神经网络中)
Batch Normalization 批归一化层(BN),批归一化层使得网络中每层输入数据的分布相对稳定,加速模型学习速度.BN通过规范化与线性变换使得每一层网络的输入数据的均值与方差都在一定范围内,使得后一层网络不必不断去适应底层网络中输入的变化,从而实现了网络中层与层之间的解耦,允许每一层进行独立学习,有利于提高整个神经网络的学习速度。当学习率设置太高时,会使得参数更新步伐过大,容易出现震荡和不收敛。但是使用BN的网络将不会受到参数数值大小的影响。
BN可以使得模型对网络中的参数不那么敏感,简化调参过程,使得网络学习更加稳定,在神经网络中,我们经常会谨慎地采用一些权重初始化方法(例如Xavier)或者合适的学习率来保证网络稳定训练。