現在還有必要對SVM深入學習嗎?
30年河東,30年河西,svm沒落,DL那麼火,無論是開發還是發表論文。
具有完備理論的SVM還值得深入研究,並且閱讀libsvm的源代碼嗎?
竊以為,學東西,特別是科學知識不應以「火不火」作為評價標準。而是應以點帶面、舉一反三的建立學術知識體系,簡單單純來說也就是積累。不要看現在SVM被DL蓋過了風頭就產生「學了會沒用,會吃虧」的念頭。實際上,SVM整套體系,不論是其理論基礎還是具體實現(如經典的libsvm和liblinear),都有其研究的價值。萬變不離其宗,萬事萬物的「道」是相通的,說不準以後會在解決某些問題的時候借鑒到曾經研究過的SVM相關思想或實現技巧,彼時,便會產生融會貫通之暢快感。
謝邀。從兩個方面回答這個問題。
首先是SVM,SVM的理論已經相當成熟完備,而且包含了大量機器學習相關的基礎知識和經驗技巧。從概念層次的限行可分,支持向量,到求解過程的對偶問題,KKT條件,coordinate ascend求解法,還有基於primal的trust region的解法,可以上升到無限維的kernel method,這一系列的知識都是扎紮實實的乾貨,另外也有很多大牛指出SVM可以看作是一類perception,其實和神經網路也是同根,學會了對理解神經網路也是大有用處。鑒於眾多大牛前面說了許多,這裡不再贅述。
下面理性地批判一下DL,現在DL大熱是事實,我也參與過一些DL的項目,CNN的模型看著漂亮效果好,乍一看上去很完美,可是實際上這樣的繁榮中也暗藏了很多地泡沫。我在公司也面試過一些自稱「有CNN背景,用ImageNet訓練做Transfer Learning」的面試者,結果連LeNet的大概架構是什麼樣也畫不出來,dropout的權重關係不了解,batch normalization只知道有效,更別說一些對CNN更深入地理解了。面對這樣「自信」的面試者,我會覺得沒有和他繼續聊下去的必要。
總結一下,SVM一定要懂,要搞清楚裡面的原理。至於DL,如果要研究,請深入研究,這個方向的人現在也不少,學不好會死得更慘。你知道原版的svm稍微改一改形式變成最小二乘svm會發生什麼嗎?你知道用ls-svm的式子東調一下西調一下,就既能做聚類,又能等價遞歸神經了網路嗎?你知道svm串起來也可以叫deep learning嗎?svm理論嚴密,效果顯著,結果可預測,除了kernel選擇上 trick了一點以外,整體是很受控,可解釋的,必須學必須學必須學啊。。。
補個圖吧,腦洞已開,想要還有其他:
------------
啊呀今天好多同學捧場, 那就擴充一下答案秀一些看得見的東西吧:
對於一個太極類似圖形, 藍色是帶雜訊的,綠色是原始的, 我們希望用PCA把適合的信息挖出來, 也就是--去噪!
那麼我們常用的線性PCA干出來是----這樣的:
而Kernel PCA干出來, 是這樣的... 高下立判有木有.
如果剛剛那個太簡單, 那換一個吧, 也是常見的一個數據其實.
如果直接用一個平面把他們分割開來, 是這樣的:
然而機智的人類知道, 這玩意明明是倆環套在一起了啊,怎麼能這樣分....然而數學上怎麼表達這倆環? 換一種情況怎麼辦? 都很捉急啊.
於是看看, kernel spectral clustering 分出來是這樣的:(當然了參數得設好, 電腦才沒那麼機智知道應該怎麼分咧....鬼知道萬惡的人類想要什麼~~). 這特么也能分出來?
--------------------------------
說著說著突然好像發現自己在說的不是SVM了囧囧的....各位看官勿噴.....kernel大法好, kernel大法好!!!!!Reference: "Learning with primal and dual model representations: a unifying picture": plenary talk ICASSP 2016, Shanghai
我隔三差五會拿svm 出來溫習一遍,這裡面有很多有價值的內容,hinge loss、拉格朗日對偶、核方法,每一塊拿出來都能應用到別的地方。
SVM之所以成為面試必考題,是因為對機器學習相關數學有很好體現,除了概率部分(所以另外還會常考貝葉斯)。神經網路不是很好考察你的數學理解,考SVM就讓你沒法裝懂,一問就原形畢露了,照妖鏡一般。謝邀,上一個年代,svm大火,nn沒落,很多人或許會問「有必要學習nn嗎」。
現在因為cnn,神經網路大火,大家又開始問要不要學svm了。
對了,大家都玩svm的時候,有一個人默默堅持研究nn,那個人就是Hinton。
可是你不覺得,svm這個東西很有趣嗎~
雖然現在都不用知道原理,各種庫一大堆……有必要學。
從理解的角度,你至少要弄懂它的原理,知道它的長處和短處。在有需要時候,可以把它與別的模型結合,取長補短。(我兩個月前剛乾過這事兒)
從應用的角度,你至少要學會LibSVM、LibLINEAR的使用。對於一些不太複雜的分類任務,用這兩個庫可以迅速、有效地解決問題。
至於要不要去研究LibSVM的代碼,就完全看你需要了。
svm長的這麼優美,你不學看看也好啊
君子不器
如果題主之前沒有機器學習的基礎,想最快速度弄出一個原型或者發paper,問SVM值不值得深入學,我說不值得。因為現在DL的各種框架能滿足題主零基礎快速上手的需求。
如果題主有志於在機器學習界有所建樹,建議先把統計學、最優化、泛函等基礎打好。演算法都是相通的,相信題主到時候不會再有「某一種演算法值不值得深入學習」的困惑。
首先,贊同了諸葛曉的回答,學不學習只在於你處於什麼樣的初衷。
無論是DL,還是SVM/樸素葉貝斯/Adaboosting/KNN演算法等,都對於分類演算法有著各自的優缺點,即便是我們聽說很火的神經網路,也會存在一些問題:需輸入的參數過多,輸出結果難以解釋,不能觀察之間的學習過程。而SVM的優勢就在於:
一、 可以解決小樣本情況下的機器學習問題。
二、 可以提高泛化性能。
三、 可以解決高維問題。
四、 可以解決非線性問題。
五、 可以避免神經網路結構選擇和局部極小點問題。
所以,如果是想建立整套的學習機制,擴大自己的學術眼界,那麼是有必要的。畢竟現在的機器學習時代並不是一定就要用機器深度學習來解決通用的問題。
------------------面試必考必問到的,所以還是自己啃吧-----------------------
求解SVM的那套拉格朗日對偶方法幾乎算是入門級的優化演算法了。
我就不說DL里的各種方法了我推薦一個博客讓你系列學習一下SVM吧
SVM入門(一)至(三)Refresh
一個系列好像有十篇左右,我周末花了一天看了一下,也就是出於興趣地看了一下,發現作者說的頭頭是道,很多數學上的推理證明,在作者的講解下變得是如此的自然而然,這個時候,你就會發現自己不是在學習SVM,而是在跟著解決一個問題,我覺得最重要的是享受這個過程,而不是說掌握了SVM那幾個約束條件,然後自己記住偽代碼(當然,已經沒幾個人能實現SVM),libsvm已經都幫你實現好了,至於你要選擇什麼核函數,C是多少,那就是自己慢慢調參的過程了,沒什麼技術含量。
我現在再想起SVM我也忘了約束條件時什麼,偽代碼講了什麼,但我自信能夠想起怎麼解決問題的思路,這不就是學習後最應該剩下的東西嗎?
這是很有必要的,因為深入理解SVM的過程可以複習很多知識點。不僅要理解拉格朗日對偶、常用Kernel、Hinge Loss以及SMO等概念,更要理解這些常用的東西是這麼來的。我就我目前的理解簡單說一下這個過程。
1.最大間隔超平面思想(hyperplane)
這是SVM最基礎的原理,這個原理非常直覺,但是如何解釋為什麼要拉大間隔(margin)呢?因為這裡假設存在Gaussian-like的誤差等等。繼續說這個margin,大家可以看看這個問題:感知機(perceptron)和支持向量機(svm)是一種東西嗎? 如果不是那他們的區別和關係是什麼? 我認為最大間隔超平面的思想讓SVM追求的是一個固定的、間隔最大的線(或者超平面),但是一般的感知機演算法的分割線卻是隨機的(即使數據集是線性可分的)。
(在上圖中任何一個都可能是PLA演算法的結果,但是只有最右圖片是線性SVM的結果)
除此之外,這種最大間隔超平面的思想還有很多用武之地,比如說SVDD演算法[1]。
相關知識點:最大間隔超平面、感知機(PLA)、SVDD
2.計算最大間隔的方法
其實論距離只要計算最小的 就可以了,但是我們計算的都是最大的 。為什麼是這樣子做?為什麼要做內積?為什麼有1/2?這個點相對簡單,從凸優化的角度就可以理解了。但是分母的1怎麼來的?其實專門有一篇文章證明這個1怎麼來的。
這裡SVM的公式為——
相關知識點:凸優化
3.凸二次規劃 Convex QP
其實做到這步SVM就結束了,上圖的公式解幾個點的數據集是沒問題的。但是為了處理大量的數據必須要引入QP演算法。雖然QP演算法在SVM中已經被SMO代替了,但是QP還是凸優化中的一個重要內容——QP演算法要滿足什麼條件才可以用?QP演算法的最基本組成是什麼?QP慢在哪兒?
SVM的各部分分別對應上圖QP模型的哪個部分?
相關知識點:凸QP問題
4.拉格朗日對偶
學過SVM的都知道要做一次拉格朗日對偶,但是為什麼要這樣子做?因為目前處理的模型嚴重依賴數據集的維數d,如果維數d太高就會嚴重提升運算時間。
拉格朗日對偶事實上把SVM從依賴d個維度轉變到依賴N個數據點。考慮到在最後計算時只有支持向量SV才有意義,所以這個計算量事實上比N小得多。
計算拉格朗日對偶的過程首先考察了拉格朗日乘子的知識,然後又要討論一些Strong Duality和KKT條件的問題。對於拉格朗日互補條件的討論是確定支持向量SV的關鍵一步。現在的SVM如下
對了,這裡還沒有討論為什麼要做干一次拉格朗日,這裡有沒有發現加上拉格朗日條件的SVM非常像正則化?相關問題有:SVM中的正則化和損失是什麼? - 機器學習 - 知乎
相關知識點:維數、拉格朗日乘子、對偶、KKT條件、正則化
5.Kernel核技巧
談到SVM就要提到各種核,但是核方法和SVM是完全正交的概念。具體的討論可以見這個問題機器學習有很多關於核函數的說法,核函數的定義和作用是什麼? - 數據挖掘 - 知乎
核的作用一方面讓SVM可以在高維上對數據集線性可分,另一方面可以提高對內積的計算速度。前面說到SVM通過對偶操作讓模型依賴N個數據而不是數據的d個維度,但是在計算內積的時候還是間接的接觸到了d維度——線性核就可以把這個計算複雜度降低到O(d)
核技巧的使用完全脫離了SVM的範疇:SVM的核函數如何選取? - kernel(核函數) - 知乎 如果有時間還可以推導一下為什麼高斯核可以把處理無限維度數據。SVM中,高斯核為什麼會把原始維度映射到無窮多維? - 機器學習 - 知乎
相關知識點:核方法、線性變換
6.Soft-Margin Hinge Loss
剛才討論的數據都是可分的,對於實在不可分的數據要加上其他鬆弛約束。
這裡看見的max函數畫在圖上就是我們說的Hinge Loss了,和0-1 Loss比起來它有什麼優點?因為0-1是離散的不方便優化啊,而且Hinge Loss剛好是0-1 Loss的一個上界。畫出來就是這樣——
額不好意思啊圖拿錯了,上圖就是hinge(鉸鏈),其實你看看函數是差不多的
相關知識點:Hinge Loss、0-1 Loss
7.SMO演算法
雖然上面討論了QP演算法的兩種優化
[1] https://www.researchgate.net/publication/226109293_Support_Vector_Data_Description
其實我個人很反對那些xx過時已經沒必要學習的觀點,就像spark出來了,很多人就說hadoop過時沒必要學習一樣,很多時候新理論或者工具對舊的不是推翻,而是補充,繼承和發展,svm裡面包含了很多重要的知識點,對偶,優化,hinge loss,表示理論,kernel,每一種都是核武器啊,比如hinge loss可以用在神經網路上用subgradient方法來訓練,L2 regularization + error function的形式可以運用kernel。。。。。。其實沒準哪天某位牛人在svm基礎上發展出一套更有效的理論和工具可以有更好的效果,就像神經網路也曾被人們拋棄,而現在重放光輝一樣,好的東西,從來都不會過時。
非常贊同 @魏秀參的回答
萬變不離其宗,萬事萬物的「道」是相通的,說不準以後會在解決某些問題的時候借鑒到曾經研究過的SVM相關思想或實現技巧
-- 答主可能更加專註於技術本身.
先簡單說一下, 以後有時間再詳細答.
----------------------------------------------------
SVM不應該僅僅是一個演算法, 對它的研究促進了統計學習理論與優化諸多方向的進展:
1. 分類問題中經驗過程最小化的學習速率;
2. Convex surrogate對於學習速率的影響 (特別是非least square loss function, 比如Lipschitz-continuous);
3. 非參數方法(特別是kernel methods)在分類問題中的應用 (RKHS approximation efficiency是learning theory中很常見的問題);
4. Non-smooth function的(online/stochastic)優化技巧.
老美女也是美女,女神再蹉跎也還是女神
SVM的數學推導和證明非常清晰,很有借鑒價值,學習SVM對其他的研究也很有幫助,以此了解SVM的大概原理還是很有必要的。
但是現在的SVM的局限性很大,換句話說,潛力已經挖盡了,因此並不適合做深入了解,了解到鬆弛變數和核函數這種層次就足夠了。
而且現在的NN實際上跟上個世紀的NN差別還是非常大的,現在的NN是以稀疏性為根本做的理論。大多數商業企業的分析,還是線性回歸,logistics 回歸,加相關性分析;
互聯網公司之所以多用關聯分析和協同過濾,是因為這個好理解、好上手…
DL,其實實際產業應用不多,且偏向於圖片模式、語言文字模式的識別—這玩意短期內我看不到商業應用的變現點。
如果你把svm用好了,那也是數據分析屆的大牛人了。
對了,還要說一點,面經和職經是不一樣的。面經,你要看考官個人喜好。
有的。libSVM。
很多公司都在用這個。。先把SVM做好了,再說別的好嘛=
推薦閱讀: