21

支持向量機和神經網絡有什麼不同? 線性SVM是否是相同的NN,並且對於非線性可分問題,NN使用添加隱藏層和SVM使用不斷變化的空間維度?支持向量機和神經網絡

+0

SVM代表什麼? – jotadepicas

+1

支持向量機(https://en.wikipedia.org/wiki/Support_vector_machine) – CoyBit

回答

40

這個問題有兩個部分。第一部分是「這些方法學到的功能的形式是什麼?」對於NN和SVM,這通常是相同的。例如,單個隱層神經網絡使用與SVM完全相同的模型形式。那就是:

給定輸入矢量x,輸出爲: 輸出(X)= sum_over_all_i weight_i * nonlinear_function_i(X)

通常,非線性函數也將有一些參數。所以這些方法需要學習應該使用多少個非線性函數,它們的參數是什麼,以及所有weight_i權重值應該是多少。

因此,SVM和NN之間的區別在於他們如何決定這些參數應該設置爲什麼。通常當有人說他們使用的是神經網絡時,他們意味着他們試圖找到使參數相對於一組訓練樣例最小化均方誤差的參數。他們也將幾乎總是使用stochastic gradient descent優化算法來做到這一點。另一方面,SVM試圖最小化訓練誤差和「假設複雜度」的一些度量。所以他們會找到一組符合數據的參數,但在某種意義上也是「簡單」的。你可以把它想像成Occam的機器學習剃刀。用於SVM的最常見的優化算法是sequential minimal optimization

這兩種方法之間的另一個很大的區別是隨機梯度下降不能保證在使用NN實現採用它的方式時找到最優參數集。但是,任何像樣的SVM實現都將找到最佳的參數集。人們喜歡說神經網絡陷入局部極小值,而SVM則不會。

11

運行簡單out-of-the-box comparison between support vector machines and neural networks若干流行迴歸 - 和分類-數據集演示了實際差異(無參數選擇):SVM變得非常慢的預測器,如果正在產生了許多支持向量而神經網絡預測速度要高得多和模型尺寸要小得多。另一方面,對於SVM,訓練時間要短得多。關於準確性/損失 - 儘管存在上述神經網絡的理論缺陷 - 兩種方法都是相同的 - 特別是對於迴歸問題,神經網絡通常勝過支持向量機。根據您的具體問題,這可能有助於選擇正確的模型。

+0

您能詳細解釋有關非線性可分解問題的其他部分嗎? – user492238

+2

一般來說,支持向量機和神經網絡都可以解決非線性問題。 「非線性程度」由NN中的#個隱藏節點(或層)和SVM中的#個支持向量控制。 SVM在訓練過程中自動進行調整,而對於NN開發人員必須定義#個隱藏單元/拓撲結構(儘管自動確定最佳拓撲結構時存在幾種或多或少有用的啓發式方法,但最好的方法是通過交叉參數進行參數選擇,驗證) – Fluchtpunkt

+0

對於NN,訓練時間不一定較慢:考慮使用n> 10^6數據點的非常大的數據集,使用一個集羣在幾周內訓練某種系統。神經網絡可以使用批量梯度下降(即O(n))進行訓練。 SVM訓練算法是O(n^2),這對於這樣的大數據集是不可接受的。 – Phob

20

神經網絡是啓發式的,而SVM理論上是建立的。 SVM保證朝向PAC中的最佳解決方案(可能近似正確)收斂。例如,對於兩個線性可分類,SVM將直接在兩個類的最近點之間的中點繪製分離超平面(這些成爲支持向量)。一個神經網絡可以畫出任何分離樣本的線,這對於訓練集是正確的,但可能不具有最佳泛化屬性。

因此,即使對於線性可分問題,NN和SVM也不相同。

在線性不可分類的情況下,SVM和NN都將非線性投影應用到高維空間中。在神經網絡的情況下,這是通過在隱藏層中引入額外的神經元來實現的。對於SVM,使用內核函數的效果相同。核函數的一個簡潔特性是計算複雜度不隨維數增加而增加,而對於神經網絡它顯然隨着神經元的數量而增加。

+0

複雜性不僅僅在學習階段纔會升高,還是聲明有效對於預測階段? –

+1

該聲明也適用於預測階段。你基本上是在分離超平面的法向量和你想在高維空間中分類的向量之間做標量積。但是,不是明確地做,而是像在學習階段一樣依靠內核功能。 –

+0

神經網絡又如何呢?它是否隨着神經元的數量而上升(當然在預測階段)? –

-1

其實他們完全相同。唯一的區別是在他們的標準實現中選擇激活函數和正則化等,這些顯然彼此不同。另外,我還沒有看到用於神經網絡的雙重公式,但是SVM正朝着原始方向發展。

+0

「它們完全相同」你能爲此發佈一些參考嗎? –

1

支持向量機和神經網絡具有與感知器相同的建立塊,但支持向量機也使用核技巧通過平移將維數從2增加到3,例如Y =(x1,2,...^2,y1,2 ...^2),它可以用直線分隔線性不可分的平原。想要一個像這樣的演示,並問我:)