损失函数

监督学习中通常通过对损失函数最优化(最小化)来学习模型。
本文介绍了几种损失函数和正则化条件,以及正则化对模型的影响。

[En]

In this paper, several loss functions and regularization terms and the influence of regularization on the model are introduced.

损失函数

损失函数度量模型的第一个预测好坏,以及模型在风险函数度量的平均意义上的预测好坏。

[En]

The first prediction of the loss function measurement model is good or bad, and the prediction of the model in the average sense of risk function measurement is good or bad.

模型的输入和输出是服从联合分布P(XMagi Y)的随机变量(XMagi Y)。损失函数的期望为:

[En]

The input and output of the model is a random variable (XMagi Y) which follows the joint distribution P (XMagi Y). The expectation of the loss function is:

[R_{exp}(f)=E_P[L(Y,f(X))]=\int_{\mathcal X\times \mathcal Y}L(y,f(x))P(x,y)dxdy ]

这被称为风险函数或预期损失。

[En]

This is called a risk function or expected loss.

学习的目的是选择预期风险最小的模型,因为联合分布未知,所以上面的公式不能直接计算。

[En]

The goal of learning is to choose the model with the least expected risk, because the joint distribution is unknown, so the above formula can not be calculated directly.

对于一个有N个样本的训练数据集的平均损失称为经验风险(empirical risk)或经验损失(empirical loss):(R_{emp}(f)={1\over N}\sum_{i=1}^NL(y_i,f(x_i)))。

根据大数定理,当样本量N趋于无穷大时,经验风险趋于预期风险,因此现实中使用经验风险来估计预期风险。

[En]

According to the large number theorem, when the sample size N tends to infinity, the empirical risk tends to the expected risk, so the empirical risk is used to estimate the expected risk in reality.

经验风险最小化 & 结构风险最小化

经验风险最小化

[\min_{f\in \mathcal F}{1\over N}\sum_{i=1}^NL(y_i,f(x_i)) ]

当样本容量足够大时具有良好的学习效果。然而当样本容量小时可能产生过拟合现象。
结构风险最小化是为了防止过拟合而提出来的策略,添加了正则化(regularization):

[\min_{f\in \mathcal F}{1\over N}\sum_{i=1}^NL(y_i,f(x_i))+\lambda J(f) ]

其中J(F))是模型的复杂性。

[En]

Where J (f)) is the complexity of the model.

几种损失函数

1.Softmax(cross-entropy loss)

Softmax分类器是logistic(二类)泛化到多类的情况。

Softmax函数 (f_j(z)=\frac{e^{z_j}}{\sum_k e^{z_k}}) 将输入值转换到[0,1]区间内,可以作为类别概率值或者置信度。Softmax使得最大的(z_j)输出结果最接近1,其余接近0,另外可使负数变成非负。
Softmax函数取负对数得到cross-entropy loss。通常人们使用”softmax loss”这个词时指的就是cross-entropy loss,有时也称对数似然损失。

[L_i=-log(\frac{e^{z_{y_i}}}{\sum_j e^{z_j}})=-z_{y_i}+log{\sum_j e^{z_j}} ]

(z_j)表示在类别j上的得分,(y_i)表示真实类别.损失值的范围为([+\infty,1]),在真实类别上的得分越高,损失越低.

Softmax 总体样本的损失为:

[\mathcal L(X,Y) = -\frac{1}{N}\sum^m_{i}\sum^K_{j}1{j=y^{(i)}}\log(p_{i,j}) ]

其中(p_{i,j} = \frac{\exp(z_{i,j})}{\sum_j \exp(z_{i,j})}) 表示样本 i 预测类别为 j 的概率. (z_{j}) 是前一层的输出 (a_{j}^{L-1})的线性组合:(z_{j}=w_ja_{j}^{L-1}+b_j).

偏导数:

[En]

Partial derivative:

[\begin{align} {\partial L\over\partial w_{j}^L} &=-y_j(1-p_j) a_j^{L-1} \ {\partial L\over\partial b_j^L} &=p_j^L-y_j \end{align} ]

极大似然估计视角

与最大似然估计法得出的逻辑回归损失类似,最大似然被转换为最小负对数:

[En]

Like the logical regression loss derived by the maximum likelihood estimation method, the maximum likelihood is transformed into the minimum negative logarithm:

