我和我的同事正在努力理解逻辑回归与支持向量机之间的区别。显然,它们优化的是不同的目标函数。支持向量机是否可以简单地描述为一个优化铰链损失的判别分类器?还是说它更为复杂?支持向量是如何起作用的?松弛变量又如何?为什么不能像构建深层神经网络那样构建深层支持向量机呢?
回答:
我将逐一回答这些问题
支持向量机是否可以简单地描述为一个优化铰链损失的判别分类器?
支持向量机只是一个优化铰链损失并带有L2正则化的线性分类器。
还是说它更为复杂?
不,它“只是”这样,但是有不同的方式来看待这个模型,从而得出复杂而有趣的结论。特别是,这种特定的损失函数选择导致了极其高效的核化,这对于对数损失(逻辑回归)和均方误差(线性回归)来说是不成立的。此外,你可以展示非常重要的理论属性,例如与Vapnik-Chervonenkis维度减少相关的属性,这导致了过拟合的可能性更小。
直观地看这三种常见的损失函数:
- 铰链:
max(0, 1-py)
- 对数:
y log p
- 均方误差:
(p-y)^2
只有第一个具有这样的特性:一旦某样本被正确分类,它的惩罚为0。其余的即使正确分类样本,仍然会对你的线性模型进行惩罚。为什么?因为它们与回归的关系更大,而不是分类,它们想要的是完美的预测,而不仅仅是正确的分类。
支持向量是如何起作用的?
支持向量只是靠近决策边界的样本(宽泛地说)。对于线性情况,这并没有太大变化,但由于支持向量机的大部分力量在于其核化——因此支持向量变得极为重要。一旦引入核函数,由于铰链损失,支持向量机的解可以高效地获得,并且支持向量是训练集中唯一被记住的样本,从而用训练数据的子集构建非线性决策边界。
松弛变量又如何?
这只是铰链损失的另一种定义,当你想要核化解并展示其凸性时更为有用。
为什么不能像构建深层神经网络那样构建深层支持向量机呢?
你可以,但是由于支持向量机不是概率模型,其训练可能会有些棘手。此外,支持向量机的全部优势来自于效率和全局解,一旦你创建一个深层网络,这两者都会丧失。然而,确实存在这样的模型,特别是支持向量机(使用平方铰链损失)现在常常被选择作为深层网络的最顶层——因此整个优化实际上是一个深层支持向量机。在中间添加更多层与支持向量机或其他成本无关——它们完全由它们的激活函数定义,你可以例如使用RBF激活函数,但已经多次证明这会导致弱模型(检测到的是局部特征)。
总结如下:
- 确实存在深层支持向量机,这只是一个典型的深层神经网络,顶层是支持向量机层。
- 没有在中间插入支持向量机层这样的做法,因为训练标准实际上只应用于网络的输出。
- 在深层网络中使用“典型”的支持向量机核作为激活函数并不流行,因为它们的局部性(与非常全局的relu或sigmoid相反)