學習中碰到的一些優化工具包和庫


1.linear svm

這個工具包目前用的比較多。例如面部特征點的回歸方法中,學習線性回歸的權重,例如:Face Alignment at 3000 FPS中:

minWti=1N||s^tiWtΦt(Ii,St1i)||22+λ||Wt||22

權重 Wt 的學習,其也可以閉合形式的求解,即關於 Wt 求導,另其等於0.

2.Matlab自帶的優化工具包。

進入Matlab幫助文檔,Optimization Toolbox目錄下,可看到Matlab提供了:
(1)非線性優化。

求解有約束的或者無約束的、帶有一個或者多個目標的非線性問題.。可采用串行或者並行。(有約束的優化
,無約束的優化,多目標優化,額外的接口)

(2)線性規划和混合整數線性規划。

求解連續變量或者整變量的線性規划問題。

(3)二次規划。

說明:求解二次目標函數,線性約束的問題。

(4)最小二乘。

求解最小二次(曲線擬合)問題。(線性最小二乘問題,非線性最小二乘問題(曲線擬合))。

(5)非線性方程組。

找到非線性方法組的根。

3.CVX

CVX User’Guide.
伴隨課程:EE364A和進階版EE364b,
凸優化最重要的書籍:Convex Optimization. Stephen Boyd
Help:CVX 論壇
(1)支持一些標准問題類型。

線性規划(LPs),二次規划(QPs),二階錐規划(SOCPs),和半正定規划(SDPs)

(2)可以解決一些更復雜的凸優化問題。

包括不可微的函數,例如 l1 范數。可以使用CVX很方便的表示和求解約束的范數最優化,熵最大化,行列式最大化,以及許多其他凸規划問題。

(3)可以求解混合整數的disciplined 凸規划。

混合整數的disciplined凸規划(MIDCPs),就是其中的一個或者多個變量的取值約束為整數。一個混合整數的問題不是凸的。找到全局最優值,需要組合傳統的凸優化算和窮舉搜索算法(例如branch-and-bound)算法。

(4)提供了特定的模式能夠簡化兩種特殊類型問題的構造。即半正定規划模式和幾何規划模式。

(5)CVX不是一個檢查你的問題是否為凸的工具。
(6)CVX不能處理非常大規模的問題。

例如你的問題規划很大(例如一個巨大的圖像處理或者機器學習問題),CVX效果不好,或者根本沒有效果。
但是CVXy也同樣扮演者重要的着色,例如開始開發一個特定的大規模的方法,你可以使用CVX求解該問題小尺度的或者簡化的版本,來快速精確的實驗你想解決的問題。例如對於圖像的重構,你可能在50*50像素的圖像上,使用CVX進行不同問題表示的實驗。

(7)如果問題有可利用的結構(例如稀疏),並且你可以避免for循環(Maltab中很慢),並且也可以避免像函數log和exp(它們需逐次的逼近),那么CVX將可以解決中和大規模的問題。

4.SPAMS

SPAMS的全稱為:Sparse Modeling Software,即稀疏建模軟件。SPAMS是一個可以求解各種稀疏估計問題的優化工具包。

詞典學習,矩陣的因式分解(NMF,sparse PCA,…)
使用LARS,坐標下降,OMP,SOMP,proximal method(近端算法)求解稀疏分解問題。
求解有結構的稀疏分解問題( l1/l2 , l1/l ,稀疏組lasso,樹結構的正則化,帶有組重疊的有結構的稀疏(structured sparsity with overlapping groups,…)

簡介:
算法的實現用來求解帶有稀疏正則項的機器學習和信號處理問題。
庫采用C++編寫,兼容Linux,Mac,Win 32和64bit。接口有Matlab,R,Python,C++、、。軟件包需要BLAS和LAPACK的實現,進行線性代數的操作。
SPAMS可以分成幾個工具箱並且包含了額外混雜的功能。
(1)詞典學習和矩陣因式分解工具箱。包含了[20,21]的在線學習技術和其用來求解各種矩陣因式分解的變種。

稀疏編碼的詞典學習
稀疏主成分分析(sparse PCA,可以看作是一個稀疏的矩陣因式分解問題)
非負矩陣因式分解。
非負稀疏編碼
dictionary learning with structured sparsity
原型分析(archetypal analysis)

(2) 稀疏分解工具。

正交匹配追蹤(OMP,或者前向選擇)
LARS/同論算法。(求解Lasso 和彈性網問題的變體)
LARS一個有權重的版本.
當數據帶有一個二值掩碼時的OMP和LARS.
坐標下降法算法求解 l1 分解問題。
貪婪方法求解同時信號近似[34,35]
基於塊坐標下降方法求解帶有 l1/l2 正則化的同時信號近似。
同論方法求解Fused-Lasso信號近似。
有效地投影到一些能夠誘導稀疏的凸集,例如 l1 ball,彈性網或者Fused Lasso 約束集。
有效集算法(active-set algorithm)求解單純性分解問題。

(3)近似工具箱(近端工具箱,Proximal toolbox)。實現的近似方法能夠求解帶有不同loss和正則化組合的一大類的稀疏近似問題。這個工具箱的主要特征是,提供了一個基於duality gaps的魯棒性的停止准則來控制優化的質量。也可以處理大規模問題的稀疏特征矩陣。主要實現了:
正則項:

Tikhonov regularization( l2 范數的平方)
l1 范數, l2,l 范數
彈性網
Fused Lasso
樹結構的 l2 范數的和
樹結構的 l 范數的和
一般的 l 范數的和
mixed l1/l2 -norms on matrices
mixed l1/l -norms on matrices
mixed l1/l2 -norms on matrices plus l1
mixed l1/l -norms on matrices plus l1
帶有 l2 或者 l 范數的group-lasso
group-lasso+ l1
多任務的樹結構的 l 范數的和
跡范數
l0 偽范數(only with ISTA)
樹結構的 l0 范數(only with ISTA)
矩陣秩的正則化(only with ISTA)
[24]中的路徑編碼懲罰

損失函數:

平方損失
缺省值的平方損失
logistic損失,帶權重的logistic loss
多類的logistic

該工具箱也可以帶有非負約束,處理截距和稀疏矩陣。也有一些未公開的功能,可以在源代碼中看到。例如損失函數和正則項的一些組合,隨機近似梯度方法和增量近似梯度方法。

5.SLEP

SLEP的全稱為:Sparse Learning with Efficient Projections.
其網站首頁列出了該算法庫的四大優點:
(1) 一階方法。每次迭代過程中,我們僅需要計算函數值和梯度,這樣算法可以處理大規模的稀疏數據。
(2)最優收斂率。通過一階黑箱子方法,針對平滑的凸優化問題,收斂速率為 O(1/k2)
(3)高效的投影。投影問題(近似操作,近端操作)可以有效地解決。
(4)Pathwise Solutions。SLEP軟件包提供的函數可以通過熱啟動技術有效地計算pathwise solutions(相對應於一系列的正則化參數)。

簡介:
許多真實世界的過程的基礎表示通常是稀疏的。例如在疾病的診斷中,雖然人類有大量的基因,但是僅有少量的基因對某種疾病有貢獻。在圖像處理中,許多自然的信號是稀疏的,因為當在一個合適的基下進行表示時,它們擁有精確的表示。
l1
許多現有的關於稀疏學習的工作都是基於 l1 范數正則化的一個變體。因為 l1 正則化擁有:稀疏-誘導屬性,凸的,和很強的理論保證,以及在各種應用中偉大的成功經驗。
l1/l 范數正則化$
其屬於復合的絕對懲罰家族,其實 l1 范數正則化的推廣。
Fused Lasso Regularization
融合的Lasso正則化產生的解在系數和逐次差分(successive differences),都是稀疏的。其中特征通常以某種有意義的方式進行排序。所以要注意應用場合
Sparse Group Lasso
Lasso 和Group Lasso的擴展。稀疏組Lasso懲罰產生的解,可以達到組間和組內同時稀疏。也就是說許多特征組正好為零(這樣就不用選擇),並且在非零特征組的組內,一些特征也正好為0。因此可以應用於鑒別重要的組以及已選擇組內的重要特征。稀疏組Lasso是樹結構的組Lasso的一個特列。
Tree Structured Group Lasso
在樹結構的組Lasso中,特征上的結構表示為一顆樹,葉子節點為特征,內部節點為特征的簇。
Overlapping Group Lasso
可以利用Group Lasso,Sparse group Lasso,tree structured group Lasso達到組稀疏。但是組Lasso,和稀疏組Lasso僅限制於預先定義的不重疊的特征組上。並且樹結構的組Lasso限制在樹結構組上。因此在許多應用中,期望一個更靈活的(重疊)組結構。
Ordered Tree-Nonegative Max-Heap
在許多回歸/分類問題中,特征呈現出某種分層或者有結構的關系,使用這些關系可以產生帶有改善的回歸/分類性能的性能的模型。在有序的凸結構中,假定:對於給定的回歸/分類任務,只要父節點被選中,那么該節點就被選中。為了整合這樣的有序的樹結構,假定模型的參數服從非負最大堆(non-negative Max-heap)結構。這樣的非負最大堆可以誘導所謂的”遺傳原理’,人們已經證明了這對於高維變量的選擇是有效的。
Trace-Norm Regularization
在機器學習,自動控制和圖像壓縮領域,最小化一個矩陣變量的秩,s.t.某些約束。例如,在協同過濾中,給定一個部分填充的評分矩陣,並且任務是預測缺失的項。因為,人們普遍認為,少量的因素對一個人的品味有貢獻,很自然的,通過一個低秩矩陣近似的表示給定的平方矩陣。然而,矩陣秩的最小化問題是一個NPhard問題,一般來說是因為秩函數的組合性質。秩函數的一個常用的凸松弛是跡范數(核范數),定義為矩陣奇異值的和),因為跡范數是關於單位球的譜范數上的秩函數的凸包絡。最近的一些工作已經表明,低秩解可以通過在某些條件下,最小化跡范數精確的得到。跡范數正則化 問題也可以認為是一種形式的稀疏學習,因為跡范數等價於由奇異值組合的矢量的 l1 范數。

6.mexopencv

可以在Matlab中調用OpenCV函數(並不是全部)。其也實現了Matlab個數據類型到OpenCV Mat對象的轉換,因此可以在混合編程的時候,使用mexopencv作為數據傳輸的接口。

數據的轉換:

int i = MxArray(prhs[0]).toInt();
double d = MxArray(prhs[0]).toDouble();
bool b = MxArray(prhs[0]).toBool();
std::string s = MxArray(prhs[0]).toString();
cv::Mat mat = MxArray(prhs[0]).toMat(); // For pixels
cv::Mat ndmat = MxArray(prhs[0]).toMatND(); // For N-D array
cv::Point pt = MxArray(prhs[0]).toPoint();
cv::Size siz = MxArray(prhs[0]).toSize();
cv::Rect rct = MxArray(prhs[0]).toRect();
cv::Scalar sc = MxArray(prhs[0]).toScalar();
cv::SparseMat s = MxArray(prhs[0]).toSparseMat(); // Only double to float
plhs[0] = MxArray(i);
plhs[0] = MxArray(d);
plhs[0] = MxArray(b);
plhs[0] = MxArray(s);
plhs[0] = MxArray(mat);
plhs[0] = MxArray(ndmat);
plhs[0] = MxArray(pt);
plhs[0] = MxArray(siz);
plhs[0] = MxArray(rct);
plhs[0] = MxArray(sc);
plhs[0] = MxArray(sp); // Only 2D float to double

7.VLFeat

VLFeat開源庫實現了流行的機器視覺算法,特別是圖像理解和局部特征的抽取,匹配。算法包括:
Fisher Vector,VLAD,SIFT,MSER,k-mean,分層的K-mean,凝聚式信息瓶頸算法,SLIC超像素,快速轉變超像素,大規模SVM訓練和其他的一些算法。為了高效性和兼容性,才用C語言編寫,提供了Matlab接口。
其給出了一些特征的可視化,如Hog,SIFT等。
更詳細的內容可以參考在線手冊:
http://www.vlfeat.org/overview/tut.html
2013,CVPR,Supervised Descent Method and its Applications to Face Alignment中計算SIFT特征就是使用了該庫。

8.Matlab自動的機器視覺工具

在Matlab控制台,輸入help vision。或者進入help幫助文檔,找到Computer Vision System Toolbox,就可以看到一些機器視覺算法。例如:特征檢測,抽取和匹配,目標的檢測和識別,運動分析和跟蹤,相機標定,立體視覺,濾波,幾何變換,形態學操作,統計,文本和圖,轉換(如DCT)等。
例如:
抽取HOG特征:extractHOGFeature,
人臉檢測:faceDetector=vision.CascadeObjectDetector;….

9.flandmark/clandmark

基准點檢測的開源代碼。是一個很好的學習“圖形結構檢測特征點”的代碼。
使用圖形結構(Pictorial Structures)進行基准點的檢測有兩個開源的代碼,一個是:2012,CVPR,Face Detection, Pose Estimation, and Landmark Localization in the Wildface.其使用的數據庫是MultiPIE數據集,並不免費。帶有13個視角(mixture)和68個特征點的數據集好像很難找。因此要學習其代碼的實現就有點難。因此為了能夠運行代碼,需要自己簡單的標定Pointing04的數據集,還需要注意特征點的標定順序。其模型參數的求解使用了Dual Coordinate Descent Solvers for Large Structured Prediction Problems中的求解,代碼讀起來是相當的費勁。
另外一個就是flandmark/clandmark,其配置過程還不算復雜,需要使用如VS編譯生成lib共Matlab調用。因此在程序調試的時候就比較棘手,還好有C++版本的。
通過這兩個代碼的學習,可以了解到如何使用廣義距離變換求解最大化(最小化問題)。還可以學習到兩種大規模的優化學習算法
(1)Bundle methods for regularized risk minimization.
(2)Dual Coordinate Descent Solvers for Large Structured Prediction Problems.
上面的兩篇文章很不錯,非常值得讀。

10.CImg

CImg Library是一個小的,開源的,現代C++的,圖像處理工具包。
有用: CImg定義管理圖像的類和方法。可以使用CImg加載/保存各種文件類型,訪問像素值,顯示/轉換/濾波圖像,可以畫基本元素(文本,人臉,曲線,3D目標),計算統計學,管理用戶與圖像的交互,等待。
通用性: CImg定義了簡單的圖像類,能夠表示4維數據(1維標量信號,3維超分辨率的體積圖像),模板的像素類型(bool,char,in float)。也可以處理圖像集合和序列。
便攜性: CImg是一個獨立的,線程安全,高度可便攜的。它可以工作子不同操作系統上(Unix,Window,MacOS X,*BSD,…),並且兼容各種C++編譯器(VC++,g++,clang++,icc,…).
簡單: CImg屬於輕量級,僅需要包含單個頭文件CImg.h到你的C++源文件中。其只定義了四種不等的類型,壓縮進命名空間clim_library下,僅需要少量的標准C++和系統庫。不需要依賴外來的或者復制的項。
擴展性: CImg可以使用額外的工具/庫,例如Board,FFMPEG,FFTW3,GraphicsMagick,ImageMagick,Lapack,libcurl,libjpeg,libpng,libtiff,Magick++,OpenEXR OpenCV OpenMP或者XMedCon。而且使用簡單的插件式的機制允許用戶直接地根據自己的需要加強庫的能力。
自由:CImg是免費的,開源的庫。可以使用在商業的應用中。