[\begin{align} \max& \prod_i^{m} p_j^{1{j=y^{(i)}}} \ \Rightarrow& \log\prod_i^m \sum_j^{K} p_j^{1{j=y^{(i)}}} =\sum_i^m \sum_j^{K}1{j=y^{(i)}}\log p_j \ \to \min& (-\sum_i^m\sum_j^{K}1{j=y^{(i)}}\log p_j) \end{align} ]

信息论视角

真实分布 p和估计分布 q之间的cross-entropy为(H(p,q)=−∑xp(x)\log q(x)),Softmax分类器正是为了最小化估计的类别概率((q=\frac{e^{s{y_i}}}{\sum_j e^{s_j}}))和真实值(p=[0,…1,…,0],在yi位置处是一个单独的1)的交叉熵。另外,交叉熵又可写作:(H(p,q)=H(p)+D_{KL}(p||q)),即p的熵和KL散度(Kullback-Leibler divergence,一种距离度量方式)的和。由于H(p)=0,所以最小化损失函数即最小化KL散度,意味着使预测值更接近真实值。

caffe中的 多类逻辑回归损失MultinomialLogisticLossLayer 直接接收前一层的每类概率预测值,loss为(E=-{1\over N}\sum_{n=1}^N\log(\hat p_{n,l_n})),其中(\hat p_{n,l_n})表示第n个样本真实类别标签(l_n)多对应的预测值,而其它类别的值为0,乘积为0,所以公式较为简单。

如果想直接由置信度等非概率值计算损失,可以采用SoftmaxWithLossLayer ,其作用等同于先使用SoftmaxLayer映射成概率分布, 再接上 multinomial logistic loss. 唯一不同之处在于SoftmaxWithLossLayer梯度数值计算比分成两层计算更稳定.

提高数值稳定性的技术:由于指数计算的结果可能很大,较大数字的除法可能不稳定,可以使用以下转换技术来减小数值:

[En]

Techniques for improving numerical stability: because the result of exponential calculation may be large, division of larger numbers may be unstable, and the following conversion techniques can be used to reduce the value:

[\frac{e^{f_{y_i}}}{\sum_j e^{f_j}} = \frac{Ce^{f_{y_i}}}{C\sum_j e^{f_j}} = \frac{e^{f_{y_i} + \log C}}{\sum_j e^{f_j + \log C}} ]

常用的C值设为(\log C = -\max_j f_j). 但是如果数据跨度比较大的话,Softmax的结果不能很好地刻画原数据中的相互大小关系, 需要控制数据的维度.

2.logistic loss

使用均方误差(Mean Squared Error, MSE)损失((L={1\over 2N}\sum_i^N (\hat y_i-y_i)^2), 或称L2 损失)进行梯度下降训练时loss的下降曲线可能同sigmoid曲线一样先慢中间快最后又慢,原因是最后层用了sigmoid,并且求偏导会包含sigmoid的导数.那么,在不舍弃sigmoid的情况下如何增快学习?能否让loss曲线更平滑?

logistic loss函数定义:

[\begin{eqnarray} C = -\frac{1}{n} \sum_x \left[y \ln a + (1-y ) \ln (1-a) \right] \nonumber \end{eqnarray} ]

表示n种输入情况x对应结果的平均.其中,y为期望值(只有0,1两种值),a为输出值a=sigmoid(wx+b).

损失函数需要满足两个条件:

[En]

The loss function needs to meet two conditions:

  • 函数值为非负值
    [En]

    * function value is non-negative

  • 当输出值接近期望值时,函数值趋于0(同时等于0为佳)
    [En]

    * when the output value approaches the expected value, the function value tends to 0 (it is better if it is equal to 0 at the same time)

而logistic loss函数同时满足这两个条件,因此可以作为损失函数.对于第二个条件的验证可能不太容易,让a=y时画出函数曲线可能比较直观.简单的验证方法是让所有的y设为1,则a趋于1时函数值趋于0.

渐变计算如下:

[En]

The gradient is calculated below:

[\begin{align} {\partial C\over\partial w_j} &={1\over n}\sum_x x_j(a-y) \ {\partial C\over\partial b} &={1\over n}\sum_x (a-y) \end{align} ]

从中可以看出学习的快慢取决于error=a-y,误差大时学得快,小时学得慢.

扩展到具有多个输出y值的多层网络的情况,L表示最后一层:

[En]

Extended to the case of multi-layer network with multiple output y values, L represents the last layer:

