Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines 论文研读

摘要

本文提出了一种用于训练支持向量机的新算法:序列最小优化算法(SMO)。训练支持向量机需要解决非常大的二次规划(QP)优化问题。SMO 将这个大的 QP 问题分解为一系列最小的 QP 问题。这些小的 QP 问题可以通过解析来解决,从而避免了将耗时的数值 QP 优化用作内部循环。SMO 所需的内存量与训练集大小成线性关系,这使 SMO 可以处理非常大的训练集。由于避免了矩阵计算,因此对于各种测试问题,SMO 随训练集大小在线性和二次方之间缩放,而标准分块 SVM 算法随训练集大小在线性和三次方之间缩放。SMO 的计算时间主要由 SVM 评估决定,因此 SMO 对于线性 SVM 和稀疏数据集最快。在现实世界的稀疏数据集上,SMO 的速度可以比分块算法快 1000 倍以上。

研究背景

在过去的几年中,学界对支持向量机(SVM)的研究兴趣激增,因其在诸如手写字符识别、面部检测、行人检测和文本分类等许多问题上均具有良好的泛化性能。然而,现有的 SVM 训练算法速度慢、内存开销大,且实现过于复杂和困难,这使得 SVM 的使用仍然仅限于一小部分研究人员。因此,为了提高 SVM 的实用性,亟需一种更好的训练算法。

问题描述

SVM 的训练本质上是求解一个二次规划(QP)问题,其拉格朗日对偶表示如下:

1

当满足如下 KKT 条件时,该 QP 问题得以解决:

2

其中, x ⃗ i \vec x_i x i 是第 i 个训练样本, y i y_i yi 是第 i 个训练样本的真实标签, u i u_i ui 是第 i 个训练样本的输出, α i α_i αi 第 i 个训练样本对应的拉格朗日乘数, C C C 是惩罚参数。

上式中的二次形式涉及一个矩阵,该矩阵的元素数量等于训练样本数量的平方。一旦样本数量稍大,该矩阵将难以存入内存,因而通过标准的 QP 技术无法轻松解决由 SVM 引出的 QP 问题。

本文所讨论的内容即,作者所提出的训练算法是如何解决上述问题的。

研究现状

Vapnik[2] 描述了一种“分块”解决 SVM QP 的方法,将整个 QP 问题分解为多个 QP 子问题,其最终目标是识别所有非零拉格朗日乘数并丢弃所有零拉格朗日乘数。每个 QP 子问题都使用先前子问题的结果初始化。在最后一步,已经确定了整个非零拉格朗日乘数集,从而解决了整个 QP 问题。

分块处理将矩阵的大小从训练样本数的平方,减少到大约为非零拉格朗日乘数的数目的平方。然而,分块算法仍然不能解决大规模的训练问题,因为即使这个缩小的矩阵也无法放入内存中。

1997年,Osuna 等人[3] 从理论上证明,大的 QP 问题可以分解为一系列较小的 QP 子问题。基于此,论文建议在每一步中添加一个样本,然后去除一个样本,这样每个 QP 子问题将保持一个恒定大小的矩阵,从而允许对任意大小的数据集进行训练。但显然这是低效的,因为它使用整个数值 QP 优化步骤来仅仅使一个训练样本服从 KKT 条件。

更重要的是,所有这些方法都需要数值 QP 解算器,而众所周知,数值 QP 存在精度问题。

解决方法

作者在论文中提出的序列最小优化算法(SMO)是一种简单快速求解 SVM 引出的 QP 问题的方法,它将整个 QP 问题分解为多个 QP 子问题,通过 Osuna[3] 的定理保证收敛。

创新点与优势

不像以往的算法,SMO 在每一步仅选择两个拉格朗日乘数进行联合优化。其优势在于,两个拉格朗日乘数的优化可以通过解析方法完成,避免了数值 QP 优化,计算更快、更精确。此外,由于 SMO 完全不需要额外的矩阵存储,即使大规模的训练问题也可以在个人电脑的内存中运行。下图直观地说明了 SMO 与以往算法的区别。

comparison

图中,每种算法均展示了三个训练轮次。水平细线代表训练集,粗块代表本轮中被优化的拉格朗日乘数。对于分块算法,每轮添加固定数量的样本,而为零的拉格朗日乘数被丢弃。因此,每轮的训练样本数量趋于增加。对于Osuna的算法,每轮都会优化固定数量的样本,因为添加和删除的样本数量相同。对于SMO,每轮都仅对两个样本进行解析优化,因此每轮都非常快。

实现过程

SMO 由两个部分组成:一种求解两个拉格朗日乘数的解析方法,以及一种选择要优化的乘数的启发式方法。

求解两个拉格朗日乘数的解析方法

为了求解两个拉格朗日乘数,SMO 首先计算这些乘数的约束,然后求解约束最小值。如下图所示,有界约束使拉格朗日乘数位于一个框内,而线性相等约束使拉格朗日乘数位于对角线上。 因此,目标函数的约束最小值必须位于对角线段上。

constraints

在实现上,假设当前为第 k k k 轮,使用解析法计算乘数 α 1 ( k ) α_1^{(k)} α1(k) α 2 ( k ) α_2^{(k)} α2(k) 的最优解并更新至 α 1 ( k + 1 ) α_1^{(k+1)}

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值