李宏毅深度學習筆記-SVM支持向量機


什么是支持向量機?

image-20200610100532180

支持向量機有兩個特色:

  • 第一個是使用了Hinge Loss(折頁損失函數、鉸鏈損失函數)
  • 另一個是最厲害的地方,有個kernel trick(核技巧)

Hinge Loss+kernel trick就是支持向量機

機器學習三個步驟

image-20200610102623385

思考二分類任務,一個機器學習任務的解決過程有三個步驟

現在有一筆標注數據,\(\hat{y}\)用+1,-1表示,代表兩個類別。

step1:定義一個函數\(g(x)\),這個\(g(x)\)里有另外一個函數\(f(x)\)\(f(x)>0\)時output就是+1,\(f(x)<0\)時output就是-1。

step2:定義一個很理想的損失函數\(L(f)\),為\(g(x)\)在訓練集上犯的錯誤總和,\(\delta\)的意思是,當\(g=y\)時output=1,\(g \neq y\) 時output=0。

step3:由於損失函數不可微分,優化很困難,因此用一個近似的函數\(l(f(x^n),\hat{y}^n)\)替代\(\delta\)

\(l(f(x^n),\hat{y}^n)\)可以自己隨意定。

image-20200610104121003

橫軸是\(\hat{y}^n f(x)\) ,縱軸是loss,我們希望\(\hat{y}^n\)為+1時,\(f(x)\)越正,\(\hat{y}^n\)為-1時,\(f(x)\)越負,總體上希望\(\hat{y}^n f(x)\) 越大越好(同號)。原則上,\(\hat{y}^n f(x)\)越大,loss應該越小。

理想的損失函數為\(\delta(g(x^n)\neq \hat{y}^n)\),但是沒辦法微分:

  • \(\hat{y}^n f(x)\)是負數的話,loss為1
  • \(\hat{y}^n f(x)\)是正數的話,loss為0

近似的損失函數為\(l(f(x^n),\hat{y}^n)\) ,上圖縱軸就是\(l(f(x^n),\hat{y}^n)\)的值,\(l()\)可以選擇各種不同的函數

理想損失函數的圖像如上圖黑色線所示

Square Loss

image-20200610110015772

例如希望當\(\hat{y}^n=1\)時,\(f(x)\)越接近於1,\(\hat{y}^n=-1\)時,\(f(x)\)越接近於-1,這個就是均方誤差,可以寫成\(l(f(x^n),\hat{y}^n)=(\hat{y}^nf(x^n)-1)^2\)

  • \(\hat{y}^n=1\)變為\((f(x^n)-1)^2\),意味着\(f(x^n)\)越接近1越好。

  • \(\hat{y}^n=-1\)變為\((-f(x^n)-1)^2=(f(x^n)+1)^2\),意味着\(f(x^n)\)越接近-1越好。

\(l(f(x^n),\hat{y}^n)\)的變化如上圖紅色曲線,這個是不合理的,說過\(\hat{y}^n f(x)\)越大,loss應該越小。

Sigmoid+Square Loss

image-20200610132245254

Sigmoid函數用一個\(\sigma\)表示,可以寫成式子\(l(f(x^n),\hat{y}^n)=(\sigma(\hat{y}^nf(x))-1)^2\)

  • \(\hat{y}^n=1\)時變為\((\sigma(f(x))-1)^2\),意味着\(\sigma(f(x))\)接近於1越好。

  • \(\hat{y}^n=-1\)時變為\((\sigma(-f(x))-1)^2=(1-\sigma(f(x))-1)^2\),意味着\(\sigma(f(x))\)接近於0越好。

\((\sigma(\hat{y}^nf(x))-1)^2\)的圖像為藍色曲線

Sigmoid+cross entropy

image-20200610141852433

之前說過在logistic回歸里不會使用Square Loss作為loss,而是使用交叉熵。交叉熵的意思是分布\(\sigma(f(x))\)和分布ground truth之間的差異,那么目標就是最小化交叉熵。

交叉熵損失的式子為:\(\large l(f(x^n),\hat{y}^n)=ln(1+exp(-\hat{y}^nf(x)))\)

這個式子是不是合理的?

是合理的:

\(\hat{y}^n\)乘上\(f(x)\)接近於無窮大時,\(exp(-\hat{y}^nf(x))=0\),那么\(ln(1+0)=0\)\(\hat{y}^nf(x)\)越大,損失越小

