本部分参考自——机器学习中的目标函数、损失函数、代价函数有什么区别?
- 损失函数(Loss Function )是定义在单个样本上的,算的是一个样本的误差。
- 代价函数(Cost Function )是定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均。(也被称作经验风险)
- 目标函数(Object Function)定义为:最终需要优化的函数。等于经验风险+结构风险(也就是代价函数 + 正则化项)。代价函数最小化,降低经验风险,正则化项最小化降低。
The loss function computes the error for a single training example; the cost function is the average of the loss funcitons of the entire training set. — — Andrew NG
根据NG的解释可以得出结论:损失函数(loss function)是单个样本的训练误差,而代价函数(cost function)是所有样本损失函数的期望。
1.2 常见的损失函数损失函数是一个非负实数函数,用来量化模型预测和真实标签之间的差异。下面介绍几种常用的损失函数。
1. 0-1 损失函数(0-1 Loss Function)
最直观的损失函数是模型在训练集上的错误率,即0-1 损失函数:
L
(
y
,
f
(
x
)
)
=
{
1
,
y
≠
f
(
x
)
0
,
y
=
f
(
x
)
=
I
(
y
≠
f
(
x
)
)
(1-1)
begin{aligned} L(y, f(x)) &= begin{cases} 1, & {y neq f(x) } \ 0, & {y = f(x)} end{cases} \&= I(ynot=f(x)) end{aligned}tag{1-1}
L(y,f(x))={1,0,y=f(x)y=f(x)=I(y=f(x))(1-1)
其中
I
(
⋅
)
I(cdot)
I(⋅) 是指示函数即当预测错误时,损失函数为1,当预测正确时,损失函数值为0。该损失函数不考虑预测值和真实值的误差程度。只要错误,就是1。
虽然 0-1 损失函数能够客观地评价模型的好坏,但其缺点是数学性质不是很好:不连续且导数为0,难以优化.。因此经常用连续可微的损失函数替代。
2. 平方损失函数(Quadratic Loss Function)
平方损失函数经常用在预测标签
푦
푦
y 为实数值的任务中,定义为
L
(
y
,
f
(
x
)
)
=
(
y
−
f
(
x
)
)
2
(1-2)
L(y, f(x)) = (y - f(x))^2 tag{1-2}
L(y,f(x))=(y−f(x))2(1-2)
是指预测值与实际值差的平方。
平方损失函数一般不适用于分类问题。
3. 绝对值损失函数(Absolute Loss Function)
L
(
y
,
f
(
x
)
)
=
∣
y
−
f
(
x
)
∣
(1-3)
L(y, f(x)) = | y -f(x) | tag{1-3}
L(y,f(x))=∣y−f(x)∣(1-3)
该损失函数的意义和上面差不多,只不过是取了绝对值而不是求绝对值,差距不会被平方放大。
4. 对数损失函数(logarithmic loss function)
L
(
y
,
p
(
y
∣
x
)
)
=
−
log
p
(
y
∣
x
)
(1-4)
L(y, p(y|x)) = - log p(y|x) tag{1-4}
L(y,p(y∣x))=−logp(y∣x)(1-4)
这个损失函数就比较难理解了。事实上,该损失函数用到了极大似然估计的思想。
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X) 通俗的解释就是:在当前模型的基础上,对于样本
X
X
X,其预测值为
Y
Y
Y,也就是预测正确的概率。由于概率之间的同时满足需要使用乘法,为了将其转化为加法,我们将其取对数。最后由于是损失函数,所以预测正确的概率越高,其损失值应该是越小,因此再加个负号取个反。
5. Hinge损失函数(Hinge Loss Function)
Hinge loss一般分类算法中的损失函数,尤其是SVM,其定义为:
L
(
w
,
b
)
=
m
a
x
{
0
,
1
−
y
f
(
x
)
}
(1-5)
L(w,b) = max {0, 1-yf(x) } tag{1-5}
L(w,b)=max{0,1−yf(x)}(1-5)
其中 y = + 1 y=+1 y=+1 或 y = − 1 y=−1 y=−1, f ( x ) = w x + b f(x)=wx+b f(x)=wx+b,当为SVM的线性核时。
了解更多,请阅读:机器学习中的损失函数 (着重比较:hinge loss vs softmax loss)和损失函数 、代价函数、目标函数
2 风险函数
这部分内容参考自——西伯尔——机器学习,评估——风险函数和Traco——经验风险VS风险函数
2.1 定义风险函数(risk function)= 期望风险(Expected Risk)= 期望损失(Expected Loss),可以认为是平均意义下的损失。
风险函数有两种,不考虑正则项的是经验风险(Empirical Risk),考虑过拟合问题,加上正则项的是结构风险(Structural Risk)。
监督学习的两种基本策略:经验风险最小化(ERM)和结构风险最小化(SRM)。
这样,监督学习问题就变成了经验风险或结构风险函数的最优化问题,即经验或结构风险函数是最优化的目标函数。
2.2 三种风险的关系期望风险是理想,是白月光,是可望不可求的,只能用经验风险去近似,而结构风险是经验风险的升级版。
为什么可以用经验风险估计期望风险呢?
根据大数定律,当样本容量 N N N 趋于无穷时,经验风险 R e m p ( f ) R_{emp}(f) Remp(f) 趋于期望风险 R e x p ( f ) R_{exp}(f) Rexp(f)。所以一个很自然的想法是用经验风险估计期望风险,即局部最优代替全局最优。
但是,由于现实中的训练样本数目有限,甚至很小,所以用经验风险估计期望风险常常并不理想,要对经验风险进行一定的矫正。这就关系到监督学习的两个基本策略:经验风险最小化和结构风险最小化。
1. 期望风险(Expected Risk)【全局,理想】
期望风险对所有样本预测错误程度的均值,基于所有样本点损失函数最小化。期望风险是全局最优,是理想化的不可求的。
期望风险、期望损失、风险函数三者是等价的,也就是损失
L
(
Y
,
f
(
X
)
)
L(Y,f(X))
L(Y,f(X)) 的数学期望,在理论上,可以代入期望公式
E
X
=
∑
x
i
⋅
P
i
=
∫
x
⋅
f
(
x
)
d
x
EX=sum x_icdot P_i=int xcdot f(x)dx
EX=∑xi⋅Pi=∫x⋅f(x)dx,也就是
R
e
x
p
=
E
p
[
L
(
Y
,
f
(
X
)
]
=
∬
L
(
y
,
f
(
x
)
)
⋅
f
(
x
,
y
)
d
x
d
y
(2-1)
R_{exp} = E_p[L(Y, f(X)] = iint L(y, f(x))cdot f(x, y) dxdytag{2-1}
Rexp=Ep[L(Y,f(X)]=∬L(y,f(x))⋅f(x,y)dxdy(2-1)
但是由于联合概率密度函数
f
(
x
,
y
)
f(x,y)
f(x,y) 不知道,所以此路不通,只能另寻他路,也就是根据经验找近似。
2. 经验风险(Empirical Risk)【局部,现实】
经验风险(Empirical Risk)也称为经验错误(Empirical Error),损失函数度量了单个样本的预测结果,要想衡量整个训练集的预测值与真实值的差异,将整个训练集所有记录均进行一次预测,求取损失函数,将所有值累加,即为经验风险。经验风险是局部最优,是现实的可求的。
就是已知的数据按照现有的模型,测试预测值和真实值偏离的程度叫经验风险。
经验风险越小说明模型 f ( x ) f(x) f(x) 对训练集的拟合程度越好。
经验风险 = 经验损失 = 代价函数
给定一个数据集,模型
f
(
x
)
f(x)
f(x) 关于训练集的平均损失被称为经验风险(empirical risk)或经验损失(empirical loss)。
R
e
m
p
(
f
)
=
1
N
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
(2-2)
R_{emp}(f) = frac{1}{N}frac{1}{N}sum_{i=1}^{N}L(y_i, f(x_i)) tag{2-2}
Remp(f)=N1N1i=1∑NL(yi,f(xi))(2-2)
这个公式的用意很明显,就是模型关于训练集的平均损失(每个样本的损失加起来,然后平均一下)。在实际中用的时候,我们也就很自然的这么用了。
3. 结构风险(Structural Risk)
结构风险,就是在经验风险上加上一个正则化项(regularizer)或者叫做罚项(penalty term),即
R
s
r
m
(
f
)
=
1
N
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
+
λ
J
(
f
)
(2-3)
R_{srm}(f) = frac{1}{N}frac{1}{N}sum_{i=1}^{N}L(y_i, f(x_i)) + lambda J(f) tag{2-3}
Rsrm(f)=N1N1i=1∑NL(yi,f(xi))+λJ(f)(2-3)
2.3 经验风险最小化和结构风险最小化经验风险 vs 期望风险∶
- 期望风险是模型对全局(所有数据集)的效果;经验风险是模型对局部(训练集)的效果
- 期望风险往往无法计算,即联合分布 f ( X , Y ) f(X, Y) f(X,Y) 通常是未知的;而经验风险可以计算
- 当训练集足够大时,经验风险可以替代期望风险,即局部最优代替全局最优
1. 经验风险最小化&结构风险最小化
经验风险最小化(empirical risk minimization,ERM),就是认为经验风险最小的模型是最优的模型,用公式表示:
min
f
∈
F
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
(2-4)
min_{finmathcal{F}}frac{1}{N}sum_{i=1}^{N}L(y_i, f(x_i)) tag{2-4}
f∈FminN1i=1∑NL(yi,f(xi))(2-4)
这个理论很符合人的直观理解。因为在训练集上面的经验风险最小,也就是平均损失越小,意味着模型得到结果和“真实值”尽可能接近,表明模型越好。
当样本容量不大的时候,经验风险最小化模型容易产生“过拟合”的问题。为了“减缓”过拟合问题,就提出了结构风险最小的理论。
结构风险最小化(structural risk minimization,SRM),就是认为,结构风险最小的模型是最优模型,公式表示
min
f
∈
F
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
+
λ
J
(
f
)
(2-5)
min_{finmathcal{F}}frac{1}{N}sum_{i=1}^{N}L(y_i, f(x_i)) + lambda J(f) tag{2-5}
f∈FminN1i=1∑NL(yi,f(xi))+λJ(f)(2-5)
2. 经验风险最小化的例子:极大似然估计(maximum likelihood estimation)
- 模型——条件概率分布;
- 损失函数——对数损失函数;
- 经验风险最小化等价于极大似然估计。
3. 结构风险最小化的例子:贝叶斯最大后验概率估计
- 模型——条件概率分布;
- 损失函数——对数损失函数;
- 模型复杂度——由先验概率表示;
- 结构风险=经验风险+正则项=后验概率+先验概率;
- 先验概率不变,结构风险最小化,等价于最大后验概率估计。
2.4 风险函数与对数损失函数结构风险 vs 经验风险︰
- 经验风险越小,模型决策函数越复杂,其包含的参数越多
- 当经验风险函数小到一定程度就出现了过拟合现象
- 防止过拟合现象的方式,就要降低决策函数的复杂度,让惩罚项 J ( f ) J(f) J(f) 最小化
- 需要同时保证经验风险函数和模型决策函数的复杂度都达到最小化
- 把两个式子融合成一个式子得到结构风险函数然后对这个结构风险函数进行最小化
3 常用的代价函数
这部分内容参考自——【机器学习】代价函数(cost function)
3.1.1 均方误差(Mean Squared Error)M S E = 1 N ∑ i = 1 N ( y i − y ^ ) 2 (2-6) MSE={frac{1}{N}{sum_{i=1}^N(y_i-widehat{y})^2} } tag{2-6} MSE=N1i=1∑N(yi−y )2(2-6)
均方误差是指参数估计值与参数真值之差平方的期望值; MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。(
i
i
i 表示第
i
i
i 个样本,
N
N
N 表示样本总数)
通常用来做回归问题的代价函数。
R
M
S
E
=
M
S
E
RMSE=sqrt{MSE}
RMSE=MSE
均方根误差是均方误差的算术平方根,能够直观观测预测值与实际值的离散程度。
通常用来作为回归算法的性能指标。
M A E = ∑ i = 1 n ∣ y i − y ^ ∣ n (2-7) MAE={{sum_{i=1}^n|y_i-widehat{y}|} over n}tag{2-7} MAE=n∑i=1n∣yi−y ∣(2-7)
平均绝对误差是绝对误差的平均值 ,平均绝对误差能更好地反映预测值误差的实际情况。
MSE误差函数对噪声点比较敏感,因为噪声的误差一般比较大,经过平方后放大的倍数会影响模型的效果,此时可以选择对噪声不是非常敏感的’MAE’损失函数。
H ( p , q ) = − ∑ i = 1 N p ( x ( i ) ) log q ( x ( − i ) ) (2-8) H(p,q) = - sum_{i=1}^{N} p(x^{(i)}) log {q(x^{(-i)})} tag{2-8} H(p,q)=−i=1∑Np(x(i))logq(x(−i))(2-8)
交叉熵是用来评估当前训练得到的概率分布与真实分布的差异情况,减少交叉熵损失就是在提高模型的预测准确率。其中 p ( x ) p(x) p(x) 是指真实分布的概率, q ( x ) q(x) q(x) 是模型通过数据计算出来的概率估计。通常用做分类问题的代价函数。对于二分类模型的交叉熵代价函数(可参考下一小节——逻辑回归)。
3.1.5 Huber损失函数L δ ( y , y ^ ) = { 1 2 ( y − y ^ ) 2 ∣ y − y ^ ∣ ≤ δ δ ∣ y − y ^ ∣ − 1 2 δ 2 o t h e r w i s e (2-9) L_delta(y,widehat{y})=begin{cases} {1over2}(y-widehat{y})^2 & |y-widehat{y}|le delta \ delta|y-widehat{y}|-{1 over2}delta^2 & otherwise end{cases}tag{2-9} Lδ(y,y )={21(y−y )2δ∣y−y ∣−21δ2∣y−y ∣≤δotherwise(2-9)
3.1.6 Log-Cosh Loss
- δ delta δ 是超参数,可调
- 当 δ delta δ 接近于0时,Huber loss接近MAE 当 δ delta δ 接近于
- ∞ infty ∞ 时,Huber loss接近MSE
L ( y , y ^ ) = ∑ i = 1 n l o g ( c o s h ( y − y ^ ) ) (2-10) L(y,widehat{y})=sum_{i=1}^nlog(cosh(y-widehat{y})) tag{2-10} L(y,y )=i=1∑nlog(cosh(y−y ))(2-10)
3.1.7 分位数损失函数基于Quantile回归的目的是,在给定预测变量的某些值时,估计因变量的条件“分位数”。Quantile Loss实际上只是MAE的扩展形式(当分位数是第50个百分位时,Quantile Loss退化为MAE)。
3.2 各常见代价函数的优缺点
- 使用平方误差更容易求解, 但使用绝对误差对离群点更加鲁棒;
- 当数据存在离群点时,以MSE为损失的模型会赋予更高的权重给离群点;
- MAE损失适用于训练数据被离群点损坏的时候(即,在训练数据而非测试数据中,我们错误地获得了不切实际的过大正值或负值);
- 对所有的观测数据,如果我们只给一个预测结果来最小化MSE,那么该预测值应该是所有目标值的均值。但是如果我们试图最小化MAE,那么这个预测就是所有目标值的中位数。我们知道中位数对于离群点比平均值更鲁棒,这使得MAE比MSE更加鲁棒;
- 使用MAE损失(特别是对于神经网络)的一个大问题是它的梯度始终是相同的,这意味着即使对于小的损失值,其梯度也是大的。这对模型的学习可不好。为了解决这个问题,我们可以使用随着接近最小值而减小的动态学习率。MSE在这种情况下的表现很好, 即使采用固定的学习率也会收敛。 MSE损失的梯度在损失值较高时会比较大, 随着损失接近0时而下降,从而使其在训练结束时更加精确。
- 如果离群点是会影响业务、而且是应该被检测到的异常值,那么我们应该使用MSE。如果我们认为离群点仅仅代表数据损坏,那么我们应该选择MAE作为损失。
- L1损失对异常值更加稳健,但其导数并不连续,因此求解效率很低。L2损失对异常值敏感,但给出了更稳定的闭式解(closed form solution)(通过将其导数设置为0);
- 两种损失函数的问题:可能会出现这样的情况,即任何一种损失函数都不能给出理想的预测。例如,如果我们数据中90%的观测数据的真实目标值是150,其余10%的真实目标值在0-30之间。那么,一个以MAE为损失的模型可能对所有观测数据都预测为150,而忽略10%的离群情况,因为它会尝试去接近中值。同样地,以MSE为损失的模型会给出许多范围在0到30的预测,因为它被离群点弄糊涂了。这两种结果在许多业务中都是不可取的。
- Huber Loss对数据离群点的敏感度低于平方误差损失。它在0处也可导。基本上它是绝对误差,当误差很小时,误差是二次形式的。误差何时需要变成二次形式取决于一个超参数,该超参数可以进行微调。 δ delta δ 的选择非常重要,因为它决定了你认为什么数据是离群点。
- 使用MAE训练神经网络的一个大问题是经常会遇到很大的梯度,使用梯度下降时可能导致训练结束时错过最小值。对于MSE,梯度会随着损失接近最小值而降低,从而使其更加精确。在这种情况下,Huber Loss可能会非常有用,因为它会使最小值附近弯曲,从而降低梯度。另外它比MSE对异常值更鲁棒。因此,它结合了MSE和MAE的优良特性。但是,Huber Loss的问题是我们可能需要迭代地训练超参数 δ delta δ。
- 优点:log(cosh(x))对于小的 x x x 来说,其大约等于 ( x ∗ ∗ 2 ) / 2 (x**2)/2 (x∗∗2)/2,而对于大的 x x x 来说,其大约等于 a b s ( x ) − l o g ( 2 ) abs(x) - log(2) abs(x)−log(2)。这意味着log(cosh(x))的作用大部分与均方误差一样,但不会受到偶尔出现的极端不正确预测的强烈影响。它具有Huber Loss的所有优点,和Huber Loss不同之处在于,其处处二次可导。
4 各种算法的损失函数
这部分内容参考自——机器学习-损失函数 和课程总结04 - 损失函数、代价函数与目标函数 的整理。
4.1 逻辑回归模型 虽然名字里包含“回归”,但是实际上却是一种分类学习方法。
优点:
4.1.1 代价函数 4.1.2 模型参数求解
- 直接对分类可能性进行建模,无需事先假设数据分布,避免了假设分布不准确的问题;
- 不是仅预测出“类别”,而是得到近似概率预测,对于需要利用概率辅助预测的任务很有用;
- 对率函数任意阶可到的凸函数,很多数值化优化算法都可以直接用于求解最优解。
模型参数的求解方法之一:采用最大似然估计的对数形式(对数是单调函数,求解参数的最大值,函数的对数和函数求出的最大值是一样的)构建函数,再利用梯度下降来求解:
以上就是对机器学习中损失函数、风险函数、代价函数、目标函数的整理,由于水平有限,可能部分地方有误,欢迎大家指出,后续也会随着学习继续完善,祝学习愉快!
参考
- 代价函数,损失函数,目标函数区别:https://zhuanlan.zhihu.com/p/330126934
- 逻辑回归(Logistic Regression):https://zhuanlan.zhihu.com/p/28408516
- 课程总结04 - 损失函数、代价函数与目标函数:https://www.zybuluo.com/rianusr/note/1219975
- 机器学习-损失函数:http://www.csuldw.com/2016/03/26/2016-03-26-loss-function/
- 【机器学习】代价函数(cost function):https://www.cnblogs.com/Belter/p/6653773.html
- 机器学习中的损失函数 (着重比较:hinge loss vs softmax loss):https://blog.csdn.net/u010976453/article/details/78488279
- 损失函数(Loss Function)、代价函数(Cost Function)和目标函数(Object Function):https://www.cnblogs.com/keeplearningLYU/p/13871089.html
- 代价敏感学习初探-有偏损失函数设计:https://www.cnblogs.com/LittleHann/p/10587512.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)