损失函数一般用作机器学习的目标函数,训练参数的目的是使损失最小化。一般的方法是求导得0。先介绍一下经验风险和结构风险。假设一个样本的损失函数为
l(yi,f(xi)), 那么在大小为N的数据集上的损失为:
Le(y,f(x))=N1∑i=1Nl(yi,f(xi)),
也称之为经验风险。而当在经验风险后面加一项惩罚项(正则项)
λJ(f), 其中J(f)表示模型的复杂度,因此,结构风险为:
Ls(y,f(x))=N1∑i=1Nl(yi,f(xi))+λJ(f)。
可以理解为若只是最小化经验风险,则可能会导致模型的复杂度越来越高,从而导致过拟合,但是一旦加入了惩罚项,最小化结构风险需要既尽量减小经验风险同时又要保证模型复杂度不会太高。
下面介绍几种损失函数及与之对应的算法。
1. 平方误差
最小化平方误差,最小二乘法。 适用于:回归,GBDT(也属于回归范畴)。
l(yi,f(xi))=(yi−f(xi))2
L(y,f(xi))=N1∑i=1Nl(yi,f(xi))
2. 绝对值误差
最小化绝对值误差。适用于:回归。
l(yi,f(xi))=∣yi−f(xi)∣
L(y,f(xi))=N1∑i=1Nl(yi,f(xi))
3. 对数误差
最大化似然估计->最小化负对数似然估计->最小化交叉熵。 适用于:分类问题,比如:逻辑回归(二分类),神经网络(二分类,多分类)。
逻辑回归:
最大化似然函数:
max∏i=1NP(y^i∣xi)=∏i=1Nf(xi)yi(1−f(xi))1−yi。
最小化负对数似然:
L(y,f(x))=−log(∏i=1Nf(xi)yi(1−f(xi))1−yi)=−∑i=1N(yif(xi)+(1−yi)f(xi))
一般加一项:
N1, 变为:
L(y,f(x))=−N1log(∏i=1Nf(xi)yi(1−f(xi))1−yi)=−N1∑i=1N(yif(xi)+(1−yi)f(xi))
神经网络:
当使用softmax作为最后一层的神经网络计算损失时,使用交叉熵:
L(y,f(x))=−N1∑i=1Nyilogf(xi)
一般取自然对数,其实也是最大化似然函数的变形。对于每个样本,只有真实标签
yi对应的概率被保留。
上述两类的求和,也会加一项
N1。
4. 指数误差
适用于:adaboost。
L(y,f(x))=−N1∑i=1Nexp(−yif(xi))
5. hinge损失函数
适用于:最大间隔分类,比如:SVM。
hinge函数基本形式:
[z]+={z,0,z>0otherwise
adaboost损失函数:
l(yi,f(xi))=[1−yi(wxi+b)]++λ∣∣w∣∣2
6. 0-1误差
因为过于严格,所以不常用。
l(yi,f(xi))={1,0,yi=f(xi)yi̸=f(xi)
7. 正则化(经验风险->结构风险)
为了防止过拟合,结构风险在经验风险后面加了一项正则化项(惩罚项),防止过大参数模型,代表模型的复杂度。一般选取L1和L2正则。
惩罚项:
Φ=λJ(f(x))
L1正则:
Φ=λ∣∣w∣∣1=λ∑i=1N∣w∣
L2正则:
Φ=λ∣∣w∣∣2=λ∑i=1N∣w∣2
L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择。
L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合。
L1和L2不同之处在于:L1会将不相关特征系数设为0,而L2只会设成极小值,但是不会设为0。因此L2不能做到特征选择,同时L1也不如L2的防止过拟合能力强。
详解参考:https://blog.csdn.net/jinping_shi/article/details/52433975