\(\hat{y}^n\)乘上\(f(x)\)接近於負無窮大時,\(exp(-\hat{y}^nf(x))\)為無窮大,那么\(ln(1+無窮大 )\) 還是無窮大

交叉熵的圖像是上圖綠色的線,上圖里對Loss除了\(ln(2)\)(不會影響最優解),除以\(ln(2)\)可以讓交叉熵損失變為ideal 損失的上界。想法就是既然沒辦法直接最小化ideal 損失,那就最小化它的上界交叉熵損失/\(ln(2)\) ,進而間接最小化ideal 損失。

Square Loss和cross entropy的對比

現在可以知道為什么使用cross entropy而不是Square Loss作為損失函數

如果把\(\hat{y}^nf(x)\)從-2移到-1,對sigmoid函數來說:

  • sigmoid+square error的變化很小,照理說在值非常負的時候,要有很大的梯度,要趕快調整值,但使用square error發現,調整值對total loss影響不大,沒有太多回報,以至於不想調整非常負的值

  • sigmoid+cross entropy的變化很大,調整值可以得到回報,就會很樂意把非常負的值往正的地方推。

所以使用cross entropy更容易訓練

hinge loss

image-20200611204920242

hinge loss是一個很特別的式子,寫成\(\large l(f(x^n),\hat{y}^n)=max(0,1-\hat{y}^nf(x))\)

  • 如果\(\hat{y}^n=1\),loss 函數就是\(max(0,1-f(x))\),只要\(1-f(x)<0\),即\(f(x)>1\),那么loss就是0

  • 如果\(\hat{y}^n=-1\),loss 函數就是\(max(0,1+f(x))\),當\(1+f(x)<0\),即\(f(x)<-1\),loss為0

對一個正例來說,如果\(f(x)>1\),那么\(f(x)\)就是一個正確的值

對一個負例來說,如果\(f(x)<-1\),那么\(f(x)\)是一個正確的值

把hinge loss畫出就像上圖紫色線,會發現只要\(\hat{y}^n f(x)>1\),loss就已經是0了,而且根據step1得到的函數就已經能夠分類的比較正確了(\(\hat{y}^n\)\(f(x)\)同向,\(\hat{y}f(x)>0\))。但在hinge loss看來還不夠好,\(0<\hat{y}^n f(x)<1\)那一段損失還是大於0,這促使機器在那一段讓\(\hat{y}^n f(x)\)大於1。

為什么max里是1?

是1的話,hinge loss才會是ideal loss的一個合適的上界,用其他值的話可能聯系不緊密。所以我們最小化hinge loss,就可能可以間接最小化ideal loss。

hinge loss和cross entropy 對比

最大的不同在於對已經分類正確的樣本的態度,如果把\(\hat{y}^n f(x)\)從1挪到2

  • 對cross entropy 來說損失會下降,那么cross entropy就會想要更好,讓\(\hat{y}^n f(x)\)變得更大進而減少loss
  • 對hinge loss來說及格就好,只要\(\hat{y}^n f(x)>1\)就結束

在實際應用上這兩個損失差別沒有很顯著,有些時候可以看到hinge loss略勝一籌,但也沒有很多。hinge loss有一個優勢是不太在意離群值,學習的結果比較魯棒,因為及格就好就不會有太大反應。

Linear SVM

什么是線性SVM

image-20200611214831126

step1:

現在的函數是線性的,為\(\large f(x)=\sum\limits_{i}w_ix_i+b\),把1看成\(x_0\),式子可以變為\(\large f(x)=\sum\limits_{i}w_ix_i+bx_0\)把這個式子看成是兩個向量\(\begin{bmatrix} w \\ b \\ \end{bmatrix},\)\(\begin{bmatrix}x \\ 1 \end{bmatrix}\)的內積,最后就是\(w^Tx\)。在SVM里就說\(f(x)>0\)時屬於哪一個class,\(f(x)<0\)時屬於另外一個class。

step2:

SVM使用了hinge loss作為損失函數,通常還會加上一個正則化項。這個hinge loss是凸函數,\(\large l(f(x^n),\hat{y}^n)=max(0,1-\hat{y}^n f(x))\)很像ReLU激活函數,而L2的正則化也是一個凸函數,把兩個凸函數疊加起來仍然是凸函數

step3:

如果損失函數是凸函數,那么在梯度下降時,不管初始值在哪里,都可以達到最優點。hinge loss在某些點不可微(菱菱角角的地方),把很多不可微的凸函數疊起來就會變成上圖紫色曲線一樣,有很多菱菱角角的地方。但這不是大問題,比如講ReLU的時候,有不可微的點,但是可以做梯度下降。

step1的函數不是一定要線性的,只不過線性有很多好的特性,不是線性的也是可以用梯度下降學習的,所以SVM是有deep版本的。在做深度學習的時候,不是用交叉熵損失,而是用hinge loss,那么就是deep版本的SVM。

logistic和線性SVM的差別

唯一的差別是損失函數,線性SVM是hinge loss,logistic回歸是交叉熵損失。

使用梯度下降訓練SVM

image-20200612101652829

雖然大多數時候,我們不是用梯度下降來學習SVM,但是的確用梯度下降也是可以的。 有一個用梯度下降訓練SVM的方法叫做Picasso。

假如損失函數為\(L(f)\),用的hinge loss,梯度下降只要損失函數能微分就可以用。

\(w_i\)做偏微分,\(w_i\)只跟\(f(x)\)有關,\(\large \frac{\partial f(x^n)}{\partial w_i}=x_i^n\)

\(l(f(x^n),\hat{y}^n)\) 是hinge loss函數,長得跟ReLu很像,圖像如上圖右邊紫色線(\(\hat{y}^nf(x^n)\)為橫坐標),\(f(x)\)的值取決於現在的model \(w\)是多少。

  • 如果\(1-\hat{y}^nf(x^n)>0\),那么model作用在紫色線左邊斜線部門,對\(f(x^n)\)的微分為\(-\hat{y}^n\)

  • 在紫色線右邊部分,對\(f(x^n)\)的微分為0

\(L(f)\)\(w_i\)的偏微分為上圖最下方式子,\(\large -\delta(\hat{y}^nf(x^n)<1)\hat{y}^n\)取決於model現在的參數是什么, 可以寫為\(\large c^n(w)\),然后使用梯度更新參數。

image-20200612123959628

平常的SVM公式

把hinge loss用\(\large \epsilon^n\)替換,\(\large \epsilon^n=max(0,1-\hat{y}^nf(x))\),只是換了一下符號,目標是最小化total loss。

不考慮最小化這件事,條件\(\begin{matrix} \epsilon^n \geq 0 \\ \epsilon^n \geq1-\hat{y}^nf(x) \\ \end{matrix}\) \(\neq\)\(\epsilon^n=max(0,1-\hat{y}^nf(x))\)),如果max條件里最大的是0,前一個條件下可以取1,2......(理論上可以取大於等於0的任何值),顯然\(\epsilon^n\)取值不同。

但考慮最小化后,條件\(\begin{matrix} \epsilon^n \geq 0 \\ \epsilon^n \geq1-\hat{y}^nf(x) \\ \end{matrix}\) \(=\)\(\epsilon^n=max(0,1-\hat{y}^nf(x))\)),因為加了最小化條件,所以\(\epsilon^n\)是所有可能取值里最小的。

例如:

  • \(\epsilon^n=max(0,1-\hat{y}^nf(x))\)條件下,\(\epsilon^n=0\),意味着 \(0 > 1-\hat{y}^nf(x))\),那么\(\begin{matrix} \epsilon^n \geq 0 \\ \epsilon^n \geq1-\hat{y}^nf(x) \\ \end{matrix}\)應該取\(\epsilon^n \geq 0\),取最小值就是0

  • \(\epsilon^n=max(0,1-\hat{y}^nf(x))\)條件下,\(\epsilon^n=1-\hat{y}^nf(x)\),意味着\(0 < 1-\hat{y}^nf(x))\),那么\(\begin{matrix} \epsilon^n \geq 0 \\ \epsilon^n \geq1-\hat{y}^nf(x) \\ \end{matrix}\)應該取\(\epsilon^n \geq1-\hat{y}^nf(x)\),最小值是\(\epsilon^n=1-\hat{y}^nf(x)\)

上圖下面紅框的式子就是我們熟悉的SVM,告訴我們\(\hat{y}^n\)\(f(x)\)要同號,相乘后要大於等於1(一個間隔),但是間隔是軟的,有時候沒辦法讓\(\hat{y}^nf(x) \geq 1\),那么把間隔放寬一點變成\(1-\epsilon^n\)\(\epsilon^n\)(松弛變量)必須大於等於0,\(< 0\)是把間隔變大,我們的目的是變小。

最后變成,要最小化的目標函數,加上一些約束條件(\(\epsilon^n\)的約束)。這是一個二次規划問題(最小化、最大化的同時有約束條件)。

SVM的核方法

image-20200612134527203

Kernal方法里,最容易困惑的地方是要先明白實際上找出來的權重是所有數據的線性組合。一般證明的方法都是用拉格朗日乘子法(利用拉個朗日對偶性)。這里用另一個角度證明。

之前說過可以用梯度下降來最小化SVM,計算出梯度為\(\large \sum\limits_{n}c^n(w)x_i^n\),權重更新式子為\(\large w_i \leftarrow \eta \sum\limits_{n}c^n(w)x_i^n\)。假設有\(w\)有k維,更新的式子如上圖左下方所示。

寫成向量形式,\({\bf{w}}=\begin{bmatrix} w_1\\w_2\\ \vdots \\ w_k \\ \end{bmatrix}\)\({\bf{x^n}}=\begin{bmatrix} x_1^n\\x_2^n\\ \vdots \\ x_k^n \\ \end{bmatrix}\)\(\large {\bf{w}}\leftarrow {\bf{w}}-\eta \sum\limits_n c^n({\bf{w}}){\bf{x}^n}\)

假設\({\bf{w}}\)的初始化是一個0向量,那么每次更新的時候,都是加上所有數據的線性組合,那么最后解出來的\(w\)

就是\({\bf{x^n}}\)的線性組合。

\(\large c^n(w)=\frac{\partial l(f(x^n),\hat{y}^n)}{\partial f(x^n)}\),使用hinge loss時,如果作用在max=0的區域,那么微分\(\large c^n(w)\)就是0,而往往微分算出來就是0,也就是不是所有的\({\bf{x^n}}\)都會被加到\({\bf{w}}\)里去。那么最后解出來\({\bf{w}}^*\),線性組合的權重可能是稀疏的,可能很多的數據對應的\(\alpha^*=0\),而\(\alpha^* \neq 0\)的數據點\({\bf{x^n}}\) 就是支持向量。

不是所有的點都會被選為支持向量的,只有少數的點,所以SVM相較於其他方法是魯棒的。像logistic選的是交叉熵損失,就沒有稀疏的特性,交叉熵損失在每個地方的微分都不等於0,解出來的\(\alpha^*\)就不會是稀疏的。

只有支持向量才會對參數有影響,其他數據點對model沒有任何影響。

image-20200612144429164

\(w\)寫成是數據點的線性組合,最大的好處是可以使用核技巧。想法是這樣的,我們知道\(w\)是數據點的線性組合,寫成矩陣形式就是\(w={\bf{X} }{\bf{\alpha}}\)\({\bf{X}}=({\bf{x^1,x^2,...,x^N}})\),這里的每個\({\bf{x}}\)都是一個向量,\({\bf{\alpha}}=\begin{bmatrix} \alpha_1 \\ \alpha_2 \\ \vdots \\ \alpha_N \end{bmatrix}\)

那么\(f(x)={\bf{w^T x}}\)可以改寫為\(f(x)={\bf{\alpha}^T}{\bf{X}^T}{\bf{x}}= \begin{bmatrix} \alpha_1 & \alpha_2 & \cdots & \alpha_N \end{bmatrix} \begin{bmatrix} {\bf{x^1 \cdot x\\ x^2 \cdot x \\ \vdots \\ x^N \cdot x}} \end{bmatrix}=\sum\limits_n \alpha_n ({\bf{x^n \cdot x}})\)

\(f(x)\)怎么算,把\(\bf{x}\)代進來,和數據集里的每一個數據\(\bf{x^n}\) 做內積,在求和\(\alpha_n\)的乘積和。如果使用的是hinge loss,那么\(\alpha^n\)就是稀疏的,所以只要和支持向量做計算就可以了,不會和所有數據點做內積。

\({\bf{x^n \cdot x}}\)寫成一個函數\(K({\bf{x^n,x}})\)表示內積,這個函數就是核函數。

image-20200612154655549

