做机器学习项目的时候总是遇到经验风险、结构风险、正则化项等这些概念,还有损失函数最小化问题,今天我们就来详细地总结下这些知识吧。
针对单个具体样本,表示模型预测值与真实样本值之间的差距。损失函数越小,说明模型对于该样本预测越准确。
在实际应用中,选取损失函数会受到诸多因素的制约,比如是否有异常值、机器学习算法的选择、梯度下降的时间复杂度、求导的难易程度以及预测值的置信度等等。因此,不存在一种损失函数适用于处理所有类型的数据。
分类问题和回归问题的损失函数是不同的,常见损失函数分类如下图所示:
损失函数的标准形式:
L ( Y , P ( Y ∣ X ) ) = − l o g P ( Y ∣ X ) L(Y,P(Y|X))=−logP(Y|X) L(Y,P(Y∣X))=−logP(Y∣X)
Focal loss为凯明大神的大作,主要用于解决多分类任务中样本不平衡的现象,可以获得比softmax_cross_entropy更好的分类效果。
其标准形式如下:
L f o c a l l o s s ( y , y _ h a t ) = − 1 n ∑ i = 1 n y _ h a t i α i ( 1 − s o f t m a x ( y i ) ) γ l o g ( s o f t m a x ( y i ) ) , L_{focal_loss}(y,y\_hat)=-\frac{1}{n}\sum_{i=1}^{n}y\_hat_i \alpha_i(1-softmax(y_i))^{\gamma}log(softmax(y_i)), Lfocalloss(y,y_hat)=−n1i=1∑ny_hatiαi(1−softmax(yi))γlog(softmax(yi)),
s o f t m a x ( y i ) = e y i ∑ i = 1 N e y i softmax(y_i)=\frac{e^{y_i}}{\sum_{i=1}^{N}{e^{y_i}}} softmax(yi)=∑i=1Neyieyi
论文中α=0.25,γ=2效果最好。
KL散度( Kullback–Leibler divergence),也叫相对熵,是描述两个概率分布P和Q差异的一种方法。它是非对称的,这意味着D(P||Q) ≠ D(Q||P)。特别的,在信息论中,D(P||Q)表示当用概率分布Q来拟合真实分布P时,产生的信息损失,值越小信息损失越小,其中P表示真实分布,Q表示P的拟合分布。
计算公式为:
D K L ( p ∣ ∣ q ) = ∑ i = 1 N p ( x i ) ( l o g p ( x i ) − l o g q ( x i ) ) D_{KL}(p||q)=\sum_{i=1}^{N}p(x_i)(logp(x_i)-logq(x_i)) DKL(p∣∣q)=i=1∑Np(xi)(logp(xi)−logq(xi))
显然,根据上面的公式,K-L散度其实是数据的原始分布p和近似分布q之间的对数差值的期望。如果继续用2为底的对数计算,则K-L散度值表示信息损失的二进制位数。
一般,K-L散度以下面的书写方式更常见:
D K L ( p ∣ ∣ q ) = ∑ i = 1 N p ( x i ) l o g p ( x i ) l o g q ( x i ) D_{KL}(p||q)=\sum_{i=1}^{N}p(x_i)\frac{logp(x_i)}{logq(x_i)} DKL(p∣∣q)=i=1∑Np(xi)logq(xi)logp(xi)
损失函数的标准形式是:
L ( Y , f ( X ) ) = e x p [ − Y f ( X ) ] L(Y,f(X))=exp[−Yf(X)] L(Y,f(X))=exp[−Yf(X)]
主要应用于 Boosting 算法中,在Adaboost 算法中,经过 m 次迭代后,可以得到 f m ( x ) f_m(x) fm(x) :
f m ( x ) = f m − 1 ( x ) + α m G m ( x ) f_m(x)=f_{m−1}(x)+α_mG_m(x) fm(x)=fm−1(x)+αmGm(x)
Adaboost 每次迭代时的目的都是找到最小化下列式子的参数α 和G:
a r g m i n α , G = ∑ i = 1 N e x p [ − y i ( f m − 1 ( x i ) + α G ( x i ) ) ] argmin_{α,G}=∑_{i=1}^{N}exp[−y_i(f_{m−1}(x_i)+αG(x_i))] argminα,G=i=1∑Nexp[−yi(fm−1(xi)+αG(xi))]
易知,Adabooost 的目标式子就是指数损失,在给定n个样本的情况下,Adaboost 的损失函数为:
L ( Y , f ( X ) ) = 1 2 ∑ i = 1 n e x p [ − y i f ( x i ) ] L(Y,f(X))=\frac{1}{2}∑_{i=1}^{n}exp[−y_if(x_i)] L(Y,f(X))=21i=1∑nexp[−yif(xi)]
Hinge loss 的叫法来源于其损失函数的图形,为一个折线,形如一个铰链结构所以取名为Hinge,通用的函数表达式为:
L ( m i ) = m a x ( 0 , 1 − m i ( w ) ) L(m_i)=max(0,1−m_i(w)) L(mi)=max(0,1−mi(w))
表示如果被正确分类,损失是0,否则损失就是 1 − m i ( w ) 1−m_i(w) 1−mi(w) 。
在机器学习中,Hinge 可以用来解间距最大化的问题,最有代表性的就是SVM 问题,最初的SVM 优化函数如下:
a r g m i n w , ζ 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i ζ i s t . ∀ y i w T x i ≥ 1 − ζ i , ζ i ≥ 0 argmin_{w,ζ}\frac{1}{2}||w||^2+C\sum_{i}ζ_i \\ st. ∀y_iw^Tx_i≥1−ζ_i,\\ ζ_i≥0 argminw,ζ21∣∣w∣∣2+Ci∑ζist.∀yiwTxi≥1−ζi,ζi≥0
将约束项进行变形,则为:
ζ i ≥ 1 − y i w T x i ζ_i≥1−y_iw^Tx_i ζi≥1−yiwTxi
则损失函数可以进一步写为:
J ( w ) = 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i m a x ( 0 , 1 − y i w T x i ) = 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i m a x ( 0 , 1 − m i ( w ) ) = 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i L H i n g e ( m i ) J(w)=\frac{1}{2}||w||^2+C\sum_{i}max(0,1−y_iw^Tx_i)\\ =\frac{1}{2}||w||^2+C\sum_{i}max(0,1-m_i(w))\\ =\frac{1}{2}||w||^2+C\sum_{i}L_{Hinge}(m_i) J(w)=21∣∣w∣∣2+Ci∑max(0,1−yiwTxi)=21∣∣w∣∣2+Ci∑max(0,1−mi(w))=21∣∣w∣∣2+Ci∑LHinge(mi)
因此, SVM 的损失函数可以看作是 L2-norm 和 Hinge loss 之和。
有些人可能觉得逻辑回归的损失函数就是平方损失,其实并不是。平方损失函数可以通过线性回归在假设样本是高斯分布的条件下推导得到,而逻辑回归得到的并不是平方损失。在逻辑回归的推导中,它假设样本服从伯努利分布(即0-1分布),然后求得满足该分布的似然函数,接着取对数求极值等等。而逻辑回归并没有求似然函数的极值,而是把极大化当做是一种思想,进而推导出它的经验风险函数为:最小化负的似然函数(即 m a x F ( y , f ( x ) ) → m i n [ − F ( y , f ( x ) ) ] maxF(y,f(x))→min[−F(y,f(x))] maxF(y,f(x))→min[−F(y,f(x))])。从损失函数的视角来看,它就成了Softmax 损失函数了。
log损失函数的标准形式:
L ( Y , P ( Y ∣ X ) ) = − l o g P ( Y ∣ X ) L(Y,P(Y|X))=−logP(Y|X) L(Y,P(Y∣X))=−logP(Y∣X)
刚刚说到,取对数是为了方便计算极大似然估计,因为在极大似然估计方法(MLE)中,直接求导比较困难,所以通常都是先取对数再求导找极值点。损失函数 L ( Y , P ( Y ∣ X ) ) L(Y,P(Y|X)) L(Y,P(Y∣X))表达的是样本 X X X在分类Y的情况下,使概率 P ( Y ∣ X ) P(Y|X) P(Y∣X) 达到最大值(换言之,就是利用已知的样本分布,找到最有可能(即最大概率)导致这种分布的参数值;或者说什么样的参数才能使我们观测到目前这组数据的概率最大)。因为 l o g log log函数是单调递增的,所以 l o g P ( Y ∣ X ) logP(Y|X) logP(Y∣X)也会达到最大值,因此在前面加上负号之后,最大化 P ( Y ∣ X ) P(Y|X) P(Y∣X)就等价于最小化 L L L了。
softmax分类器也会涉及到softmax loss,后面用一片文章专门介绍下。敬请关注。
损失函数的标准形式:
L ( Y , f ( X ) ) = ∣ Y − f ( X ) ∣ L(Y, f(X)) = |Y-f(X)| L(Y,f(X))=∣Y−f(X)∣
损失函数的标准形式:
L ( Y , f ( X ) ) = ( Y − f ( X ) ) 2 L(Y,f(X))=(Y−f(X))^2 L(Y,f(X))=(Y−f(X))2
当样本个数为n时,此时的损失函数变为:
L ( Y , f ( X ) ) = ∑ i = 1 n ( y i − f ( x i ) ) 2 L(Y, f(X)) = \sum _{i=1}^{n}(y_i - f(x_i))^2 L(Y,f(X))=i=1∑n(yi−f(xi))2
y i − f ( x i ) y_i-f(x_i) yi−f(xi)表示的是残差,整个式子表示的是残差的平方和,而我们的目的就是最小化这个目标函数值(注:该式子未加入正则项),也就是最小化残差的平方和(residual sum of squares,RSS)。
M S E = 1 n ∑ i = 1 n ( y i − f ( x i ) ) 2 MSE= \frac{1}{n}\sum _{i=1}^{n}(y_i - f(x_i))^2 MSE=n1i=1∑n(yi−f(xi))2
Huber loss标准形式:
其中参数 a 通常表示 residuals,写作 y−f(x),当 a = y−f(x) 时,Huber loss 变成:
δ δ δ 是 HuberLoss 的参数,y是真实值,f(x)是模型的预测值, 且由定义可知 Huber Loss 处处可导。
当预测偏差小于 δ δ δ 时,它采用平方误差,
当预测偏差大于 δ δ δ 时,采用的线性误差。
相比于最小二乘的线性回归,Huber Loss降低了对离群点的惩罚程度,所以 Huber Loss 是一种常用的鲁棒的回归损失函数。
Huber loss具备了MAE和MSE各自的优点,当 δ δ δ趋向于0时它就退化成了MAE,而当 δ δ δ趋向于无穷时则退化为了MSE。
Smooth L1 loss也具备了L1 loss和L2 loss各自的优点,本质就是L1和L2的组合。
Huber loss和Smooth L1 loss具有相同的曲线走势,当Huber loss中的δ等于1时,Huber loss等价于Smooth L1 loss。
对于Huber损失来说, δ δ δ 的选择十分重要,它决定了模型处理离群点的行为。当残差大于 δ δ δ 时使用L1损失,很小时则使用更为合适的L2损失来进行优化。
Huber损失函数克服了MAE和MSE的缺点,不仅可以保持损失函数具有连续的导数,同时可以利用MSE梯度随误差减小的特性来得到更精确的最小值,也对异常点具有更好的鲁棒性。
需要注意,要使Huber损失函数表现良好需要精心调整的超参数δ。
Log-cosh loss标准形式:
L ( Y , f ( X ) ) = ∑ i = 1 N l o g ( c o s h ( f ( x i ) − y i ) ) L(Y,f(X))=\sum_{i=1}^{N}log(cosh(f(x_i)-y_i)) L(Y,f(X))=i=1∑Nlog(cosh(f(xi)−yi))
其优点在于对于很小的误差来说 l o g ( c o s h ( x ) ) log(cosh(x)) log(cosh(x))与 ( x 2 ) / 2 (x^2)/2 (x2)/2很相近,而对于很大的误差则与 a b s ( x ) − l o g 2 abs(x)-log2 abs(x)−log2很相近。这意味着logcosh损失函数可以在拥有MSE优点的同时也不会受到局外点的太多影响。它拥有Huber的所有优点,并且在每一个点都是二次可导的。
Quantile Loss(分位数损失)标准形式:
L ( Y , f ( X ) ) = ∑ i = a r g i ( y i < f ( x i ) ) ( 1 − γ ) ∣ y i − f ( x i ) ∣ + ∑ i = a r g i ( y i ≥ f ( x i ) ) ( γ ) ∣ y i − f ( x i ) ∣ L(Y,f(X))=\sum_{i=arg_i(y_i<f(x_i))}(1-\gamma)|y_i-f(x_i)|+\sum_{i=arg_i(y_i\geq f(x_i))}(\gamma)|y_i-f(x_i)| L(Y,f(X))=i=argi(yi<f(xi))∑(1−γ)∣yi−f(xi)∣+i=argi(yi≥f(xi))∑(γ)∣yi−f(xi)∣
其中, γ \gamma γ是给定的分位数,其值介于0和1之间。
Quantile Loss的思想是根据我们是打算给正误差还是负误差更多的值来选择分位数数值。损失函数根据所选 γ \gamma γ的值对高估和低估的预测值给予不同的惩罚值。举个例子, γ = 0.25 \gamma= 0.25 γ=0.25的Quantile Loss函数给高估的预测值更多的惩罚,并试图使预测值略低于中位数。
可以使用这个损失函数来计算神经网络或基于树的模型的预测区间。下图是sklearn实现的梯度提升树回归,该图显示的是sklearn库的GradientBoostingRegression中的quantile loss函数计算的90%预测区间。下限的计算使用了 1 − γ = 0.95 1-\gamma=0.95 1−γ=0.95 ,上限则是使用了 γ = 0.05 \gamma=0.05 γ=0.05 。
对所有训练样本都求一次损失函数,再累加求平均。即,模型f(x)对训练样本中所有样本的预测能力。
R e x p ( f ) = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) R_{exp}(f)=\frac{1}{N}\sum_{i=1}^N{L(y_i,f(x_i))} Rexp(f)=N1i=1∑NL(yi,f(xi))
所谓经验风险最小化即对训练集中的所有样本点损失函数的平均最小化。经验风险越小说明模型f(x)对训练集的拟合程度越好。
期望风险是对所有样本(包含未知样本和已知的训练样本)的预测能力,是全局概念。(经验风险则是局部概念,仅仅表示决策函数对训练数据集里的样本的预测能力。)
R e x p ( f ) = E p [ L ( Y , f ( X ) ) ] = ∫ x × y L ( y , f ( x ) ) P ( x , y ) d x d y R_{exp}(f)=E_p[L(Y,f(X))]=\int_{x\times y}L(y,f(x))P(x,y)dxdy Rexp(f)=Ep[L(Y,f(X))]=∫x×yL(y,f(x))P(x,y)dxdy
理想的模型(决策)函数应该是让所有的样本的损失函数最小(即期望风险最小化)。但是期望风险函数往往不可得,所以用局部最优代替全局最优。这就是经验风险最小化的理论基础。
经验风险和期望风险之间的关系:
类型 | 样本特点 | 最优性 | 可求解性 |
---|---|---|---|
经验风险 | 基于训练集所有样本点损失函数最小化。 | 是局部最优 | 是现实的可求的 |
期望风险 | 基于所有样本点损失函数最小化。 | 是全局最优 | 是理想化的不可求的 |
缺点:
只考虑经验风险的话,会出现过拟合现象,即模型f(x)对训练集中所有的样本点都有最好的预测能力,但是对于非训练集中的样本数据,模型的预测能力非常不好。
怎么办?这就需要结构风险。
结构风险是对经验风险和期望风险的折中,在经验风险函数后面加一个正则化项(惩罚项),是一个大于0的系数 λ \lambda λ。 J ( f ) J(f) J(f)表示的是模型的复杂度。
R s t r u ( f ) = R e x p ( f ) + λ J ( f ) = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) R_{stru}(f)=R_{exp}(f)+\lambda J(f)\\ =\frac{1}{N}\sum_{i=1}^N{L(y_i,f(x_i))}+\lambda J(f) Rstru(f)=Rexp(f)+λJ(f)=N1i=1∑NL(yi,f(xi))+λJ(f)
经验风险越小,模型决策函数越复杂,其包含的参数越多,当经验风险函数越小越容易出现过拟合现象。
也可以理解为模型决策函数的复杂程度是过拟合的必要条件,那么我们要想防止过拟合现象的方式,就要破坏这个必要条件,即降低决策函数的复杂度。也即,让惩罚项J(f)最小化,现在出现两个需要最小化的函数了。我们需要同时保证经验风险函数和模型决策函数的复杂度都达到最小化,在最优化理论中这种具有两个及以上优化目标的问题属于多目标优化问题,对于多目标优化的一个常见处理是把多个优化目标融合为单目标,进行单目标问题求解,对于本节要就是把两个式子融合成一个式子得到结构风险函数然后对这个结构风险函数进行最小化。
机器学习中正则化项常用的有L1范数、L2范数,这里我们得先了解下什么是范数(norm)。
在线性代数,函数分析等数学分支中,范数(Norm)是一个函数,代表某个向量空间(或矩阵)中的每个向量的长度或大小,使每个向量具有量化的可比较性。对于零向量,规定其长度为零。直观的说,向量或矩阵的范数越大,则我们可以说这个向量或矩阵也就越大。范数的不同计算方法使其产生了很多不同的叫法,如绝对值其实便是一维向量空间中实数或复数的范数,而Euclidean距离也是一种范数。
范数的通用定义:
设p≥0的实数, W W W为n维向量,p-norm定义为:
∣ ∣ W ∣ ∣ p : = ( ∑ i = 1 n ∣ w i ∣ p ) 1 p ||W||_p:=(\sum_{i=1}^{n}|w_i|^p)^{\frac{1}{p}} ∣∣W∣∣p:=(i=1∑n∣wi∣p)p1
当p从 ∞ \infty ∞到0变化时,设x为三维向量,则p-norm的三维可视化图形如下所示:
其中,
这三个范数有很多非常有意思的特征,尤其是在机器学习中的正则化(Regularization)以及稀疏编码(Sparse Coding)有非常有趣的应用。 下面我们专门说一说这三个范数。
虽然L0严格说不属于范数,我们仍然可以形式化地给出L0-norm的定义:
∣ ∣ W ∣ ∣ p : = ∑ i = 1 n ∣ w i ∣ 0 0 ||W||_p:=\sqrt[0]{\sum_{i=1}^{n}|w_i|^0} ∣∣W∣∣p:=0i=1∑n∣wi∣0
0的指数和平方根严格意义上是受限条件下才成立的。因此在实际应用中,多采用下面的替代定义:
∣ ∣ W ∣ ∣ 0 = # ( i ) w i t h w i ≠ 0 ||W||_0=\#(i)\ \ with\ \ w_i \neq 0 ∣∣W∣∣0=#(i) with wi̸=0
其表示 x x x向量中所有非零元素的个数。正是L0范数的这个属性,使得其非常适合机器学习中稀疏编码,特征选择的应用。通过最小化L0范数,来寻找最少最优的稀疏特征项。但不幸的是,L0范数的最小化问题在实际应用中是NP-hard问题。因此很多情况下,L0优化问题就会被转化为更高维度的范数问题,如L1范数,L2范数最小化问题。
对于向量 W W W,其L1范数的定义如下:
∣ ∣ W ∣ ∣ 1 : = ∑ i = 1 n ∣ w i ∣ ||W||_1:=\sum_{i=1}^{n}|w_i| ∣∣W∣∣1:=i=1∑n∣wi∣
其应用范围非常的广泛,如在计算机视觉中的Sum of Absolute Differents,Mean Absolute Error,都是利用L1范数的定义。
当然范数中最常见,也最著名的非L2范数莫属。其应用也几乎包括科学和工程的各个领域。定义公式如下:
∣ ∣ W ∣ ∣ p : = ∑ i = 1 n ∣ w i ∣ 2 ||W||_p:=\sqrt{\sum_{i=1}^{n}|w_i|^2} ∣∣W∣∣p:=i=1∑n∣wi∣2
机器学习中为了防止出现过拟合现象,通常会在残差损失函数后面加上正则化项来限制模型复杂度。我们认为参数 w i w_i wi趋近于0的个数越多,系统越复杂度越低,越不容易出现过拟合现象。
所以,越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象。为什么越小的参数说明模型越简单,如何理解呢?这个可以参考泰勒级数分解,多项式中冥次越高的分量,其对应权重 w i w_i wi越接近于0那么函数拟合的曲线就越平滑,参考下图(来自于Ng的课程),高次项的权值 θ i \theta_i θi越接近0,拟合曲线越简单,只要高次项的个数控制的合适,那么模型就不会出现underfit和overfit情况。
含有L1正则化项的最优化问题的解是稀疏性的(即 w i w_i wi为0的分量较多),其倾向于选择参数值 w i w_i wi很小且多为0的向量作为最优化问题的解。而含有L2正则化项的最优化问题的解则倾向于选择参数值 w i w_i wi不为0但很接近于0的向量。这个如何理解呢?以二维向量 W W W为例,L1范数和L2范数的可视化为如下图a和b所示,L1范数的等值线为菱形,L2范数的等值线为圆,假设机器学习模型的残差平方损失函数的等值线为同心椭圆所示。
我们先看L1范数,可以很容易地看出残差平方损失函数的梯度梯度方向与L1范数的等值线垂直的概率比较低,除非残差平方损失函数的等直线除非位置摆得非常好,否则大部分时候都会在L1范数的“角”的地方相交,此时 w 1 = 0 w_1=0 w1=0, w 2 w_2 w2绝对值较大。
再看看L2范数,由于残差平方损失函数的梯度方向为任意方向,P1点落在坐标轴上的概率就比较低,多说情况下都是落在坐标轴之间的等值线上,此时L2范数的参数分类 w i w_i wi大部分都不为0,且绝对值都较接近于0。
从最优化问题解的平滑性来看,L1范数的最优解个数相对于L2范数要少,但其往往是最优解,而L2的解很多,但更多的倾向于某种局部最优解。
L0范数本身是特征选择的最直接最理想的方案,但如前所述,其不可微,且很难优化,因此实际应用中我们使用L1来得到L0的最优凸近似。L2相对于L1具有更为平滑的特性,在模型预测中,往往比L1具有更好的预测特性。当遇到两个对预测有帮助的特征时,L1倾向于选择一个更大的特征。而L2更倾向把两者结合起来。
用一小段话总结就是:L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。L1处理可以防止模型过拟合,在特征选择时候非常有用并且使模型具有可解释性,模型可解释性在工业界应用中是非常重要的;L2范数不但可以防止过拟合,还可以让我们的优化求解变得比L1范数稳定和快速。
[1].https://www.cnblogs.com/shixiangwan/p/7953591.html
[2].https://www.cnblogs.com/Joyce-song94/p/7443911.html
[3].机器学习–>期望风险、经验风险与结构风险之间的关系
[4].机器学习中的损失函数 (着重比较:hinge loss vs softmax loss)
[5].机器学习大牛最常用的5个回归损失函数,你知道几个?
[6].统计学习方法.李航
[7].L0,L1,L2范数及其应用
[8].https://blog.csdn.net/zouxy09/article/details/24971995 (L1,L2的理解,推荐细看)