机器学习中的损失函数

着重介绍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 \]

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

损失函数

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

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

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

常用的损失函数

  • 铰链损失(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+ C\sum_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\)

优化损失函数进一步可写为:

\[\begin{aligned} 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) \end{aligned} \]

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

Softmax Loss

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

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

逻辑回归的表达式为:

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

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

得:

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

最大log似然函数为:

\[\begin{split} \ell(\theta)&=log(L(\theta)) \\ &= \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_i\alpha_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 \neq k_m(x_i)} w_i^{(m)}e^{\alpha_m} \]

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

因为只有右侧项\(\sum_{y_i \neq 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 \neq k_m(x_i)} w_i^{(m)}e^{\alpha_m}) }{d \alpha_m} \]

\[\alpha_m = \frac{1}{2}\ln\left(\frac{\sum_{y_i = k_m(x_i)} w_i^{(m)}}{\sum_{y_i \neq k_m(x_i)} w_i^{(m)}}\right) \]

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

所以:

\[\alpha_m = \frac{1}{2}\ln\left( \frac{1 - \epsilon_m}{\epsilon_m}\right) \]

posted @ 2018-12-22 12:42  侯凯  阅读(1412)  评论(0编辑  收藏  举报