step1是寫成把\({\bf{x^n,x}}\)代進核函數,再乘以\(\alpha_n\)的乘積和的形式,這個model里未知的是\(\alpha_n\)

在step2和3,就是找一組最好的\(\{\alpha_1^*,...,\alpha_n^*,...,\alpha_N^*\}\)來最小化損失函數L

損失函數為\(\large L(f)=\sum\limits_n l(f(x^n),\hat{y}^n)=\sum\limits_n l(\sum\limits_{n'} \alpha_{n'}K(x^{n'},x^n),\hat{y}^n)\)\(l()\)函數里的兩個input是\(f(x^n)\) (step1的函數)和target \(\hat{y}^n\)

看損失函數的式子可以知道,我們現在不需要知道向量\({\bf{x}}\),只需要知道\({\bf{x}}\)和另外一個向量\({\bf{z}}\)的內積,或者說只要知道核函數就可以做所有的優化。並不需要去知道\(x^{n'},x^n\)長什么樣子,只需要知道\(K(x^{n'},x^n)\)的值是什么,能算出來就行。

核技巧不只是局限在SVM上,logistic的函數也是\(w\)和數據的線性組合,所有也有基於核技巧的logistic回歸。線性回歸也可以用同樣的方法,所以也有基於核技巧的線性回歸。

image-20200612161134899

怎么使用核技巧?

之前講過使用線性的模型有很多的限制,比如要對input的特征做特征轉換之后才可以讓線性模型處理。在神經網絡里就用了好幾個隱藏層在做特征轉換。

假設現在有一筆二維的數據,要先對它做特征轉換,再使用線性SVM。假設特征轉換結果是\(\phi(x)=\begin{bmatrix} x_1^2 \\ \sqrt{2}x_1x_2 \\ x_2^2 \\ \end{bmatrix}\),即想要考慮\(x_1,x_2\)之間的關系。現在核函數\(K(x,z)\),是計算\(x,z\)經過特征轉換后的向量內積,最簡單的算法是先把\(x,z\)代到特征轉換函數里,變成新的特征后,再計算內積,算出來的結果如上圖右下方。

計算公式可以簡化,\(\phi(x) \cdot \phi(z)=(x \cdot z)^2\),所以說對\(x,z\)做特征轉換再做內積,等同於在原來特征空間上先做內積再平方。這招有時候會有好處,有時候直接使用核函數計算會比先做特征轉換再做內積快。

image-20200612163659134

舉個例子:

\(x,z\)現在都是高維向量,做特征轉換是投影到更高維的平面,在更高維平面里會考慮所有特征兩兩之間的關系。假設原始\(x,z\)是k維,那更高維的維度是\(k+C_k^2\)

如果使用核函數,可以很容易計算\(\phi(x)\)\(\phi(z)\)的內積,就是計算\(x,z\)的內積(k個元素相乘)再取平方。

如果先做特征轉換再做內積,由於維度很高,計算量會比核函數的大。

Radial Basis Function Kernel (徑向基函數核)

image-20200612193156053

\(K(x,z)\)等於\(x\)\(z\) 的距離乘上\(-\frac{1}{2}\),再取exp。式子在衡量\(x,z\) 的相似度,越像核函數的值越大,\(x=z\) 的話值為1,完全不一樣則值為0。

\(K(x,z)\)也可以化成兩個高維向量做內積的形式,其實這兩個高維向量是無窮多維,把一個\(x\)轉到無窮多維再做內積,根本做不到,但是先求\(x\)\(z\) 的距離再乘上\(-\frac{1}{2}\)取exp則可以計算。

為什么徑向基函數核相當於兩個無窮多維向量的內積?

\(exp(-\frac{1}{2}||x-z||_2)\),化為\(C_xC_zexp(x\cdot z)\)\(x\)的2范式用\(C_x\)表示(只與x有關),\(z\)的2范式用\(C_z\)表示(只與\(z\)有關),對\(exp(x\cdot z)\)做泰勒展開得到上圖展開后的式子。

  • \(C_x C_z\)可以看成是兩個只有一個維度的向量的內積
  • \(C_xC_z(x\cdot z)\)可以看成\(x\)乘上\(C_x\)\(z\)乘上\(C_z\)再做內積
  • \(x ,z\)內積的平方相當於兩個高維向量的內積,高維向量會考慮\(x,z\)內兩兩維度的關系,如果是三次方,就會考慮三三維度的關系

現在把屬於\(x\)的向量都串起來(如上圖紅色線),把屬於\(z\)的向量也串起來,因為泰勒展開后有無窮多項,所以串起來后\(x,z\)各自都有無窮長的向量,最后這兩個無窮多向量做內積的結果就是核函數的結果。

所以使用RBF核,相當於在無窮多維的平面上做事情,可以想象是很容易過擬合的。

Sigmoid Kernel

image-20200612200448765

核函數為\(K(x,z)=tanh(x\cdot z)\),只與\(tanh(x\cdot z)\)是哪兩個高維向量內積的結果,自己用泰勒展開了解。

在用\(x\)做test代到\(f\)里面的時候,其實是在計算與所有訓練集數據\(x^n\)核函數的值再乘上\(\alpha_n\) 之和。用Sigmoid Kernel的時候,就是\(x\)與所有訓練數據\(x^n\)的內積做tanh()再乘上\(\alpha_n\)之和。

Sigmoid Kernel的\(f(x)\)可以想成是一個只有一層隱藏層的神經網絡。把\(x\) input,會跟所有的\(x^n\)做內積再通過tanh()。就像是一個神經網絡的input是\(x\),隱藏層權重是\(x^n\) ,通過激活函數tanh()得到output,再乘上\(\alpha_n\) ,最后加起來得到\(f(x)\)

注意,上圖的\(\alpha_n\),n是下標

神經元里每一個權重就是一個數據點,有幾個支持向量就有幾個神經元。

自己設計核

image-20200612202149212

既然有了核技巧,那就可以直接設計核函數\(K(x,z)\),可以不用理會\(x,z\)長什么樣子,只要\(K(x,z)\)里代入\(x,z\)能得到一個值,這個值代表\(x,z\)轉換后的高維向量的內積。

什么時候

假設\(x\)是有結構的數據,比如是一個sequence,如果sequence長度不一樣,那就不容易表示為一個向量,也就不知道\(x\)長什么樣子,也不知道\(\phi(x)\)是什么樣子。

但是可以直接定核函數,核函數就是投影到高維以后的內積(被投影向量長度乘以投影長度),所以核函數往往就是一個類似相似度的東西。如果今天定義一個函數,可以評估\(x,z\)的相似度,就算\(x,z\)是有結構的數據,比如樹形結構,就算是序列也沒關系,只要知道如何計算兩個樹形結構數據或兩個序列的相似度,就可以把相似度作為核來使用。

不是所有相似度函數都可以作為核,但是有一個叫Merce’ theory可以告訴你哪些函數是可以的,所以有辦法驗證核函數是否會有兩個高維向量做內積。

在語音上,假設分類對象是音頻段,每個音頻段用向量序列表示。每個音頻段長度不一樣,所以向量序列的長度可能不一樣。比如一個分類任務是給你一段聲音訊號,判斷說話者的情緒,可能分成高興、生氣等等之類的。想用SVM,但是一段聲音訊號沒辦法直接用一個向量來描述,怎么辦呢?不管聲音訊號變成向量后是什么樣子,你都可以直接定核\(K(x,z)\) ,來表明 input 一段聲音訊號\(x\)和另外一段聲音訊號\(z\)后,output應該是什么。

怎么定兩個sequence之間的kernel?

reference在上圖最下方。

SVM的其它變種

image-20200612204513282

現在SVM還有很多變種,比如用SVM做回歸(SVR) ,回歸是要求model的output和target越近越好,那做SVR的話,進入到target某一個距離里面loss就為0。

Ranking SVM被用在要考慮的東西是一個排序list的時候。

One-class SVM是說,正例的樣本自稱一類,負例就散布在其他地方。

深度學習和SVM的區別

image-20200612204921480

深度學習的隱藏層可以看成是特征轉換,輸出層可以看成是線性分類器。

SVM也是做類似的事情,先用一個核函數,把特征轉換到高維空間上,再在高維空間使用線性分類器,線性分類器的損失函數一般使用hinge loss。

事實上,SVM的核是可學習的,但是沒辦法學得像深度學習那樣多,可以做的事情是有好幾個不同的核,把不同核結合起來,中間的權重是可以學習的。當只有一個核時,SVM就像是只有一層隱藏層的神經網絡,把核做線性組合時,就像是有2層隱藏層的神經網絡。


免責聲明!

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



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