机器学习算法一般都是对损失函数(Loss Function)求最优,大部分损失函数都是包含两项:损失误差项(loss term)以及正则项(regularization term):
J(w)=∑iL(mi(w))+λR(w)
损失误差项
常用的损失误差项有5种:
Gold Standard-
Hinge:Svm -
log:logistic regression(cross entropy error) -
squared:linear regression -
Exponential:Boosting
Gold Standard Loss
Gold Standard又称0-1误差,其结果又称为犯错与不犯错,用途比较广(比如PLA模型),其损失函数也是相当的简单:
y={0ifm≥01ifm≤0
Hinge Loss
Hinge的叫法来源于其损失函数的图形,为一个折线,通用函数方式为:
L(mi)=max(0,1−mi(w))
Hinge可以解 间距最大化 问题,带有代表性的就是svm,最初的svm优化函数如下:
argminw,ζ12||w||2+C∑iζist.∀yiwTxi≥1−ζiζi≥0
将约束项进行变形则为:
ζi≥1−yiwTxi
则可以将损失函数进一步写为:
J(w)=12||w||2+C∑imax(0,1−yiwTxi)=12||w||2+C∑imax(0,1−mi(w))=12||w||2+C∑iLLinge(mi)
因此svm的损失函数可以看成L2-Norm和Hinge损失误差之和.
Log Loss
log类型损失函数的优势可以将连乘转为求和,由于是单调函数,不会改变原结果,并且还很方面求最优,因此log类型的损失函数函数也非常常用,比较著名的一种就是交叉熵(cross entropy),也就是logistic regression用的损失函数:
J(w)=λ||w||2+∑iyiloggw(xi)+(1−yi)(log1−gw(xi),yi∈{0,1}
其中:
gw(xi)=11+e−fw(xi)fw(xi)=wTxi
Squared Loss
平方误差,线性回归中最常用:
L2(m)=(fw(x)−y)2=(m−1)2
Exponential Loss
指数误差,在boosting算法中比较常见:
J(w)=λR(w)+∑iexp(−yifw(xi))Lexp(mi)=exp(−mi(w))
误差项对比
上面5种误差项的函数为:
黑色为
Squared Loss,红色为Hinge Loss,黄色为:Log Loss,绿色为:Exponential Loss,蓝色为:Gold Standard
观察图中:
-
Hinge Loss中当mi(w)>1 时,其损失项始终未0,当mi(w)<1时,其损失项的值呈线性增长(正好符合svm的需求). -
Squared、Log、Exponential三种损失函数已经Hinge的左侧都是凸函数,并且Gold Stantard损失为他们的下界:
ζ01≤ˆζ01(h)+fudge - 当需要求最大似然时(也就是概率最大化),使用
Log Loss最合适,但是一般会加上一个负号将其转换为求最小 - 损失函数和的
凸特征以及有界是非常重要的,可以防止在一些可以求得无穷的工作上白白浪费时间。有时候为了让函数有界和凸特征,一般会使用一些代理函数来进行替换。
正则项
加入正在项是为了降低模型复杂度,在一定程度上可以有效防止模型过拟合
常用的正则项有:
R2=12||w||2R1=∑i|wi|R0=|{i:wi≠0}|
这些正则项可以通用的写成:
Rp=(∑i|wi|p)1p
其中:
-
R2最常用,因为它是凸函数,非常方便可以用
梯度下降法最优化 - R1含有特征选择功能,因此经过R1计算之后会有大量的0权重出现,这样的话我们在实际计算中只需要计算有值特征即可,可以加快速算法的运行速度
- R0,额~这个暂时不知道哪里用-_-
当p⩽1时其正则项就为非凸函数了
参考
- http://www.ics.uci.edu/~dramanan/teaching/ics273a_winter08/lectures/lecture14.pdf
- https://www.wikiwand.com/en/Hinge_loss
- http://www.cnblogs.com/rocketfan/p/4081585.html