机器学习中的损失函数

Posted houkai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习中的损失函数相关的知识,希望对你有一定的参考价值。

着重介绍hige loss 和 softmax loss。

svm回顾

(C_1,C_2)是要区分的两个类别,通过分类函数执行时得到的值与阈值的大小关系来决定类别归属,例如:
[g(x) = g(w^Tx+b)]

我们取阈值为0,此时(f(x)=sgn[g(x)])就是最终的判别函数。对于同一个问题,有多个分类函数,哪一个更好呢?于是引入了“分类间隔”的指标

函数间隔和几何间隔

给定样本((x_i, y_i)),函数间隔为:
[gamma_i=y_i*(w^Tx_i+b)]
(y_i=1)时,(w^Tx_i+b)应该是一个很大的正数,反之是一个大负数。因此函数间隔反映了模型的确定度。

考虑w和b,如果同时加倍w和b,函数间隔也会加倍,但这对于求解问题是无意义的。因此我们限制w和b,引入了归一化条件,毕竟我们求解的唯一的一对w和b。

几何距离:点A到垂足的单位方向向量BA为(frac{w}{||w||}),假设(A=x_i),则(B=x_i-hat{gamma}*frac{w}{||w||}),带入(w^Tx+b=0)得到:
[hat{gamma} = frac{w^Tx_i+b}{||w||}]

(hat{gamma})可以看出就是二维平面中,点到直线的距离,高维下便是点到平面的距离。考虑正反例:
[hat{gamma} = y_i*{frac{w^Tx_i+b}{||w||}}]

(||w||=1)时,几何间隔也正是我们想要的归一化函数间隔。归一化也解释了函数间隔的实际意义。

技术分享图片

最优间隔分类器

我们的目标是找到一个超平面,使得里超平面较近的点能有更大的间距,也就是我们不必考虑所有的点,值关心离它最近的点能具有最大间距。

