序列最小優化算法 |
---|
概況 |
---|
類別 | 訓練支持向量機的優化算法 |
---|
複雜度 |
---|
最壞時間複雜度 | O(n³) |
---|
相關變量的定義 |
---|
序列最小優化算法(英語:Sequential minimal optimization, SMO)是一種用於解決支持向量機訓練過程中所產生優化問題的算法。SMO由微軟研究院的約翰·普萊特於1998年發明[1],目前被廣泛使用於SVM的訓練過程中,並在通行的SVM庫LIBSVM中得到實現。[2][3] 1998年,SMO算法發表在SVM研究領域內引起了轟動,因為先前可用的SVM訓練方法必須使用複雜的方法,並需要昂貴的第三方二次規劃工具。而SMO算法較好地避免了這一問題。[4]
問題定義
SMO算法主要用於解決支持向量機目標函數的最優化問題。考慮數據集
的二分類問題,其中
是輸入向量,
是向量的類別標籤,只允許取兩個值。一個軟間隔支持向量機的目標函數最優化等價於求解以下二次規劃問題的最大值:
![{\displaystyle W=\max _{\alpha }\sum _{i=1}^{n}\alpha _{i}-{\frac {1}{2}}\sum _{i=1}^{n}\sum _{j=1}^{n}y_{i}y_{j}K(x_{i},x_{j})\alpha _{i}\alpha _{j},}](https://wikimedia.org/api/rest_v1/media/math/render/svg/06d1e72816e282de2550e7f9cf799df30419e0f1)
- 滿足:
![{\displaystyle 0\leq \alpha _{i}\leq C,\quad {\mbox{ for }}i=1,2,\ldots ,n,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/6f358b892c05a3b87095ffd83a1778534acef669)
![{\displaystyle \sum _{i=1}^{n}y_{i}\alpha _{i}=0,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/171cf57347f4db4b83328dd45300e1378c555608)
其中,
是SVM的參數,而
是核函數。這兩個參數都需要使用者制定。
算法
SMO是一種解決此類支持向量機優化問題的迭代算法。由於目標函數為凸函數,一般的優化算法都通過梯度方法一次優化一個變量求解二次規劃問題的最大值,但是,對於以上問題,由於限制條件
存在,當某個
從
更新到
時,上述限制條件即被打破。為了克服以上的困難,SMO採用一次更新兩個變量的方法。
數學推導
假設算法在某次更新時更新的變量為
和
,則其餘變量都可以視為常量。為了描述方便,規定
![{\displaystyle K_{ij}=K(\mathbf {x_{i}} ,\mathbf {x_{j}} ),f(\mathbf {x_{i}} )=\sum _{j=1}^{n}y_{j}\alpha _{j}K_{ij}+b,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a3c79b28e7cfea0a51c50be723dc26a356ef8ba4)
![{\displaystyle v_{i}=f(\mathbf {x_{i}} )-\sum _{j=1}^{2}y_{j}\alpha _{j}K_{ij}-b}](https://wikimedia.org/api/rest_v1/media/math/render/svg/34b0c20cf8f44d3edb564e2a32795fe721136701)
因而,二次規劃目標值可以寫成
![{\displaystyle {\begin{array}{lcl}W(\alpha _{1},\alpha _{2})&=&\sum _{i=1}^{n}\alpha _{i}-{\frac {1}{2}}\sum _{i=1}^{n}\sum _{j=1}^{n}y_{i}y_{j}K(x_{i},x_{j})\alpha _{i}\alpha _{j}\\&=&\alpha _{1}+\alpha _{2}-{\frac {1}{2}}K_{11}\alpha _{1}^{2}-{\frac {1}{2}}K_{22}\alpha _{2}^{2}-y_{1}y_{2}K_{12}\alpha _{1}\alpha _{2}\\&&-y_{1}\alpha _{1}v_{1}-y_{2}\alpha _{2}v_{2}+{\text{constant}}\,\end{array}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2fcb18b484a724fba4b106259597d8d181326e37)
由於限制條件
存在,將
看作常數,則有
成立(
為常數)。由於
,從而
(
為變量
,
)。取
為優化變量,則上式又可寫成
![{\displaystyle {\begin{array}{lcl}W(\alpha _{2})&=&\gamma -s\alpha _{2}+\alpha _{2}-{\frac {1}{2}}K_{11}(\gamma -s\alpha _{2})^{2}-{\frac {1}{2}}K_{22}\alpha _{2}^{2}\\&&-sK_{12}(\gamma -s\alpha _{2})\alpha _{2}-y_{1}(\gamma -s\alpha _{2})v_{1}-y_{2}\alpha _{2}v_{2}+{\text{constant}}\end{array}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cc9a3714659870d21a1c0365e8d22c15291e0ff3)
對
求偏導以求得最大值,有
![{\displaystyle {\begin{array}{lcl}{\frac {\partial W(\alpha _{2})}{\partial \alpha _{2}}}&=&-s+1+sK_{11}\gamma -K_{11}\alpha _{2}-K_{22}\alpha _{2}+2K_{12}\alpha _{2}-sK_{12}\gamma \\&&+y_{2}v_{1}-y_{2}v_{2}=0\end{array}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/98c42f12ff1cf7c2433e4e2c00d62a084f74392c)
因此,可以得到
![{\displaystyle \alpha _{2}^{new}={\frac {y_{2}(y_{2}-y_{1}+y_{1}\gamma (K_{11}-K_{12})+v_{1}-v_{2})}{K_{11}+K_{22}-2K_{12}}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cb1d38dedd117de6a7efe498af094261004e7013)
規定誤差項
,取
,並規定
,上述結果可以化簡為
![{\displaystyle \alpha _{2}^{new}=\alpha _{2}^{old}+{\frac {y_{2}(E_{1}-E_{2})}{K}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/58228a794b3d87f264eb51fe808a323b8d2c071d)
再考慮限制條件
,
的取值只能為直線
落在
矩形中的部分。因此,具體的SMO算法需要檢查
的值以確認這個值落在約束區間之內。[1][5]
算法框架
SMO算法是一個迭代優化算法。在每一個迭代步驟中,算法首先選取兩個待更新的向量,此後分別計算它們的誤差項,並根據上述結果計算出
和
。最後再根據SVM的定義計算出偏移量
。對於誤差項而言,可以根據
、
和
的增量進行調整,而無需每次重新計算。具體的算法如下:
1 随机数初始化向量权重
,并计算偏移
2 初始化误差项
3 选取两个向量作为需要调整的点
4 令
5 如果
6 令
7 如果
8 令
9 令
10 利用更新的
和
修改
和
的值
11 如果达到终止条件,则停止算法,否则转3
其中,
和
為
的下界和上界。特別地,有
![{\displaystyle U={\begin{cases}\max {\left\{0,\alpha _{2}^{old}-\alpha _{1}^{old}\right\}}&y_{1}y_{2}=-1\\\max {\left\{0,\alpha _{1}^{old}+\alpha _{2}^{old}-C\right\}}&y_{1}y_{2}=1\end{cases}},V={\begin{cases}\min {\left\{C,C+\alpha _{2}^{old}-\alpha _{1}^{old}\right\}}&y_{1}y_{2}=-1\\\min {\left\{C,\alpha _{2}^{old}+\alpha _{1}^{old}\right\}}&y_{1}y_{2}=1\end{cases}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/6b625811fc62ac9c5ea70efd53793b85e1a22d22)
這一約束的意義在於使得
和
均位於矩形域
中。[5]
優化向量選擇方法
可以採用啟發式的方法選擇每次迭代中需要優化的向量。第一個向量可以選取不滿足支持向量機KKT條件的向量,亦即不滿足
![{\displaystyle y_{i}f(\mathbf {x} _{i}){\begin{cases}>1&\alpha _{i}=0\\=1&0<\alpha _{1}<C\\<1&\alpha _{i}=C\end{cases}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c5d50355067c2325aedd0400f9b0832a26adc1e0)
的向量。而第二個向量可以選擇使得
最大的向量。[5]
終止條件
SMO算法的終止條件可以為KKT條件對所有向量均滿足,或者目標函數
增長率小於某個閾值,即
[5]
參考資料
- ^ 1.0 1.1 Platt, John, Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines, 1998 [2010-12-03], (原始內容存檔於2012-10-15)
- ^ Chih-Chung Chang and Chih-Jen Lin (2001). LIBSVM: a Library for Support Vector Machines (頁面存檔備份,存於互聯網檔案館).
- ^ Luca Zanni (2006). Parallel Software for Training Large Scale Support Vector Machines on Multiprocessor Systems (頁面存檔備份,存於互聯網檔案館).
- ^ Rifkin, Ryan, Everything Old is New Again: a Fresh Look at Historical Approaches in Machine Learning, Ph.D. thesis, 2002: 18 [2010-12-04], (原始內容存檔於2012-03-14)
- ^ 5.0 5.1 5.2 5.3 Tsang, I. W.; Kwok, J. T.; Cheung, P. M., Core Vector Machines: Fast SVM Training on Very Large Data Sets, Journal of Machine Learning Research (6), 2005, (6): 363–392 [2010-12-06], (原始內容存檔於2016-03-05)
參見