11.STPRtool

STPRtoo全稱為:Statistical Pattern Recognition Toolbox
統計模式識別工具箱。
包含如貝葉斯分類,線性判別函數,廣義的安德森任務,線性特征抽取,AdaBoost算法,核機器,核特征抽取,優化方法,RBF核的預圖像問題,支持向量機,概率分布函數和估計,二次判別函數,可視化等。

12.Libqp

Libqp的全稱為:Library for quadratic programming.求解二次規划的庫。Libqp是c語言寫的庫,其實現了兩種特定類型的凸二次規划(QP).

帶有單純性約束的二次規划
定義如下:

minimize12xTHx+xTfsubject toiIkxi=bk,kSequiIkxi=bk,kSneqxi0,iI

其中 x=(x1,...,xn)Rn 是優化矢量, HRn×n 是對稱半正定矩陣, fRn 是一個矢量。 I=1,...,n 是一個索引集, I1,...,Im I 的子集,滿足 I1...=I ,並且 I1...Ik=ϕ Sequ Sneq 是滿足 SequSneg=1,...,m 的索引集,並且 SequSneq=ϕ(b1,...,bm)Rm 是正數。
實現的解決器libqp_splex.c是[1,2]提出的方法的一個廣義化。它是基於帶有一個改進的工作集選擇策略的序列最小化算法(SMO)。例如應用在有結構的SVM學習,Bundle Method for Risk Minization ,帶有L2軟邊界的二類SVM等。
例如在文章《Bundle Methods for Regularized Risk Minimizaition》中:
推論三:對於二次正則化即 Ω(w)=12||w||22 ,公式(10)變成:
αt=argmaxαRt{12λαTATAα+αTb|α0,||α||1=1}
.
因為 ATA 是半正定矩陣:
xTATAx=(Ax)TAx=||Ax||220

並且滿足上面的解決器的輸入條件,因此可以調用。
帶有邊界約束(box constraints)和簡單的線性等式約束的QP任務:
定義如下:
minimize12xTHx+xTfsubject toxTα=b,lixiui,i=1,...,n

其中 x=(x1,...,xn)Rn 是優化矢量。 HRn×n 是一個對稱半正定矩陣, fRn 是一個矢量, aRn 是一個非零矢量, bR 是一個標量, (l1,...,ln)(R)n (u1,...,un)(R)n 分別表示下界和上界。

解決器libqp_gsmo.c精確的實現了文獻[3]提出的廣義的SMO。例如在訓練帶有L1軟邊界的二類SVM是需要求解這樣的QP.

Matlab中的二次規划求解器
標准形式:

minx12xTHx+fTxAxbAeqx=beqlbxub

從標准形式來看,Matlab能夠求解的二次規划問題看似更廣泛。其使用的函數是quadprog。通過在控制台使用edit quadprog我們可以看到Matlab實現了三種求解二次規划的方法:
1.active set 有效集法
2.interior-point-convex 內點法
3.trust-region-reflective 置信域反射法

Libqp有兩個優點
1.求解大規模的優化問題。
2.采用C實現,其運行速度是Malab的十幾倍或者幾十倍。

13.bmrm

bmrm的全稱是Bundle Methods for Regularized Risk Minimization。其求解下面的無約束的優化問題:

minwJ(w)=λr(w)+l(w)

其中 λ>0 是正則化常數, r(w) 是一個凸的正則化項, l(w) 是經驗風險函數,也就是說損失函數和的平均。例如給定m個特征-標簽對 (xi,yi) ,線性支持向量機可以轉換為下面的形式:
r(w)=12wTw

l(w)=1mi=1mmax(0,1yiwTxi)

這個庫是模塊化的,也就是說正則項和損失函數的實現不耦合,因此新的問題可以很容易地通過實現新的正則化項或者新的損失函數來進行建模。
此外該庫提供了並行的框架。當損失函數可以分解時,也就是說實例 xi,yi) 可以分解成一些不相交的集,那么可以在這些集上獨立的完成 l(w) 的計算。
實現的正則項和損失函數有:
正則項:L2,L1范數,(有不同的實現方法)
損失函數:
1.二類分類器,