[max gamma s.t. y_i(w^Tx_i+b)>gamma,i=1,...,m ||w||=1 ]
然而这个目标函数仍然不是凸函数,我们把问题转化一下,我们取(gamma=1),此时离超平面最近点的距离即为(frac{1}{||w||}),计算(frac{1}{||w||})的最大值相当于计算(frac{1}{2}||w||^2)的最小值。(之所以采用这种形式,是为了方便后面的求解过程

最终的优化方程如下:

[min frac{1}{2} ||w||^2 s.t. y_i(w^Tx_i+b)geq1, i=i,...,m ]

只有线性约束,且是一个典型的二次规划问题。核函数、松弛变量等问题这里先不做涉及。

损失函数

模型的优化函数的通常形式如:

[ heta^* = arg min_ heta frac{1}{N}{}sum_{i=1}^{N} L(y_i, f(x_i; heta)) + lambda Phi( heta)]

前面是损失函数,后面是正则项。

常用的损失函数

  • 铰链损失(Hinge Loss):主要用于支持向量机 SVM中;
  • 交叉熵损失(Cross Entropy Loss/Softmax Loss):用于逻辑回归问题;
  • 平方损失(Square Loss):用于最小二乘问题;
  • 指数损失(Exponential Loss):主要用于Adaboost集成学习算法中;
  • 其他特定场景有奇效的loss

Hinge Loss

损失函数是一个折线,函数表达式为:

[L(x_i)=max(0, 1-f(m_i,w))]

如果类别正确,损失为0,否则为(1-f(m_i,w))

技术分享图片

在svm中,考虑松弛变量,优化函数为:
[ underset{w,zeta}{argmin} frac{1}{2}||w||^2+ Csum_i zeta_i st.quad forall y_iw^Tx_i geq 1- zeta_i \\zeta_i geq 0 ]

约束进行变形得:(zeta_i geq 1-y_iw^Tx_i)

优化损失函数进一步可写为:
[ egin{aligned} J(w)&=frac{1}{2}||w||^2 + Csum_i max(0,1-y_iw^Tx_i) &= frac{1}{2}||w||^2 + Csum_i max(0,1-m_i(w)) &= frac{1}{2}||w||^2 + Csum_i L_{Hinge}(m_i) end{aligned} ]

SVM的损失函数实质可看作是L2-norm和Hinge loss之和。

Softmax Loss

逻辑回归问题要求:(P(Y|X))尽可能的大,即最小化负的似然函数。

[L=-log(P(Y|X))]

逻辑回归的表达式为:

[ P(y=1|x; heta) = h(x) P(y=0|x; heta) = 1-h(x) ]

[p(y|x; heta)=h(x)^y(1-h(x))^{(1-y)}]

得:

[ L( heta) = prod_{i=1}^n{h(x)^y(1-h(x))^{(1-y)}} ]

最大log似然函数为:

[ egin{split} ell( heta)&=log(L( heta)) &= sum_{i=1}^m{ylog(h(x)) + (1-y)log(1-h(x))} end{split} ]

上式也是最小化交叉熵。

Squares Loss

损失函数:
[L(Y, f(X)) =sum_{i=1} ^n (Y-f(X))^2]

Exponentially Loss

损失函数:

[L(Y,f(X)) = frac{1}{2} sum_{i=1}^n exp[-y_if(x_i)]]

Adabooost 的目标式子就是指数损失,可以参考https://en.wikipedia.org/wiki/AdaBoost

假设数据集 ({(x_1, y_1), ldots, (x_N, y_N)})(x_i)相应的标签(y_i in {-1, 1}), 已有的弱分类器组 ({k_1, ldots, k_L}),它们的输出为 (k_j(x_i) in {-1, 1})(m-1)次迭代后,得到boosted classifier:

[C_{(m-1)}(x_i) = alpha_1k_1(x_i) + cdots + alpha_{m-1}k_{m-1}(x_i)]

第m次迭代后,我们添加了新的弱分类器:

[C_{m}(x_i) = C_{(m-1)}(x_i) + alpha_m k_m(x_i)]

为了确定新的弱分类器及其权重,定义损失函数
[E = sum_{i=1}^N e^{-y_i C_m(x_i)}]

(w_i^{(1)} = 1) , (w_i^{(m)} = e^{-y_i C_{m-1}(x_i)}) for (m > 1), 则:
[E = sum_{i=1}^N w_i^{(m)}e^{-y_ialpha_m k_m(x_i)}]

我们把数据分为两部分: ((y_i k_m(x_i) = 1))(k_m) 分类器区分正确和 (y_i k_m(x_i) = -1) 分类错误:

[E = sum_{y_i = k_m(x_i)} w_i^{(m)}e^{-alpha_m} + sum_{y_i eq k_m(x_i)} w_i^{(m)}e^{alpha_m}]

[= sum_{i=1}^N w_i^{(m)}e^{-alpha_m} + sum_{y_i eq k_m(x_i)} w_i^{(m)}(e^{alpha_m}-e^{-alpha_m})]

因为只有右侧项(sum_{y_i eq k_m(x_i)} w_i^{(m)})依赖于(k_m),我们最小化(E) 等价于最小化(w_i^{(m)} = e^{-y_i C_{m-1}(x_i)})的权重。

计算(alpha_m),求导:
[frac{d E}{d alpha_m} = frac{d (sum_{y_i = k_m(x_i)} w_i^{(m)}e^{-alpha_m} + sum_{y_i eq k_m(x_i)} w_i^{(m)}e^{alpha_m}) }{d alpha_m}]

[alpha_m = frac{1}{2}lnleft(frac{sum_{y_i = k_m(x_i)} w_i^{(m)}}{sum_{y_i eq k_m(x_i)} w_i^{(m)}} ight)]

弱分类器的加权错误率为(epsilon_m = sum_{y_i eq k_m(x_i)} w_i^{(m)} / sum_{i=1}^N w_i^{(m)})

所以:
[alpha_m = frac{1}{2}lnleft( frac{1 - epsilon_m}{epsilon_m} ight)]

以上是关于机器学习中的损失函数的主要内容,如果未能解决你的问题,请参考以下文章

盘点机器学习中那些神奇的损失函数

机器学习中的损失函数(附python代码)

(转)机器学习中的损失函数

机器学习中的损失函数

机器学习 | Logistic Regression(逻辑回归)中的损失函数

机器学习 | Logistic Regression(逻辑回归)中的损失函数