[\begin{eqnarray} C = -\frac{1}{n} \sum_x \sum_j \left[y_j \ln a^L_j + (1-y_j) \ln (1-a^L_j) \right] \tag{多个输出y值}\end{eqnarray} ]

结论:Logistic损失几乎总是好于均方损失函数;如果在输出层使用线性激励而不是像Sigmoid这样的非线性层,则可以使用差分平方函数,并且不存在由于初始参数设置不当而导致学习速率开始缓慢的问题。

[En]

Conclusion: logistic loss is almost always better than mean square loss function; if linear excitation is used in the output layer instead of a nonlinear layer such as sigmoid, then it is possible to use difference square function, and there is no problem that the learning rate starts slowly due to improper setting of initial parameters.

别名:对数损失损失(对数损失,二进制标签通常为{-1),有时称为交叉熵损失(名称有点混淆,类似Softmax使用的损失函数,也是由交叉熵派生而来)。

[En]

Alias: * logarithmic loss (log loss, the binary tag is usually {- 1) and sometimes called * cross-entropy** loss (the name is a bit confusing, similar to the loss function used by Softmax, which is also derived from cross entropy).

用另一种形式表达:

[En]

To express in another form:

[L(w) = -\frac{1}{N} \sum_{i=1}^N \left[y_i \log \hat y_i + (1-y_i ) \log (1-\hat y_i) \right] ]

sigmoid同样涉及指数运算,需要规避溢出问题(在log的参数接近0时得到负无穷).

将(\hat y_i={1\over 1+e^{-x_i}})代入(L(w)),化简可得:

[L(w)=-{1\over N}\sum_{i=1}^N[y_ix_i+\log({e^{-x_i}\over 1+ e^{-x_i}})] ]

当(x_i\ge 0)时,(L(w))中的log项可以通过(-x_i-\log(1+e^{-x_i}))计算;
当(x_i\lt 0)时,log项可以通过(-\log(1+e^{x_i}))来计算.

L2 均方损失和交叉熵损失之间的区别:

均方损失主要用于回归问题,也可用于分类。交叉熵损失仅用于分类。两者的显著区别在于,交叉熵损失只考虑真实类别的产值,而均方损失则考虑每个类别。均方损失的结果将服从高斯分布,而高斯分布是连续变量的分布,由高斯分布的最大似然估计的负对数可以得到均方损失。

[En]

The mean square loss is mainly used for regression problems and can also be used for classification. The cross-entropy loss is only used for classification. The significant difference between the two is that the cross-entropy loss only considers the output value of the real category, while the mean square loss considers each category. The result of the mean square loss will follow the Gaussian distribution, and the Gaussian distribution is the distribution of continuous variables, and the mean square loss can be obtained from the negative logarithm of the maximum likelihood estimation of the Gaussian distribution.

[\begin{align} p(x)&=N(\mu,\sigma)={1\over \sqrt{2\pi}\sigma}e^{(x-\mu)^2\over 2\sigma^2} \ \max \log P(D)&=\max_p\log\prod_i^N P(D_i) \ &=\max \sum_i^N \log P(D_i) \ &=\max[-{N\over 2}\log(2\pi\sigma^2)-{1\over 2\sigma^2}\sum_i^N(D_i-\mu)^2] \end{align} ]

Softmax 回归 vs. k 个二元分类器

如果类别互斥,则Softmax回归分类器更合适。如果类别之间存在交叉或亲子关系,则建立多个独立的Logistic回归分类器更为合适。

[En]

If the categories are mutually exclusive, then the softmax regression classifier is more appropriate. If there is crossover or parent-child relationship between categories, it is more appropriate to establish multiple independent logistic regression classifiers.

3.hinge loss (SVM)

Hinge loss 用于最大化间隔分类器中(以SVM分类器为代表)。
二分类损失函数定义为:(\ell(y) = \max(0, 1-t \cdot y)),其中y表示分类器的输出值,t为真实类别(t = ±1),那么当t与y符号相同时,损失较小。符号相反时随y单调递增。
损失函数的形状类似”合页”(蓝色线 E(z) = max(0,1-z) ):

损失函数

多分类损失函数的一种定义形式为(Weston and Watkins提出)[1]

[\ell (y)=\sum_{j\neq t}\max(0,s_j-s_t+\Delta) ]

表示样本 x 上的损失,(s_j=f(x_i,W)_j)为第j类的得分,所以设计该损失的目标是使预测的其它类别的得分相比于真实类别的得分低于(\Delta)这个数量(如(\Delta)取1).其中(\Delta)是软间隔。可以看到这种损失的定义方式仅考虑不正确的预测类别。另有其它定义方式[1:1]

多个损失函数组合

caffe网络中可以定义多个损失层,如 EUCLIDEAN_LOSSSOFTMAX_LOSS,并设置(\lambda)为 loss_weight: 100.0,那么损失函数为:

[\mathcal L={1\over 2N}\sum_{n=1}^N\|y_n-\hat y_n\|2^2-\lambda{1\over N}\sum{n=1}^N\log(\hat p_{n,l_n}) ]

参数正则化

简单地最小化简单的损失函数可能会导致过拟合,而且在过拟合过程中往往会有许多参数(波动较大),因此可以考虑在损失函数中加入参数来限制波动。通常需要通过正则化惩罚来减少过拟合度。

[En]

Simply minimizing the simple loss function may lead to over-fitting, and there are often many parameters (large fluctuation) during over-fitting, so we can consider adding parameters to the loss function to limit the fluctuation. It is usually necessary to reduce overfitting by regularization penalty.

L1正则项

L1正则化项为(\lambda\sum|\theta_j|) ,(\lambda)是正则化的强度。其导数是(\lambda w),则权重更新为: W += -lambda * W,可以看出是线性递减的。L1正则化有”截断”作用,可以在特征选择中使用L1正则化有效减少特征的数量(Lasso会自动进行参数缩减和变量选择)。

原损失函数为(C_0),则L1: (C=C_0+{\lambda\over n}\sum_w |w|),梯度下降的更新为:

[w\to w-{\eta\lambda\over n}\operatorname{sgn}(w)-\eta{{\partial C_0\over\partial w}} ]

符号函数在(w)大于0时为1,小于0时为-1.在(w=0)时(|w|)没有导数,因此可令sgn(0)=0,在0处不使用L1正则化.

L2正则项

L2正则化项为(\lambda\sum_{j=1}^n\theta_j^2)

加上L2损失后(C=C_0+{\lambda\over 2n}\sum_w w^2),使得网络偏向于学习比较小的权重.

L2对偏导的影响.相比于未加之前,权重的偏导多了一项({\lambda\over n}w),偏置的偏导没变化.那么在梯度下降时(w)的更新变为:(w\to w-\eta ({\partial C_0\over\partial w}+{\lambda\over n}w)=(1-{\eta\lambda\over n})w-\eta{{\partial C_0\over\partial w}}),可以看出(w)的系数使得权重下降加速,因此L2正则也称weight decay(caffe中损失层的weight_decay参数与此有关).对于随机梯度下降(对一个mini-batch中的所有x的偏导求平均):

[\begin{align} w &\to (1-{\eta\lambda\over n})w-{\eta\over m}\sum_x{{\partial C_x\over\partial w}} \ b &\to b-{\eta\over m}\sum_x{{\partial C_x\over\partial b}} \end{align} ]

L1 vs. L2 :

  • L1减少的是一个常量,L2减少的是权重的固定比例
  • 成熟速度取决于权重本身的大小:当权重较大时,L2可能会更快,但当权重较小时,L2可能会比L1快

    [En]

    * the speed of maturity depends on the size of the weight itself: L2 may be faster when the weight is larger, but faster than L1 when the weight is small.

     

  • 因为1范数不可导,所以L1没有解析解(闭合解)。

    [En]

    * because the 1 norm is not derivable, there is no analytical solution (closed solution) for L1.

     

关于L1和L2正则的更详细分析,参考Lasso回归与Ridge回归 pdf

L1 相比于 L2 为什么容易获得稀疏解?

L1项在0点附近的导数为正负1, 而L2在0点附近的导数比L1的要小, 这样L1使得接近于0的参数更容易更新为0. 而L2的在0点附近的梯度远小于1时对参数更新不再起作用,因此得到的参数存在很多接近于0但不是0的情况. 其实也是一场原损失函数与正则项之间的拉锯战. [2]

L1, ReLU怎么求导?

在0点处不可导, 多种办法解决:

  • 次梯度法
    [En]

    * Sub-gradient method

  • 坐标下降法
    [En]

    * coordinate descent method

  • 近似方法,将点0附近的区域替换为可微的近似函数
    [En]

    * approximate method, replacing the region near point 0 with a differentiable approximate function

什么是次渐变?

[En]

What is a subgradient?

次梯度法可用于不可微目标函数。当目标函数可微时,次梯度法和梯度下降法对无约束问题具有相同的搜索方向。

[En]

The subgradient method can be used for non-differentiable objective functions. When the objective function is differentiable, the subgradient method and the gradient descent method have the same search direction for unconstrained problems.

次导数:对于一元函数来讲,若在点x处的左导数<右导数,那么在该点的次导数是一个集合:[左导数,右导数],即大于左导数小于右导数的任意数值都可以作为该点的次导数。考虑y=|x|,在x=0处的左导数是-1,右导数是1,那么在该点的次导数就是从-1到1的所有数值组成的集合。

ReLU (= max{0, x}) 函数在0点的次导数是[0,1]; L1 norm在0点的次导数是[-1,1]. 那么我们该怎么使用次导数呢? 我们可以从区间中选择其中一个值作为0点的导数. 但是如果不同的取值会造成不同的结果, 采用次梯度法进行最优值的搜索将会非常耗时. 幸运的是在前向传播中ReLU/abs(0)的结果为0时,反向传播时梯度需要乘上前向传播的结果,梯度总是为0,所以ReLU在0点的梯度值设置成任意值均可. 因此在反向传播过程中取[0,1]中的任意值均可. 而通常我们选择0即可,比如Caffe/Tensorflow框架中的abs函数在0点的梯度通过代码计算出来是0, 梯度符合sign函数的定义. 将导数固定为0的另外一个好处是能够得到一个更稀疏的矩阵表示.

Elastic net

另一种正则化方法是Elastic net论文),它混合了Lasso和Ridge回归,进行了权衡。Elastic net评估形式为:$$ \hat{\beta} = \underset{\beta}{\operatorname{argmin}} (| y-X \beta |^2 + \lambda_2 |\beta|^2 + \lambda_1 |\beta|_1)$$

Max-norm regularization

限制权重最大值的范数不超过常量约束c((\Vert \vec{w} \Vert_2 < c)),其中c通常为3或4.。Max-norm regularization 之前已被用于协同过滤算法(collaborative filtering ,Srebro and Shraibman, 2005)。可以提高随机梯度下降训练的性能,可用于防止梯度爆炸。

Dropout

Dropout可以与Max-norm regularization,较大的初始学习率和较高的动量(momentum)等结合获得比单独使用Dropout更好的效果。

损失函数解决类别平衡问题

为了解决模式识别中类别失衡的问题,我们通常对少量样本采用重复采样(过采样),或者根据原始样本的空间分布生成人工数据。然而,有时这两种方法都不容易做到。

[En]

In order to solve the problem of category imbalance in pattern recognition, we usually use repeated sampling (oversampling) for a small number of samples, or generate artificial data based on the spatial distribution of the original samples. Sometimes, however, neither of these methods is easy to do.

2015 年 ICCV 上的一篇论文《Holistically-nested edge detection》提出了名为 HED 的边缘识别模型,试着用改变损失函数的定义来解决这个问题。如对于二分类问题中的log损失:(l=-\sum_{k=0}^n[Q_k \log p_k+(1-Q_k)(1-\log p_k)])

如样本集的标签值分别为 (1, 1, 0, 1, 1, 0, …),则似然估计值(全部样本均预测正确的概率)为:(L=p_0\cdot p_1\cdot(1-p_2)\cdot p_3\cdot p_4\cdot(1-p_5)\cdot\dots)

HED 使用了加权的 cross entropy 函数。例如,当标签 0 对应的样本极少时,加权的损失函数定义为:(l=-\sum_{k=0}^n[Q_k \log p_k+W(1-Q_k)(1-\log p_k)])

W需要大于 1。此时考虑似然函数:(L=p_0\cdot p_1\cdot(1-p_2)^W\cdot p_3\cdot p_4\cdot(1-p_5)^W\cdot\dots)

可以看到,分类为0的样本在似然函数中重复,比例因此增加。这样,虽然我们不能用小样本实际扩展样本的数量,但我们通过修改损失函数达到了基本等价的效果。

[En]

It can be seen that the sample with category 0 repeats in the likelihood function, and the proportion increases as a result. In this way, although we can not actually expand the number of samples with a small number of samples, we achieve a basically equivalent effect by modifying the loss function.

Bias−Variance Tradeoff

Original: https://www.cnblogs.com/makefile/p/loss-function.html
Author: 康行天下
Title: 损失函数

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/6549/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部