Hinge
Squred Hinge
Huber hinge
Logistic regression
F-beta
ROC-score
Exponential
Novelty detection

2.一元回歸

ϵ -insensitive
Least squares 最小二乘
Least absolute 最小一乘
Quantile regression 分位數回歸
Poisson regression 泊松回歸
Huber’s robust regression

3.多類分類器
4.多標簽分類器
5.秩,線性搜索加強的損失函數,圖匹配,半馬爾科夫模型等

14.minConf

minConf是一組Matlab函數,其最優化可微的實值多元函數,並且優化參數存在簡單的約束(s.t. simple constraints on the parameters)。在許多問題上,minConf中的這些函數比Matlab的fmincon函數求解問題更有效。同時minConf中的函數可以求解更大數量變量的問題,並且它使用的直線搜索對一些常見的函數病態具有魯棒性。
函數:minConf_TMP(funObj,x,LB,UB,options)
即最小化下面的函數:

minxf(x)suject to LBxUB

例如

1.非負最小二乘 minw12||(Xwy)||2,s.t.w0
2.L1正則化的最下二乘 minw12||Xwy||2+λ||w||1 ,其可以轉換為 minw12||Xwy||2+λiw,s.t.w0 ,
3.帶有邊界約束的Logistic 回歸 minwilog(1+exp(y(i)wX(i,:)),s.t.1w1
4.對稱支持向量機(no bias或者正則化的bias): minα12αTAαα,s.t.0αC,Ai,j=yiyjK(xi,xj)使σ=1RBF
5.順序邏輯回歸 minw,γ(log(F(γ(y+1)Xw)F(γ(y)Xw)))
其中 F(x)=1/(e+exp(x)),<0<γ(1)<γ(2)<...<
6.核順序邏輯回歸
7.Graphical LASSO: minWlog|σ+W|,s.t.Wijλ ,其中W是正定矩陣。
8.關聯的條件隨機場(訓練使用偽似然):使用lsing勢能優化偽似然,s.t.邊是子模塊(並且因此最優的MAP可以通過graph cuts方法找到)
函數minConf_SPG(funObj,x,funProj,options)和
函數minConf_PQN(funObj,x,funProj,options)
求解下面的最小化問題:

minxf(x)suject to xX

例如
1. 單純性上的線性回歸: minW|Xwy|2,s.t.w0,w=1
2. Lasso回歸: minw|Xwy|2,s.t.iwitau
3.Lasso with Complex Variables: minw|Xzy|2,s.t.izitau ,其中z和y是復數,z表示復數模量。
4.Group-Sparse Linear Regression with Categorical Features: minw|Xwy|2,s.t.g|wg|tau ,其中X使用二值指示變量來表示一組分類特征,並且我們使用’groups’g依據最初的類別變量引誘稀疏。
5.Group-Sparse Simultaneous Regression: minW|XWY|2+λg|Wg|
6.Group-Sparse Multinomial Logistic Regression
7.Group-Sparse Multi-Task Classification
8.Low-Rank Multi-Task Classification
9.L_1,inf Blockwise-Sparse Graphical Lasso
10.L_1,2 Blockwise-Sparse Graphical Lasso
11.Linear Regression with the Over-Lasso
12.Kernelized dual form of support vector machines
13.Smooth (Primal) Support Vector Machine with Multiple Kernel Learning
14.Conditional Random Field Feature Selection
15.Approximating node marginals in undirected graphical models with variational mean field
16.Multi-State Markov Random Field Structure Learning
17.Conditional Random Field Structure Learning with Pseudo-Likelihood

13.rapidxml

快速的xml讀寫。使用方法參考博客:http://blog.csdn.net/wqvbjhc/article/details/7662931
或者rapidxml的幫助文檔

。。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM