back to index

ML Lecture 20: Support Vector Machine (SVM)


link |
00:00.000
方法之間呢,其實如果你很熟悉整個Machine Learning的原則的話,不同的方法之間,它們其實是非常像的,所以其實就算你沒有辦法把所有方法都學過,其實也是一法通萬法通,就Machine Learning的方法其實非常非常多的,我覺得你其實並不需要很積極盈盈的把所有的方法都覺得你應該要學過一遍,掌握幾個大原則,其實你就可以了解大部分的方法。
link |
00:26.500
Support Vector Machine是什麼呢?Support Vector Machine呢,它有兩個特色,第一個呢,是它用了Hinged Loss,等一下我們會講Hinged Loss是什麼,另外一個呢,是我覺得它最厲害的地方,它有一個Kernel Tree,把Hinged Loss加上Kernel Tree,就是Support Vector Machine,就是SVM。
link |
00:45.500
我們現在講一下Hinged Loss是什麼,回到我們在開學的時候講過的Binary Classification的問題,我們講過說在理想上Binary Classification應該要怎麼做呢?在理想上我們期待說,我們知道說一個Machine Learning的Solution,它往往就有三個Step,在Binary的Classification裡面,第一個Step是,我們想要第一個Function,G of S。
link |
01:14.500
這個G of S呢,它裡面有另外一個Function,F of S,當F of S大於0的時候,它的Output就是正1,代表某一個Class,當F of S小於0的時候,它的Output就是負1,代表另外一個Class。
link |
01:30.500
那我們現在的Training Data呢,我們是Supervisor Buffer,所以每一筆Data都有一個Label,White Hat,我們現在假設White Hat就用正1和負1來表示,分別代表兩個不同的Class,而之前在講Logistic Regression的時候,我知道說我們在講White Hat的時候,我們是用1跟0表示,那這邊要用正1和負1來表示比較順。
link |
01:53.500
那你知道說用正1和負1來表示,用1跟0來表示是講一件事情,講的是同一件事情,就只是朝三暮四的差別而已。
link |
02:01.500
但是這邊如果用正1和負1的話,等一下在寫式子的時候是會比較順,所以這邊用正1和負1,只要記得它的差別就好。
link |
02:10.500
那Loss Function呢,理想上,一個最理想的Loss Function,就是寫成像下面這個樣子。
link |
02:18.500
當今天呢,這個G of X的Output跟White Hat不一樣的時候,Machine就得到一個Loss1,如果一樣的時候就沒有Loss。
link |
02:31.500
所以一個很理想的Loss Function是Summation over我們今天所有的Training Data,然後呢,對每一筆Training Data都代進G of X裡面看它的Output是多少,它可能Output正1也可能Output負1。
link |
02:45.500
接下來看它的Output跟White Hat是一樣的還是不一樣,如果是不一樣的,你就得到一個Loss1,反之呢就是0。
link |
02:53.500
我這邊用Delta加一個括號的意思就是,裡面這件事情如果為真的話,Delta這個Function的Output就是1。
link |
03:00.500
所以如果G不等於Y,那Delta的Output就是1。
link |
03:04.500
所以我們現在的Loss就變成,G在Training Set上總共犯了幾次錯誤,那我們當然希望它犯的錯誤是越小越好。
link |
03:13.500
但是在今天這個Task裡面,你要做Optimization,你要用第三步找一個好的Function,這件事情變得有點困難,因為你的Loss是不可為分的。
link |
03:24.500
這個東西是沒有辦法為分的,所以你根本沒有辦法用Gradient Descent來解它。
link |
03:31.500
怎麼辦呢?我們把這個Delta用另外一個Approximate的Loss來表示,直接Minimize這個Delta做不到。
link |
03:40.500
所以我們不直接Minimize這個Delta,我們Minimize另外一個Loss Function,我這邊寫成小寫的L。
link |
03:48.500
那至於這個Loss Function可以長什麼樣子,你就可以自己隨便定了。
link |
03:55.500
這是我們的G,它裡面有一個F of X,這個橫軸啊,這個圖上的橫軸啊,是Ym hat乘上F of X。
link |
04:06.500
那我們會希望說,因為這個Ym hat可以是正一,也可能是負一。
link |
04:16.500
那麼希望如果Ym hat是正一的時候,F of X要越positive越好。
link |
04:23.500
Ym hat如果是正一的話,F of X要越大越好。Ym hat如果是負一的時候,F of X應該要是越負越好。
link |
04:31.500
所以整體說來,你會希望Ym hat乘上F of X兩者相乘以後,它的值越大越好。
link |
04:39.500
它們要是同項,它們要是同號的,它們兩個乘起來要越大越好。
link |
04:43.500
所以今天原則就是,如果我們把縱軸當作是Loss的話,原則就是越往右,Ym hat乘F of X越大,Loss就應該要越小。
link |
04:56.500
那我們剛才講的理想的狀況是什麼樣子呢?我們剛才講的理想的狀況是,假設今天Ym hat跟F of X它們是反向的。
link |
05:07.500
它們相乘以後,你得到的值是負數的話,那你得到的Loss就是1。
link |
05:14.500
反之如果它們是同項的,你的Loss就是0。這個是理想的狀況,但這件事情是沒辦法為分的。
link |
05:22.500
那我們現在做一個proximation,我們把delta用L來取代,我們把delta用L來取代。
link |
05:30.500
這個縱軸就是L的值,你可以選各種各式各樣不同的function來當作L這個function。
link |
05:41.500
舉例來說,你可以說我現在Loss的定法是,我希望當Ym hat等於1的時候,F of X跟1越接近越好。
link |
05:51.500
Ym hat等於負1的時候,F of X跟負1越接近越好。這個是square loss。
link |
05:58.500
那square loss它其實可以寫成這個樣子,square loss的這個Loss可以寫成Ym hat乘上F of X減1的平方。
link |
06:08.500
為什麼呢?如果我們今天Ym hat代1的話,這個function就變成F of X減1的平方。
link |
06:15.500
如果Ym hat代負1的話,這個function就變成負F of X減1的平方。
link |
06:22.500
那負F of X減1的平方可以寫成,因為它在平方裡面,所以可以把負號拿掉,F of X加1的平方,也就是F of X減負1的平方。
link |
06:32.500
所以當你寫這個式子的時候,你就意味著如果Ym hat等於1的時候,F of X要跟1越接近越好。
link |
06:39.500
Ym hat等於負1的時候,F of X要跟負1越接近越好。
link |
06:43.500
square loss的function,你把這個function畫出來,它對Ym hat乘以F of N的變化是寫成這樣子。
link |
06:52.500
但是這個東西是不合理的,我們一開始在講binary classification的時候,我們就講過,你用square loss是不合理的。
link |
07:01.500
從這個圖上你又可以更明確的看出它的不合理性,因為我們不希望說Ym hat跟F of N乘起來很大的時候,居然有一個很大的Loss。
link |
07:11.500
另外一個是sigmoid加square loss,這邊我們sigmoid function就用一個sigma來表示。
link |
07:20.500
我們希望Ym hat等於1的時候,F of Xn趨近於1等於負1的時候,F of Xn趨近於0。
link |
07:28.500
這個式子可以寫成這個樣子。
link |
07:32.500
為什麼呢?如果你把Y hat N代1的話,那沒有問題,很直覺的就是希望這個output跟1越接近越好。
link |
07:42.500
代負1的話,變成sigma of F of sigma of負F of X減1的平方。
link |
07:50.500
sigma of負F of X是什麼呢?
link |
07:54.500
如果你了解這個sigmoid function的特性的話,你把裡面的值取一個負號,其實就是1減sigma of F of X。
link |
08:04.500
我想這個不會想一下的話應該可以體會,減1的平方。
link |
08:09.500
然後這個1可以消掉,所以就變成sigma of F of X的平方。
link |
08:15.500
總之你寫這個式子的意思,就是希望F of X通過sigma function以後,如果它的答案是1,它就要接近1,如果答案是負1,它就要接近於0。
link |
08:26.500
這個式子寫出來是藍色的這一條線。
link |
08:33.500
我們之前有講過說,其實你在做logistic regression的時候,你不會用square loss當作你的loss,因為它的performance不好。
link |
08:41.500
我們之前應該也有實地操作過,你不會用square loss,其實你會用cross entropy。
link |
08:49.500
如果用cross entropy的話,在logistic regression的時候,我們其實真正用的是cross entropy。
link |
08:55.500
cross entropy的意思我們其實之前講過,就是你的sigma of F of X代表了一個distribution,代表一個distribution。
link |
09:08.500
你的ground truth是另外一個distribution,兩個distribution之間的cross entropy,就是你要去minimize的loss。
link |
09:16.500
如果你回頭過去把square loss的function寫出來的話,你會發現,其實這個function可以寫成log一加exponential負y n hat F of X。
link |
09:30.500
這邊我們就不做多餘的推導,這比較麻煩,自己回去推一下就知道了。
link |
09:36.500
這個式子是不是合理的呢?它其實是合理的。你想想看,當你今天的y n hat乘上F of Xn,趨近於無窮大的時候,
link |
09:48.500
當它趨近於無窮大的時候,exponential負的無窮大是0,那就變成log一加0,得到的結果是0。
link |
09:56.500
所以當這一項趨近於無窮大的時候,這個sigma一加cross entropy這樣的loss function,它是綠色的這一條,它會趨近於0。
link |
10:09.500
如果你今天y n hat F of X它的負很大的時候,exponential裡面會是正的很大,再加上1,它的值會很大,再取log以後,它還是無窮大。
link |
10:22.500
log只能跟exponential消掉,如果exponential這裡面是無窮大的話,得到的結果還是無窮大,所以你得到的值是無窮大。
link |
10:29.500
所以今天這一項是這一條線。
link |
10:35.500
我在這邊我特別偷偷把它除了一個log2,你對loss function除一個constant,不會影響你最後找出來的解。
link |
10:46.500
我們這邊偷偷除了一個log2,為什麼呢?因為我們要偷偷除log2以後,你可以讓它變成剛才ideal的loss的upper bound。
link |
11:00.500
也就是說,我就可以claim說,我們雖然沒有辦法minimize ideal的loss,就黑色這一條線,但是我們可以去minimize它的upper bound,希望minimize upper bound就可以順便minimize這個ideal的loss function。
link |
11:18.500
那我們可以比較一下這兩條曲線,你可以比較這兩條曲線,你就可以比較了解說,為什麼我們之前會選擇用cross entropy,而不是用square error來當作我們的loss function,在我們做logistic regression的時候。
link |
11:35.500
可以想想看,我們今天如果我們把ylhat,所以f of x,從-2移到-1的時候,如果是square error,它的變化很小,如果是sigmoid加cross entropy,它的變化就非常大。
link |
11:58.500
那所以對sigmoid的這個function來說,它在這種極端的case,在你的值非常的negative的時候,在值非常negative的時候,照理說應該要有很大的規定,你應該趕快調整你的值。
link |
12:13.500
但是實際上不是如此,因為在值很大的時候,當你在這一項,ylhat乘上f of x非常negative的時候,你調整你的值,對你最後的total loss影響不大。
link |
12:28.500
所以就會變成說,對這個sigmoid加square loss的case來說,就算是它調整了它negative的值,它也沒有辦法得到太多的回報,所以它就會不想要調整那些非常negative的值。
link |
12:41.500
那對這個cross entropy來說,它的努力是可以得到回報的,所以它就會很樂意把原來很negative的值,把它往正的地方推。
link |
12:52.500
所以我們用cross entropy的時候,在實作上,你會比square error還更容易training,所以我們在做logistic regression的時候,都是用cross entropy。
link |
13:01.500
那hinged loss呢?hinged loss它是寫成一個很特別的式子,它寫成這樣,它說我們的loss function是maximum,其實我們剛才在講zero-sharp learning的時候,其實是有看到類似的function。
link |
13:16.500
我們這邊寫成maximum括號0跟1減y-hat f of x,0跟1減y-hat f of x。今天如果y-hat代1,那loss function就是max0跟1減f of x。
link |
13:36.500
那什麼樣的狀況下,今天我們會有一個zero的loss呢?因為這邊是max0跟1減f of x,所以這個function最小值是0。
link |
13:49.500
什麼時候會是達到這個function最小值,會達到loss是0最完美的狀況呢?只要1減f of x小於0就行了。
link |
13:58.500
1減f of x小於0的時候,這個loss的值就會是0,也就是說只要f of x大於1的時候,這個loss就會是0。
link |
14:09.500
那如果今天y-hat等於負1的時候,這個loss function會寫成0跟1加f of x的max。
link |
14:16.500
那要讓loss等於0,我們就是要讓1加f of x小於0,也就是要讓f of x小於負1。
link |
14:23.500
所以今天你用pinch loss做training的時候,你想要讓Machine做到的事情,什麼時候Machine會覺得它的loss是0,它已經做到完美的case了呢?
link |
14:33.500
它如果今天對一個positive的example來說,f of x大於1的時候,就是完美的case。
link |
14:39.500
對一個negative example來說,它的f of x小於負1的時候,它就是一個完美的case。
link |
14:46.500
它的值不用太大,你把f of x變成2,loss也不會比較小,你把f of x變成負2,loss也不會比較小。
link |
14:54.500
它只要大過1跟小於負1就可以了。
link |
14:59.500
如果你把hinged loss畫出來的話,它長得像是這個樣子,它是紫色的這一條線。
link |
15:09.500
那你會發現說呢,在紫色的這一條線上,在這一段,只要y-hat乘上f of x大於1的時候,就已經夠好,你的loss就已經是0,再更大都沒有幫助。
link |
15:24.500
但是今天如果y-hat f of xn是positive的example,是positive的,是positive還不夠好。
link |
15:32.500
就是如果今天y-hat跟f of xn是同項,那machine在做classification的時候,它已經可以得到正確的答案。
link |
15:40.500
根據我們剛才定出來的step1定出來的function,它已經可以得到正確的答案。
link |
15:45.500
但是對hinged loss來說,這樣還不夠好。
link |
15:49.500
它會說你只得到正確的答案還不夠,你要比正確的答案還要好過一段距離,這個距離就是margin。
link |
16:01.500
也就是說,當你今天y-hat乘上f of x,當y-hat乘上f of x還沒有大於1的時候,你其實還是會有penalty的,促使這個machine讓y-hat乘上f of x大於1。
link |
16:14.500
那你可能會問說,為什麼這邊是1呢?
link |
16:20.500
你可以想想看,如果這邊是1的話,hinged loss才會是ideal loss的一個type的upper bound。
link |
16:29.500
如果你用其他值的話,它可能就不是一個那麼tight的upper bound。
link |
16:38.500
所以hinged loss跟我們剛才看到的cross entropy一樣,它也是一個我們ideal loss function的upper bound。
link |
16:45.500
所以我們也會期待說,我們可以minimize hinged loss,然後就可能可以得到minimize ideal loss function的效果。
link |
16:58.500
那如果我們比較hinged loss跟cross entropy的話,你會發現說,它們最大的不同來自於它們對待已經做得好的example的態度。
link |
17:10.500
今天如果我們把y-hat乘上f of x從1挪到2,對cross entropy來說,你可以得到loss的下降。
link |
17:23.500
所以cross entropy它會想要好還要更好。如果你今天已經可以把y-hat乘上f of x的值做得夠大,
link |
17:33.500
cross entropy它有動機要讓它的值更大,因為這樣還可以減少loss。
link |
17:39.500
但是對hinged loss來說,如果你採用的是hinged loss function,它是一個及格就好的loss function。
link |
17:47.500
所以今天只要你的值大過你的margin的時候,就結束了。
link |
17:55.500
OK,就這樣子了,它就不會想要再做得更好。
link |
17:59.500
Nathan問說,在實作上到底hinged loss跟cross entropy它們的performance有什麼樣的差別呢?
link |
18:04.500
在實作上的差別可能沒有你想像的那麼顯著。
link |
18:10.500
有一些時候我們會看到hinged loss可以略勝cross entropy,但其實也沒有贏那麼多。
link |
18:17.500
那你採用hinged loss的時候有一個好處是它比較不害怕outlier,
link |
18:22.500
比較不害怕outlier,那你認出來的結果會是比較robust的。
link |
18:27.500
那這個等一下我們在講kernel的時候會比較明顯的看到這個結果。
link |
18:32.500
那如果你看這個hinged loss跟cross entropy的差別的話,這個cross entropy就好像是說,
link |
18:42.500
你現在期末可能有很多科目要讀,但是你就只想要拼死讀一科而已,
link |
18:48.500
你想要把某一科考到100分,其他如果你唸不起來了,你就會放棄,
link |
18:53.500
因為你最後可能就被惡意了。
link |
18:55.500
那hinged loss它會顧全所有的科目,它所有的科目都考到及格就好了,
link |
19:00.500
所以它其實是會有歐趴的。
link |
19:02.500
所以如果今天你有outlier的時候,hinged loss會給你比較好的結果,
link |
19:06.500
cross entropy會給你比較差的結果。
link |
19:09.500
等一下我們在別的角度來看這個問題的時候可能是會更清楚的。
link |
19:13.500
好,那現在什麼是linear的SVM?
link |
19:17.500
linear的SVM是說我們現在的function就是linear,
link |
19:22.500
我們現在的f of x就是feature x裡面的每一個feature xi乘上它的對應的位wi,
link |
19:37.500
summation起來再加上b。
link |
19:40.500
那我們可以把這件事情看作是兩個vector的inner product,
link |
19:45.500
其中一個vector是model的parameter w跟bconcatenate起來的一個vector,
link |
19:52.500
另外一個vector是feature的vector,x這個x的feature的vector跟econcatenate起來的結果。
link |
20:00.500
如果你把這兩個vector做inner product的話,那你就會得到左邊這個式子。
link |
20:05.500
所以在等一下以下的說明裡面,我們把w跟b串起來的那個vector,
link |
20:10.500
直接就用w來表示,
link |
20:12.500
這個東西是你的model的參數,是要透過training data把它找出來的。
link |
20:16.500
下面的x跟econcatenate起來的結果,我們就當作是一個新的feature,
link |
20:21.500
你就想像每一個feature下面都有concatenate的e,
link |
20:24.500
這樣你就可以把bias這一項省略掉。
link |
20:26.500
所以一個function,你就寫成w的transpose乘上x,
link |
20:32.500
或w跟x的inner product。
link |
20:35.500
那在SVM裡面,你的這個f長這個樣子,
link |
20:40.500
然後你就說f大於0的時候是屬於某一個class,
link |
20:43.500
f小於0的時候是另外一個class。
link |
20:45.500
那如果是loss function呢?如果是loss function的話,
link |
20:48.500
在SVM裡面,它的特色就是它採用了hinge loss這個loss function。
link |
20:54.500
那通常呢,你還會加上一個這個regularization的term。
link |
20:59.500
那這個loss function呢,它是一個convex的function。
link |
21:04.500
為什麼呢?因為我們知道hinge loss的loss function,
link |
21:08.500
它長得是這個樣子,就像IOU的那個activation function的形狀。
link |
21:13.500
所以它是一個convex的function。
link |
21:16.500
而這項L2的regularization,它也是一個convex的function。
link |
21:23.500
所以你所有的loss都是convex的function,
link |
21:26.500
regularization也是convex的function。
link |
21:29.500
當你把這些convex的function疊加起來以後會發生什麼事情呢?
link |
21:33.500
其實你可以很輕易的證明說,
link |
21:35.500
把convex function疊加起來仍然是convex function。
link |
21:40.500
所以你今天的loss function其實就是一個convex的function。
link |
21:47.500
好,如果是convex的function的話呢,
link |
21:49.500
你做歸根descend就很簡單了,
link |
21:51.500
你不管從哪個地方做initialization,
link |
21:53.500
你最後找出來的結果呢,都會是一樣。
link |
21:56.500
那你可能會問說,這個東西它在某些點不可為啊,對不對?
link |
22:04.500
它有這種稜稜角角的東西,
link |
22:07.500
它有這種稜稜角角的東西,
link |
22:09.500
你這個hinged loss,它在某些點是不可為的,
link |
22:14.500
那你把很多這些不可為的convex的function疊起來,
link |
22:18.500
它就長這樣,它還有很多稜稜角角的地方,
link |
22:21.500
感覺不是每個位置都不可為,
link |
22:23.500
都都是可為的。
link |
22:25.500
但是這個不是什麼大問題,
link |
22:27.500
這個其實可以做的,
link |
22:28.500
你想想看,我們之前在講deep learning的時候,
link |
22:31.500
你有IOU的exclamation function,你有mixed out network,
link |
22:35.500
它們表面上看起來也是不可為的,
link |
22:38.500
但是其實呢,你都是可以用歸根descend去做optimization,
link |
22:42.500
所以今天這個case也一樣,
link |
22:44.500
我們可以用歸根descend去做optimization,
link |
22:47.500
那等一下我們會看看呢,
link |
22:49.500
怎麼做這件事情。
link |
22:53.500
好,其實呢,如果我們比較logistic regression跟linear SVM的差別,
link |
23:00.500
它唯一的差別是什麼?
link |
23:01.500
它唯一的差別就只是我們怎麼定loss function,
link |
23:04.500
你用Hinged loss就是linear SVM,
link |
23:08.500
你用Cross entropy loss就是logistic regression,
link |
23:13.500
而這個function,它沒有必要一定要是linear,
link |
23:17.500
只是它如果是linear的話,有很多好的特質,
link |
23:21.500
但是如果它不是linear的,也ok,
link |
23:24.500
你也可以用歸根descend來check,
link |
23:26.500
所以SVM是可以有deep的版本的,
link |
23:31.500
我這邊列一個reference給大家參考,
link |
23:34.500
當你今天在做deep learning的時候,
link |
23:37.500
你不是用Cross entropy當作你的minimization的對象,
link |
23:42.500
當作你的loss function,而是改用Hinged loss的話,
link |
23:44.500
你其實就是有一個deep版本的SVM,
link |
23:46.500
所以你其實沒有必要說什麼,
link |
23:49.500
我做的是deep learning,我做的是SVM,
link |
23:52.500
它們其實就是可以是一樣的東西,
link |
23:55.500
背後的精神其實都是可以相通的,
link |
23:59.500
再來的問題就是,
link |
24:01.500
怎麼用歸根descend來learn SVM呢?
link |
24:04.500
我知道你傳統上聽到的方法都不是用歸根descend來learnSVM,
link |
24:07.500
但SVM確實是可以用歸根descend來做training的,
link |
24:12.500
有一個用歸根descend來train SVM的方法叫做Picasso,
link |
24:17.500
我這邊忘了附reference,我之後再附上去,
link |
24:21.500
總之SVM是可以用歸根descend train,
link |
24:24.500
怎麼train呢?
link |
24:26.500
我們現在的loss function長這個樣子,
link |
24:29.500
然後它是一個Hinged loss,
link |
24:31.500
然後歸根descend就很簡單,
link |
24:33.500
你只要能夠對它做微分就好了,
link |
24:35.500
我們只要能夠對我們的model裡面的某一個位Wi,
link |
24:39.500
對這個summation裡面的某一個loss可以做偏微分,
link |
24:43.500
我們就可以做歸根descend,
link |
24:46.500
這個偏微分的值是什麼呢?
link |
24:49.500
Wi只跟f of x有關,
link |
24:54.500
所以我們可以把這一下拆成partial f分之partial loss function,
link |
25:04.500
我們先用f對loss function做偏微分,
link |
25:07.500
再乘上用w對f做偏微分,
link |
25:11.500
用w對f做偏微分的結果是很簡單的,
link |
25:16.500
因為我們知道f of xn就是一個linear的function,
link |
25:21.500
它是兩個vector的inner product,
link |
25:24.500
所以如果你用Wi對f做偏微分的話,
link |
25:28.500
那你得到的其實就是xn的第一個dimension的value,
link |
25:34.500
那前面這個用f對loss function做偏微分,
link |
25:38.500
它的解釋是怎樣呢?
link |
25:40.500
這個f它就是這個Hinged loss的loss function,
link |
25:44.500
這個Hinged loss的loss function,
link |
25:46.500
它長的是ilu這個樣子,
link |
25:50.500
它有兩個operation的region,
link |
25:52.500
它可以是operate在0是max的case,
link |
25:58.500
它可以是operate在1減y乘上f of x是max的case,
link |
26:03.500
如果它operate在0是max的case,
link |
26:05.500
就是這個region,
link |
26:07.500
它operate在1減y f of x是max的case,
link |
26:10.500
它就是這個region,
link |
26:14.500
那什麼時候會operate在哪一個case呢?
link |
26:17.500
這個是depend on你現在的model w是多少,
link |
26:22.500
也就是說假如你現在的1減y f of x,
link |
26:27.500
1減y hat f of x大於0,
link |
26:29.500
這個f of x的值取決於你現在的model w,
link |
26:32.500
取決於你現在w的值是多少,
link |
26:35.500
假設這個東西大於0,
link |
26:38.500
那就是y hat乘上f of x小於1這樣,
link |
26:44.500
當y hat乘上f of x小於1的時候,
link |
26:47.500
你的model作用在這個region,
link |
26:50.500
作用在這個region,
link |
26:52.500
把它對f做為分,
link |
26:53.500
你得到的值就是-y hat,
link |
26:56.500
那在另外一個case,
link |
26:58.500
因為就是值就是0,
link |
27:00.500
所以做為分以後還是0這樣,
link |
27:03.500
所以今天的為分值就有兩個可能,
link |
27:05.500
如果今天是作用在這個region,
link |
27:07.500
就得到這個為分值,
link |
27:08.500
作用在這個region就得到這個為分值,
link |
27:11.500
所以為分的值,
link |
27:14.500
你把這一整項大L對w偏為分以後,
link |
27:19.500
你得到的值就是這個樣子,
link |
27:22.500
summation over all the training data,
link |
27:24.500
再看每一筆training data的y hat乘上f of x是不是小於1,
link |
27:29.500
如果是的話,
link |
27:30.500
這一項delta值就是1,
link |
27:32.500
那它這個1就會乘上y hat,
link |
27:35.500
就是乘上負的y hat,
link |
27:37.500
而這前面還會乘上一項這個,
link |
27:40.500
我寫錯了,
link |
27:41.500
這邊應該有一個上標n,
link |
27:43.500
這邊這一項應該就是x上標n下標i,
link |
27:46.500
x上標n下標i,
link |
27:48.500
前面這一項,
link |
27:49.500
dependent現在的參數是什麼,
link |
27:51.500
所以我們就把它寫成cn of w,
link |
27:54.500
所以你要update參數的時候,
link |
27:55.500
你就把wi減掉learning rate,
link |
27:58.500
乘上cn of w,
link |
28:00.500
乘上你的第二個feature裡面的di為,
link |
28:03.500
你就可以update你的參數wi,
link |
28:05.500
所以就這樣,
link |
28:10.500
所以SVM是可以用歸電descent來解的,
link |
28:17.500
所以如果你只是要寫linear的SVM的話,
link |
28:19.500
其實你用keras就可以秒做,
link |
28:22.500
你可能會說,
link |
28:23.500
這跟我平常看到的SVM不一樣,
link |
28:26.500
我知道平常看到SVM是什麼樣子,
link |
28:28.500
那我們現在把我講的hinge loss的function,
link |
28:33.500
變成你平常看到的SVM,
link |
28:35.500
你平常看到的SVM是怎麼樣呢,
link |
28:37.500
你平常看到的SVM是,
link |
28:39.500
我們現在把這個hinge loss,
link |
28:42.500
換成用一個notation,
link |
28:45.500
εn來取代它,
link |
28:48.500
然後我說εn就等於,
link |
28:52.500
0,1減yn hat乘上f of xn,
link |
28:58.500
上標n,
link |
29:00.500
1減yn hat乘上f of xn,
link |
29:02.500
跟0的max,
link |
29:04.500
我現在什麼都沒有做,
link |
29:06.500
我只是換了一下notation而已,
link |
29:09.500
我們現在的目標就是要minimize total loss,
link |
29:14.500
這一項,
link |
29:16.500
我其實可以有另外一個寫法,
link |
29:19.500
另外一個寫法是什麼呢,
link |
29:22.500
我寫成,
link |
29:23.500
你說我們要0跟1減yn hat f of x裡面,
link |
29:27.500
取大的那一個當作εn,
link |
29:30.500
所以εn它會大於0,
link |
29:32.500
也大於1減yn hat乘上f of x,
link |
29:35.500
那我可不可以寫成,
link |
29:37.500
這件事情其實就等於εn大於等於0,
link |
29:40.500
εn大於等於1減yn hat乘上f of x,
link |
29:45.500
假設我們不考慮這個loss,
link |
29:48.500
我們先無視上面這塊,
link |
29:51.500
你先無視上面這塊,
link |
29:53.500
無視上面這件事,
link |
29:55.500
這個紅框框,上面紅框框裡面的式子,
link |
29:58.500
等於下面紅框框裡面的式子嗎,
link |
30:02.500
給大家三秒鐘的時間想一下,
link |
30:06.500
你覺得它相等的同學舉手,
link |
30:10.500
好,手放下,
link |
30:11.500
你覺得它不相等的同學舉手,
link |
30:14.500
好,手放下,
link |
30:15.500
好像差距沒有很大,
link |
30:17.500
我們來想想看,
link |
30:20.500
這個εn它是0跟1減yn hat的max,
link |
30:26.500
然後我今天說εn可以大於0也可以大於它,
link |
30:30.500
但是它不見得是正好等於它們的max,
link |
30:33.500
它可以是它們的max加1加2加100萬,
link |
30:35.500
所以如果我這樣講的話,
link |
30:38.500
我們再問一下,
link |
30:39.500
你覺得上面跟下面這兩個式子,
link |
30:42.500
它們是一樣的嗎,
link |
30:43.500
你覺得它是不一樣的同學舉手,
link |
30:47.500
好,謝謝,
link |
30:48.500
手放下,
link |
30:49.500
其實人沒有變多這樣,
link |
30:52.500
其實它們是不一樣的,
link |
30:54.500
如果我們無視上面這個式子的話,
link |
30:57.500
這兩個式子是不一樣的,
link |
30:59.500
這兩個εn,
link |
31:01.500
一個符合上面這個式子的εn,
link |
31:04.500
跟符合下面這兩個框圈的εn,
link |
31:07.500
是不同的εn,
link |
31:08.500
它們是不同的值,
link |
31:09.500
所以上面跟下面這兩個式子好像是不一樣,
link |
31:12.500
但是這個只是表象上,
link |
31:14.500
就假設我們不考慮這個loss function的話,
link |
31:16.500
上下這兩個疑似是不一樣,
link |
31:18.500
我們這邊整理一下式子,
link |
31:20.500
把yn f of x移到左邊,
link |
31:23.500
x0移到右邊,
link |
31:24.500
所以變成yn hat乘上f of x,
link |
31:27.500
大於等於1減x0n,
link |
31:30.500
所以上面這兩個,
link |
31:33.500
上面跟下面是不一樣,
link |
31:34.500
但是今天重點就是,
link |
31:39.500
你今天加了minimize loss function l這件事情以後,
link |
31:48.500
上面這個式子跟下面這個式子,
link |
31:51.500
就會變得是一模一樣,
link |
31:56.500
為什麼呢?
link |
31:58.500
因為我們現在要去minimize l of f,
link |
32:07.500
所以你要選擇一個最小的εn,
link |
32:11.500
讓你的l能夠最小,
link |
32:15.500
雖然我們下面只有下constraint說,
link |
32:18.500
εn要大於等於0,
link |
32:21.500
εn要大於等於1減yn hat f of x,
link |
32:24.500
理論上它不需要正好等於0,
link |
32:26.500
它不需要正好等於1減yn hat f of x,
link |
32:28.500
它可以是任何值這樣,
link |
32:31.500
或者說舉個最簡單的例子,
link |
32:33.500
εn我大概帶一兆,
link |
32:36.500
帶一個無窮大,
link |
32:37.500
它就符合這個constraint了,
link |
32:39.500
εn隨便帶一個很大的值,
link |
32:41.500
它大於0,
link |
32:42.500
也大於它就符合這個constraint,
link |
32:43.500
它不需要等於它們兩個之間比較大的那一個,
link |
32:46.500
所以理論上這兩個東西是不相等的,
link |
32:48.500
εn你是帶任何一個很大的值,
link |
32:50.500
就符合下面這個constraint,
link |
32:51.500
但問題是我們現在要做的事情,
link |
32:54.500
是要去minimize l,
link |
33:00.500
當我們要做的事情是要minimize l的時候,
link |
33:02.500
我們就要選一個,
link |
33:04.500
我們就要想辦法讓εn越小越好,
link |
33:07.500
那當εn它的constraint是要大於等於0,
link |
33:10.500
跟大於等於1減yn hat f of x,
link |
33:12.500
那它最小的辦法,
link |
33:13.500
就是讓εn等於它們裡面最大的這個,
link |
33:16.500
所以加上我們的目標,
link |
33:18.500
要minimize total loss的時候,
link |
33:20.500
上面這個紅框框裡面的式子,
link |
33:22.500
會跟下面這個紅框框裡面的式子是一樣的,
link |
33:26.500
所以當我們把上面這個紅框框裡面的式子,
link |
33:30.500
轉成下面這個紅框框裡面的式子的時候,
link |
33:32.500
這個就是你所熟悉的SVM了,對不對?
link |
33:37.500
你所熟悉的SVM就是告訴我們說,
link |
33:40.500
這個yn hat乘上f of x,
link |
33:43.500
就yn hat跟f of x要是同號的,
link |
33:46.500
那它們相乘以後呢,
link |
33:47.500
要大於等於一個margin1,
link |
33:49.500
但是呢,這個margin是soft的,
link |
33:51.500
因為soft是軟的,
link |
33:52.500
有時候你沒有辦法滿足這個margin,
link |
33:55.500
沒有辦法讓yn hat乘上f of x大於等於1,
link |
33:58.500
那怎麼辦呢?
link |
33:59.500
你把你的margin稍微做一下放寬,
link |
34:02.500
把它減掉一個εn,
link |
34:05.500
這個εn會放寬你的margin,
link |
34:07.500
所以這個εn叫做slack variable,
link |
34:10.500
slack大概是鬆弛的意思,
link |
34:12.500
它可以讓你的margin變得比較鬆,
link |
34:15.500
但是這個鬆弛的ε,
link |
34:18.500
它絕對不能夠是負的,
link |
34:20.500
因為這個負的不符合它的目的,
link |
34:22.500
如果εn是負的的話,
link |
34:24.500
那你就是把margin變大,
link |
34:26.500
而不是把margin變小,
link |
34:27.500
所以這個εn呢,
link |
34:29.500
它必須要,它有一個constraint,
link |
34:31.500
它必須要大於等於零,
link |
34:34.500
那把這些事情合起來以後,
link |
34:38.500
你會有一個你要minimize的對象,
link |
34:42.500
再加上一些constraint,
link |
34:45.500
那這個formulation,
link |
34:47.500
它是一個quadratic programming的problem,
link |
34:51.500
那你就可以帶一個quadratic programming的solver,
link |
34:55.500
然後把它解出來,
link |
34:57.500
那其實你不見得要帶quadratic programming的solver來解,
link |
35:00.500
我們剛才看到說,
link |
35:01.500
SVM其實可以用gradient descent來解。
link |
35:06.500
好,我們講到這邊,
link |
35:07.500
我們先休息十分鐘,
link |
35:09.500
等一下再繼續講,謝謝。
link |
35:11.500
字幕由Amara.org社區提供
link |
35:42.500
好,我把滑鼠叫出來。
link |
35:48.500
好,這個是這樣子的,
link |
35:51.500
kernel map,你隨便google就有一大堆的東西,
link |
35:55.500
那在這一整套東西裡面,
link |
35:58.500
我認為最重要的一個,
link |
36:00.500
大家容易卡住的地方就是,
link |
36:02.500
要先說服你一下這件事情,
link |
36:04.500
要說服你說,
link |
36:06.500
實際上啊,我們找出來的weight,
link |
36:10.500
我們實際上找出來,
link |
36:12.500
可以minimize loss function的那個weight,
link |
36:14.500
我們寫作W hat,
link |
36:16.500
它其實呢,
link |
36:17.500
是我們的data的linear combination,
link |
36:21.500
這個W star,
link |
36:24.500
其實是summation over,
link |
36:27.500
所有的training data的vector point xn,
link |
36:31.500
然後呢,
link |
36:32.500
對所有的xn都乘以上一個weight,
link |
36:36.500
alpha上標star,下標n,
link |
36:39.500
也就是說,
link |
36:40.500
你找出來的model,
link |
36:42.500
其實就是你的data point的linear combination,
link |
36:46.500
一般說服你,
link |
36:47.500
這件事情的方法呢,
link |
36:49.500
都是做這個,
link |
36:51.500
用Lagrange multiplier,
link |
36:53.500
解一下剛才的那個式子,
link |
36:55.500
然後說服你這件事情,
link |
36:57.500
我這邊試著從另外一個角度來說服你,
link |
36:59.500
我們剛才說,
link |
37:00.500
我們可以用gradient descent,
link |
37:02.500
來minimize SVM,
link |
37:05.500
所以當我們算出來說,
link |
37:07.500
gradient descent的式子呢,
link |
37:09.500
就是長這個樣子,
link |
37:11.500
那這個是對Wi update的時候的式子,
link |
37:15.500
那對W1到Wk,
link |
37:18.500
假設現在W有k位update的式子呢,
link |
37:21.500
都是一樣的,
link |
37:23.500
唯一不一樣的地方,
link |
37:24.500
只是你會換這個,
link |
37:26.500
最後乘上去的這個value,
link |
37:30.500
在update第一位的時候,
link |
37:32.500
你乘上去的value,
link |
37:33.500
就是xn的第一位,
link |
37:35.500
在update第二位的時候,
link |
37:36.500
你乘上去的value,
link |
37:37.500
就是xn的第二位,
link |
37:38.500
在update第三位的時候,
link |
37:39.500
你乘上去的value,
link |
37:40.500
就是xn的第四位,
link |
37:41.500
那把他們全部合起來,
link |
37:42.500
把這邊W1到Wk串成一個vector,
link |
37:45.500
這邊x1上標n,
link |
37:48.500
到xk上標n也串成一個vector,
link |
37:51.500
那你得到的結果就是,
link |
37:53.500
每次你updateW的時候,
link |
37:55.500
你都是把W減掉eta,
link |
37:57.500
乘上summation over xn,
link |
38:00.500
乘上一個weight,
link |
38:04.500
這意味著什麼,
link |
38:06.500
這意味著假設,
link |
38:07.500
我們initialize的時候,
link |
38:08.500
你的W是一個zero vector,
link |
38:10.500
那你每次在updateW的時候,
link |
38:12.500
你都是加上一個data point,
link |
38:15.500
linear combination,
link |
38:16.500
所以最後得到的solution,
link |
38:18.500
你解出來的W,
link |
38:19.500
your gradient descent解出來的W,
link |
38:21.500
得到的結果呢,
link |
38:22.500
就是W的linear combination,
link |
38:26.500
那這個cn of W是什麼呢,
link |
38:32.500
這個cn of W是F對loss function的偏微分,
link |
38:40.500
那我們剛才講說,
link |
38:41.500
如果我們今天用的是hinged loss,
link |
38:44.500
如果我們是用的是hinged loss的話,
link |
38:46.500
hinged loss像ilu,
link |
38:47.500
它有兩個operation的region,
link |
38:49.500
如果它作用在max等於零的那個region的話,
link |
38:52.500
那它的這一項就會是零,
link |
38:56.500
所以當你在用hinged loss的時候,
link |
39:00.500
你用hinged loss的時候呢,
link |
39:02.500
你的這一項呢,
link |
39:04.500
往往都是零,
link |
39:05.500
也就是不是所有的xn都會被拿來加到W裡面去,
link |
39:12.500
所以你最後解出來的W star,
link |
39:15.500
它的這個linear combination的weight可能會是sparse,
link |
39:19.500
所謂linear combination的weight是sparse的意思是說,
link |
39:21.500
可能有很多的data point,
link |
39:24.500
它對應的alpha star值等於零,
link |
39:29.500
而那些值不等於零,
link |
39:32.500
它的alpha star不等於零的那些xn呢,
link |
39:35.500
它就是support vector,
link |
39:38.500
如果你alpha等於零,
link |
39:39.500
那你就一點作用都沒有,
link |
39:41.500
你對這個model呢,
link |
39:42.500
完全沒有影響力,
link |
39:44.500
你要alpha呢,
link |
39:45.500
是non-zero的,
link |
39:46.500
那你才會決定說你最後的model呢,
link |
39:49.500
你最後的parameter呢,
link |
39:50.500
長什麼樣子,
link |
39:52.500
而這些可以決定這個parameter長什麼樣子的data point,
link |
39:56.500
它們就叫做support vector,
link |
39:59.500
所以叫做support vector machine,
link |
40:01.500
那今天在data point裡面,
link |
40:03.500
不是所有的點都會被選作support vector,
link |
40:06.500
其實只有少數的點,
link |
40:08.500
少數的data point會被選作support vector,
link |
40:11.500
所以SVM相較於其他方法,
link |
40:13.500
它可能是比較robust的,
link |
40:16.500
你今天呢,
link |
40:17.500
你今天如果你的loss function,
link |
40:20.500
選的是cross entropy,
link |
40:23.500
你在做logistic regression選的是cross entropy,
link |
40:26.500
它就沒有sparse的這個特性,
link |
40:27.500
因為如果你看cross entropy的那個loss function,
link |
40:30.500
它在每一個地方為分都是不等於零的,
link |
40:33.500
它沒有為分等於零的地方,
link |
40:34.500
為分都是不等於零的,
link |
40:35.500
所以你今天你解出來的這個alpha呢,
link |
40:38.500
它就不會是sparse,
link |
40:39.500
如果你用hinged loss,
link |
40:40.500
你解出來的alpha就會是sparse,
link |
40:42.500
解出來alpha,
link |
40:43.500
sparse的意思就是說,
link |
40:44.500
今天那些不是support vector的data point,
link |
40:48.500
你把它從data base裡面remove掉,
link |
40:50.500
它對你的最後的結果是一點影響都沒有的,
link |
40:53.500
如果今天有一個奇怪的outlier,
link |
40:56.500
你只要不要把它選做support vector,
link |
40:58.500
它對你最後串出來的model,
link |
41:00.500
就不會有任何影響,
link |
41:01.500
而不像是其他的方法,
link |
41:03.500
如果你是用logistic regression,
link |
41:04.500
每一個data都count,
link |
41:07.500
每一個data,
link |
41:08.500
每一筆data對你最後的結果都會造成影響。
link |
41:11.500
好,那今天我們把w寫成是data point的linear combination,
link |
41:21.500
最大的好處就是我們可以使用等一下說的kernel的trick,
link |
41:26.500
這個想法是這樣,
link |
41:28.500
我們已經知道說w就是data point的linear combination,
link |
41:35.500
那我們可以把,
link |
41:37.500
本來我們w可以寫成這樣,
link |
41:39.500
這個w我們可以把它寫成說,
link |
41:41.500
我們把所有的data point S1到S大n排起來,
link |
41:44.500
排成一個matrix S,
link |
41:47.500
然後α就是一個vector,
link |
41:50.500
它裡面的值是α1,α2到αN,
link |
41:53.500
我們把這個matrix乘上這個vector,
link |
41:56.500
你就會得到Xn,
link |
41:58.500
X的這個column的linear combination,
link |
42:02.500
也就是matrix S乘上vector α,
link |
42:05.500
所以w可以寫成matrix S乘上vector α。
link |
42:11.500
當我們知道這件事情以後,
link |
42:13.500
當我們知道w可以這麼寫以後,
link |
42:15.500
我們可以做什麼事情呢?
link |
42:17.500
我們可以改一下我們的function的樣子,
link |
42:21.500
我們本來的function是寫成w的transpose乘上X,
link |
42:24.500
現在我們已經知道w就是X乘上α,
link |
42:27.500
所以f of X就是α的transpose乘上X的transpose乘上X。
link |
42:33.500
那這一項看起來像什麼樣子呢?
link |
42:36.500
X是一個vector,
link |
42:38.500
X的transpose是一堆row疊在一起,
link |
42:41.500
α是一個倒下來的vector,
link |
42:44.500
αtranspose是一個倒下來的vector,
link |
42:46.500
你把這個vector乘上這個matrix,
link |
42:50.500
再乘上這個vector,
link |
42:52.500
你得到的是一個scalar。
link |
42:54.500
我們把這個vector X,
link |
42:57.500
把這個vector X乘上這個X的transpose以後,
link |
43:00.500
你得到的是一個vector,
link |
43:01.500
得到的結果是什麼呢?
link |
43:02.500
你得到的結果是第一個dimension,
link |
43:05.500
就是X1跟X的inner product,
link |
43:08.500
第二個dimension就是X2跟X的inner product,
link |
43:10.500
最後一個dimension就是Xn跟X的inner product。
link |
43:12.500
接下來你把這個vector跟這個vector,
link |
43:15.500
再做inner product以後,
link |
43:16.500
你得到的結果就是,
link |
43:18.500
你的f of X等於呢?
link |
43:20.500
Summation over αn乘上Xn跟X的inner product,
link |
43:25.500
就是f of X怎麼算?
link |
43:27.500
把X代進來,
link |
43:28.500
它跟每一個Xn database裡面的每一個Xn,
link |
43:32.500
都乘上inner product以後,
link |
43:34.500
再把inner product的結果,
link |
43:36.500
用αn做weighted sum,
link |
43:38.500
就是你的f of X。
link |
43:40.500
那你可能會擔心說,
link |
43:41.500
哇,那個database裡面每一個Xn,
link |
43:43.500
算那個,
link |
43:45.500
算一遍inner product,
link |
43:46.500
會不會很費事呢?
link |
43:47.500
其實還好,
link |
43:48.500
因為假如你是用hinged loss,
link |
43:50.500
這個α是sparse的,
link |
43:52.500
所以你只需要考慮那些α不等於0的vector就好了。
link |
43:57.500
好,那再等一下呢,
link |
44:00.500
我們會把Xn跟X做inner product這件事情,
link |
44:04.500
寫成一個function,
link |
44:06.500
我們寫一個function,
link |
44:07.500
K of Xn跟X,
link |
44:09.500
K of Xn跟X,
link |
44:10.500
就是Xn跟X的inner product,
link |
44:12.500
這個function呢,
link |
44:13.500
叫做kernel function。
link |
44:16.500
好,那我們今天已經知道step 1,
link |
44:19.500
就是寫成,
link |
44:21.500
把Xn跟X代進kernel function,
link |
44:24.500
再乘上αn再summation以後的結果。
link |
44:26.500
那在step 2跟step 3呢,
link |
44:28.500
我們今天要maximize的對象變成什麼呢?
link |
44:31.500
我們的model是寫成這個樣子,
link |
44:33.500
不知道的東西,
link |
44:34.500
其實變成是αn,
link |
44:35.500
inner product裡面沒有參數,
link |
44:37.500
你本來就知道了,
link |
44:38.500
ok,inner product你本來就知道了,
link |
44:40.500
你不知道的東西呢,
link |
44:41.500
是αn。
link |
44:43.500
那我們在step 2跟step 3的時候,
link |
44:45.500
我們的問題就變成,
link |
44:47.500
你要找一組最好的αn,
link |
44:50.500
你要找一組最好的αn,
link |
44:52.500
它可以讓我們的total loss最小。
link |
44:55.500
這個最好的αn,
link |
44:56.500
它可以長什麼樣子呢?
link |
44:58.500
這個東西長什麼樣子呢?
link |
45:01.500
我們叫我們loss function,
link |
45:02.500
就寫成summation over所有的每筆data的,
link |
45:06.500
這個小l的loss function。
link |
45:08.500
而小l的loss function,
link |
45:10.500
它吃兩個input,
link |
45:11.500
一個是f of Xn,
link |
45:12.500
一個是y hat of n。
link |
45:14.500
f of Xn,
link |
45:15.500
就是step 1的這個function。
link |
45:17.500
你可以把這個function帶進來,
link |
45:18.500
它寫起來就是這個樣子,ok?
link |
45:21.500
所以f of Xn,
link |
45:22.500
就是下面這一項。
link |
45:24.500
summation over n前面已經用過了,
link |
45:26.500
所以我們這邊呢,
link |
45:27.500
summation over n',
link |
45:28.500
但是都是summation over所有的training data。
link |
45:33.500
那觀察這個投影片上所有的式子,
link |
45:36.500
你會發現說現在,
link |
45:37.500
我們不再需要真的知道說,
link |
45:40.500
一個,
link |
45:41.500
我們不需要知道x的vector是多少,
link |
45:44.500
對不對?
link |
45:45.500
我們真正需要知道的,
link |
45:47.500
其實只有x跟另外一個vector z,
link |
45:53.500
它們之間的inner product的值。
link |
45:56.500
或者是我們只需要知道這個kernel function,
link |
45:59.500
我們就可以做所有的optimization。
link |
46:03.500
我們今天只需要知道,
link |
46:05.500
k of xn'跟xn的value是什麼,
link |
46:08.500
我只需要知道k of xn跟x的value是什麼,
link |
46:11.500
我並不需要真的去知道,
link |
46:13.500
xn跟xn的vector長什麼樣子,
link |
46:15.500
我只要能夠算得出這一項,
link |
46:17.500
我只要能夠算得出這一項,
link |
46:19.500
其實就結束了,
link |
46:20.500
其實就結束了。
link |
46:21.500
這個呢,等一下看到這一招可以給我們帶來一些好處,
link |
46:25.500
這一招呢就叫做kernel trick。
link |
46:27.500
那其實這個kernel trick不是只能用在SVM裡面,
link |
46:31.500
如果你回過頭去看說,
link |
46:34.500
這個w等於β的linear combination這件事情,
link |
46:38.500
其實不是只有SVM適用,
link |
46:40.500
像logistic regression,
link |
46:41.500
你也可以用同樣的方法,
link |
46:43.500
所以你也可以有kernel-based logistic regression。
link |
46:47.500
linear regression,
link |
46:48.500
你也可以用同樣的方法,
link |
46:49.500
所以你也可以有kernel-based regression。
link |
46:53.500
這些都是可以的,
link |
46:54.500
只是這些都不限在SVM上面。
link |
46:59.500
好,那這個kernel trick怎麼用呢?
link |
47:01.500
這個kernel trick是這樣,
link |
47:03.500
假設我們現在,
link |
47:05.500
我們把,
link |
47:07.500
我們之前有說過說,
link |
47:09.500
如果是linear model,
link |
47:11.500
它有很多的限制,
link |
47:13.500
你可能要對你input的feature,
link |
47:15.500
做一個feature transform,
link |
47:17.500
它才能用linear model來處理。
link |
47:20.500
如果在neural network裡面,
link |
47:22.500
我們就用好幾個hidden layer,
link |
47:24.500
來做feature transform。
link |
47:26.500
那現在呢,
link |
47:27.500
假設我們有一筆data,
link |
47:29.500
它是二維的x1,x2,
link |
47:31.500
那我們想要對它做,
link |
47:33.500
先做feature transform,
link |
47:34.500
在feature transform上面,
link |
47:36.500
再去apply linear SVM,
link |
47:38.500
在feature transform以後,
link |
47:40.500
再去apply linear model。
link |
47:42.500
那我們假設feature transform以後的結果是,
link |
47:45.500
我們把final x變成x1的平方,
link |
47:47.500
跟後面的x1,x2,
link |
47:49.500
跟x2的平方,
link |
47:51.500
也是我們想要考慮,
link |
47:53.500
feature和feature之間,
link |
47:55.500
x1和x2之間的這個,
link |
47:57.500
他們之間的關係。
link |
47:59.500
那如果我要算kernel xz的時候,
link |
48:01.500
我想要算,
link |
48:03.500
x跟z的kernel function,
link |
48:05.500
也就是x跟z,
link |
48:07.500
他們的做完transition form以後,
link |
48:09.500
做inner product的值的話,
link |
48:11.500
我可以怎麼做呢?
link |
48:13.500
我現在的方法當然就是,
link |
48:15.500
我把x跟z,
link |
48:17.500
都帶到這個feature transform的function裡面,
link |
48:19.500
把它們變成新的feature,
link |
48:21.500
變成新的feature以後,
link |
48:23.500
我們就可以直接做inner product,
link |
48:25.500
那算出來的結果呢,就是這樣。
link |
48:27.500
這個是國中生都會算的東西。
link |
48:29.500
那我們可以把這一項呢,
link |
48:31.500
做一下轉化,
link |
48:33.500
所以這一項,
link |
48:35.500
它是x1平方,
link |
48:37.500
z1平方,
link |
48:39.500
加兩倍x1,x2,z1,z2,
link |
48:41.500
它可以被簡化成,
link |
48:43.500
x1,z1加x2,z2的平方。
link |
48:45.500
x1,z1加x2,z2的平方是什麼?
link |
48:47.500
x1,z1,x2,z2,
link |
48:49.500
正好就是x1,x2
link |
48:51.500
跟z1,z2,
link |
48:53.500
這兩個vector的inner product。
link |
48:55.500
所以說,
link |
48:57.500
我們把x跟z,
link |
48:59.500
投影到另外,
link |
49:01.500
做feature transform,
link |
49:03.500
再做inner product,
link |
49:05.500
等同於他們在原來feature transform之前,
link |
49:07.500
的space上面,
link |
49:09.500
先做inner product以後,
link |
49:11.500
再平方。
link |
49:13.500
那,這招有時候
link |
49:15.500
可以給予我們帶來好處,
link |
49:17.500
因為有時候,直接
link |
49:19.500
計算這個結果,
link |
49:21.500
直接計算x跟z,
link |
49:23.500
代進kernel function以後的output,
link |
49:25.500
會比先做feature transform,
link |
49:27.500
再做inner product,還要更快速。
link |
49:29.500
舉例來說,
link |
49:31.500
假設我們現在要做的事情,
link |
49:33.500
是我的x跟z
link |
49:35.500
都不是兩維,而是高維,
link |
49:37.500
我們想要把它
link |
49:39.500
投影到一個更高維的平面,
link |
49:41.500
這更高維的平面裡面,
link |
49:43.500
我們會考慮所有feature,
link |
49:45.500
兩兩之間的關係。
link |
49:47.500
假設你現在原來有黑維,
link |
49:49.500
在更高維的平面,
link |
49:51.500
至少是ch2維,
link |
49:53.500
我們要考慮所有feature之間,
link |
49:55.500
兩兩的關係。
link |
49:57.500
所以,final max,
link |
49:59.500
就是x1平方到xk平方,
link |
50:01.500
跟號2,x1,x2,跟號2,
link |
50:03.500
x1,x3,跟號2,x2,x3,
link |
50:05.500
這樣子那一堆。
link |
50:07.500
那如果你用kernel trick的話,
link |
50:09.500
你可以輕易地把
link |
50:11.500
final x跟final z的inner product
link |
50:13.500
的結果呢,輕易地算出來。
link |
50:15.500
輕易地算出來。
link |
50:17.500
怎麼算呢?其實final x
link |
50:19.500
跟final z的inner product
link |
50:21.500
就是x跟z的inner product
link |
50:23.500
的平方。你直接
link |
50:25.500
把x跟z做inner product
link |
50:27.500
在平方,你只需要算
link |
50:29.500
k個element的相乘,
link |
50:31.500
再做一次平方就好。
link |
50:33.500
但是,你如果先把它project到
link |
50:35.500
high dimension,再做inner product的話,
link |
50:37.500
在high dimension,這個dimension
link |
50:39.500
很大,這個dimension
link |
50:41.500
是ch2維,如果今天的feature
link |
50:43.500
dimension越大,k值越大的話,
link |
50:45.500
這個feature就越長。
link |
50:47.500
所以,你先做完feature transform
link |
50:49.500
再做inner product,是會比你先
link |
50:51.500
做inner product再取平方,還要
link |
50:53.500
運算量要大,所以這個是比較快的。
link |
50:55.500
而這個平方,可以
link |
50:57.500
拆成x1 z1
link |
50:59.500
加x2 z2,加到xk zk的
link |
51:01.500
平方。那,這個平方你把它
link |
51:03.500
展開的話,裡面有24項
link |
51:05.500
x1 z1的平方,x2 z2的平方
link |
51:07.500
等等,那會有兩兩相乘的
link |
51:09.500
兩倍的x1 x2 z1 z2
link |
51:11.500
兩倍的x1 x3 z1 z3
link |
51:13.500
兩倍的x2 x3
link |
51:15.500
兩倍的x2 x4等等。
link |
51:17.500
那,你把x呢
link |
51:19.500
集中到一邊,就可以得到
link |
51:21.500
這個vector。你把z集中到
link |
51:23.500
另外一邊,就得到
link |
51:25.500
z做完feature transform後的結果。
link |
51:27.500
所以,這一項呢
link |
51:29.500
就會等價於
link |
51:31.500
先做feature transform,再做inner product。
link |
51:35.500
那還有一些更驚人的結果,比如說
link |
51:37.500
你可以說,我做
link |
51:39.500
kernel basis的,我把那個
link |
51:41.500
這個
link |
51:43.500
我做RBF kernel
link |
51:45.500
做RBF kernel的意思是說
link |
51:47.500
我們現在啊,我們說
link |
51:49.500
k log x z
link |
51:51.500
就等於呢
link |
51:53.500
x跟z的
link |
51:55.500
距離乘上
link |
51:57.500
負二分之一,再取
link |
51:59.500
exponential。
link |
52:01.500
那,你知道這個東西呢,就是在衡量
link |
52:03.500
x跟z之間的相似度。
link |
52:05.500
如果x跟z越像
link |
52:07.500
這個kernel的值呢
link |
52:09.500
就越大。
link |
52:11.500
如果x等於z的話呢,值就是1。
link |
52:13.500
如果跟x跟z完全不一樣的話
link |
52:15.500
他們的值呢
link |
52:17.500
就是0。
link |
52:19.500
那這個式子啊
link |
52:21.500
這個式子啊,exponential x-z
link |
52:23.500
的距離再乘以
link |
52:25.500
負二分之一,其實也可以化成
link |
52:27.500
兩個high dimensional vector
link |
52:29.500
做inner product
link |
52:31.500
以後的結果。
link |
52:33.500
而這兩個vector啊
link |
52:35.500
他們其實他們的dimension
link |
52:37.500
是有無窮多維的。
link |
52:39.500
所以,本來如果你要把一個
link |
52:41.500
x呢,project到
link |
52:43.500
無窮多維再做inner product,你做不到。
link |
52:45.500
因為無窮多維是什麼樣子,你根本不知道。
link |
52:47.500
但是,如果你直接算
link |
52:49.500
x跟z的距離,然後再乘
link |
52:51.500
二分之一再取exponential
link |
52:53.500
就等同於是在一個無窮多維的
link |
52:55.500
空間裡面,去做inner product。
link |
52:57.500
這個無窮多維的空間
link |
52:59.500
長什麼樣子呢?
link |
53:01.500
你看,我們可以把這個exponential
link |
53:03.500
負二分之一x-z的
link |
53:05.500
tunone展開,變成
link |
53:07.500
exponential負二分之一
link |
53:09.500
x-z的none,
link |
53:11.500
加上x跟z的
link |
53:13.500
inner product。
link |
53:15.500
好,接下來呢,把x的none跟z的none
link |
53:17.500
這兩項呢,提出來,剩下exponential
link |
53:19.500
x跟z的inner product。
link |
53:21.500
那我們把
link |
53:23.500
x的none這一項,用cx
link |
53:25.500
來表示它,它跟x有關。
link |
53:27.500
這一項呢,用cz來表示
link |
53:29.500
它跟z有關,剩下exponential的x
link |
53:31.500
乘以z。exponential的x乘以z
link |
53:33.500
你可以用tiler展開
link |
53:35.500
你不用對它做tiler extension,就變成
link |
53:37.500
說,它等於cx乘上cz。
link |
53:39.500
summation over i
link |
53:41.500
等於0到無窮大,i階分之
link |
53:43.500
x跟z的inner product
link |
53:45.500
的i次方。
link |
53:47.500
這個呢,有無窮多項,
link |
53:49.500
從0次方一直summation到
link |
53:51.500
無窮多次方。
link |
53:53.500
如果把它展開的話,看起來就像是這樣
link |
53:55.500
cxcz加上
link |
53:57.500
cxczx跟z的inner product
link |
53:59.500
加上cxcz二分之
link |
54:01.500
x跟z的inner product的平方。
link |
54:03.500
好,那如果我們今天
link |
54:05.500
把這每一項都拆開的話,
link |
54:07.500
你會得到什麼呢?
link |
54:09.500
cx跟cz,你可以看成是
link |
54:11.500
兩個vector,它們都
link |
54:13.500
只有一個dimension,一個是cx,
link |
54:15.500
一個是cz的inner product。
link |
54:17.500
這一項,你可以看成是
link |
54:19.500
把原來的x的vector
link |
54:21.500
乘上cx,把z的vector
link |
54:23.500
乘上cz
link |
54:25.500
在做inner product
link |
54:27.500
以後的結果。
link |
54:29.500
這一項,x跟z
link |
54:31.500
的平方,x跟z先做
link |
54:33.500
inner product在平方,我們已經看過
link |
54:35.500
在前面的例子已經看過,x跟z
link |
54:37.500
先做inner product在平方,其實
link |
54:39.500
可以拆成是兩個high dimension
link |
54:41.500
的vector在
link |
54:43.500
inner product的結果。
link |
54:45.500
所以,x跟z的平方
link |
54:47.500
等於兩個high dimension
link |
54:49.500
的vector做inner product的結果。
link |
54:51.500
這個high dimension的vector
link |
54:53.500
它會考慮兩個
link |
54:55.500
dimension之間的關係。
link |
54:57.500
如果你是三次方,它就會考慮
link |
54:59.500
三個dimension之間的關係。
link |
55:01.500
好,那我們現在
link |
55:03.500
把屬於x這邊的vector
link |
55:05.500
都串起來,把它串成一個很長的vector。
link |
55:07.500
串起來,串成一個很長的vector。
link |
55:09.500
屬於z這邊的,也都串起來。
link |
55:11.500
也都串起來。
link |
55:13.500
這邊有無窮多項,所以串起來以後
link |
55:15.500
x跟z,它們都有各自的
link |
55:17.500
無窮長的vector,然後它們做inner product。
link |
55:19.500
然後最後,你得到的
link |
55:21.500
結果,就是這個
link |
55:23.500
kernel所給你的結果。
link |
55:25.500
kernel所給你的結果。
link |
55:27.500
所以,當你使用RBF
link |
55:29.500
kernel的時候,你就是在
link |
55:31.500
無窮多維的平面上
link |
55:33.500
去做事情。
link |
55:35.500
去做事情。
link |
55:37.500
不過,如果你在
link |
55:39.500
無窮多維的平面上去做事情,
link |
55:41.500
你可以想像說,它其實是
link |
55:43.500
有可能蠻容易overfitting的。
link |
55:45.500
所以,如果你用RBFkernel的時候,有時候要小心
link |
55:47.500
你可能會在training data上
link |
55:49.500
得到很好的performance,
link |
55:51.500
但是在testing data上,得到很糟的performance。
link |
55:53.500
而你也可以做
link |
55:55.500
Symoy的kernel。Symoy的kernel
link |
55:57.500
是說,k的
link |
55:59.500
x跟z,等於
link |
56:01.500
x跟z的inner product
link |
56:03.500
做hyperbolic tangent。
link |
56:05.500
那至於,x跟z的inner product做hyperbolic tangent
link |
56:07.500
是哪兩個vector做inner product
link |
56:09.500
的結果,哪兩個highlight major vector
link |
56:11.500
做inner product的結果,你就自己回去用
link |
56:13.500
這個tele-extension展開來看看,你就知道了。
link |
56:15.500
好,
link |
56:17.500
那我們之前已經說過說,
link |
56:19.500
當我們的function,
link |
56:21.500
我們的function,
link |
56:23.500
當我要把一個x呢,
link |
56:25.500
拿來做testing的時候,帶到f裡面的時候,
link |
56:27.500
我其實是聚散x跟我training data
link |
56:29.500
裡面所有xn的kernel
link |
56:31.500
的function output,
link |
56:33.500
然後再乘上αn。
link |
56:35.500
如果當我們用的是Symoy的kernel的時候呢,
link |
56:37.500
你就是把
link |
56:39.500
所有data裡面的xn跟xn inner product
link |
56:41.500
再去hyperbolic tangent,
link |
56:43.500
再乘αn,再全部合起來
link |
56:45.500
以後的結果。
link |
56:47.500
呃,
link |
56:49.500
如果我們今天用的是
link |
56:51.500
Symoy的kernel,
link |
56:53.500
這個f of x
link |
56:55.500
你就可以想成它其實是一個
link |
56:57.500
只有一個hidden layer
link |
56:59.500
的neural network,
link |
57:01.500
ok,你可以把它想成是只有一個hidden layer
link |
57:03.500
的neural network,為什麼?
link |
57:05.500
你把x拿進來,
link |
57:07.500
它會跟
link |
57:09.500
所有的x都做inner product
link |
57:11.500
再通過hyperbolic tangent,
link |
57:13.500
對每一個x
link |
57:15.500
做inner product這件事情,其實就
link |
57:17.500
好像是你有一個neural,
link |
57:19.500
它的weight就是
link |
57:21.500
某一筆data,ok?
link |
57:23.500
你把x1那一筆data拿出來
link |
57:25.500
當作這個neural的weight,
link |
57:27.500
你把x2
link |
57:29.500
那筆data拿出來當作第二個neural的weight,
link |
57:31.500
一直到把第n筆data拿出來
link |
57:33.500
當作這個neural的weight,
link |
57:35.500
然後把它們都通過hyperbolic tangent
link |
57:37.500
得到output,
link |
57:39.500
ok,然後呢
link |
57:41.500
你再把它全部乘上
link |
57:43.500
alpha,然後呢
link |
57:45.500
把它全部呢,加起來
link |
57:47.500
結果我突然發現我犯了一個錯誤,
link |
57:49.500
這個alpha呢,我就應該要下標
link |
57:51.500
呃,上標下標都可以啦,
link |
57:53.500
那前面是下標,所以後面應該
link |
57:55.500
也要下標,這樣比較一致
link |
57:57.500
好,
link |
57:59.500
好,不好意思
link |
58:01.500
好,那沒關係
link |
58:03.500
那這樣子,好,我們找出這個
link |
58:05.500
我們找出這些
link |
58:07.500
我們找出這些alpha,把它
link |
58:09.500
weight上起來
link |
58:11.500
那就得到最後的f of x
link |
58:13.500
所以這就是一個
link |
58:15.500
neural network,只是它只有一個
link |
58:17.500
hidden layer,那在這個
link |
58:19.500
neural network裡面,它的每一個
link |
58:21.500
neural的weight,就是某一筆data
link |
58:23.500
那neural的
link |
58:25.500
數目呢,neural的數目
link |
58:27.500
就是看你有幾個support vector
link |
58:29.500
你就有幾個neural
link |
58:35.500
那,呃,既然
link |
58:37.500
有了這個kernel trick以後
link |
58:39.500
我們其實可以去直接
link |
58:41.500
設計這個kernel function
link |
58:43.500
我們根本就可以
link |
58:45.500
完全不用理會
link |
58:47.500
x跟z的feature長什麼樣
link |
58:49.500
你只要有一個kernel function
link |
58:51.500
可以把x跟z
link |
58:53.500
這兩個東西帶進去
link |
58:55.500
它可以給你一個value
link |
58:57.500
這個value代表了x跟z
link |
58:59.500
在某一個高維平面
link |
59:01.500
上的vector inner product的話
link |
59:03.500
你根本就不需要在意說x跟z
link |
59:05.500
它們的vector長什麼樣子
link |
59:07.500
什麼時候
link |
59:09.500
這招會有用呢,假設你的
link |
59:11.500
x是
link |
59:13.500
有structure的data,比如說
link |
59:15.500
它是一個sequence
link |
59:17.500
如果是一個sequence的話
link |
59:19.500
你其實不容易把sequence
link |
59:21.500
表示成一個vector,假設
link |
59:23.500
你的每一個sequence長度都還不一樣
link |
59:25.500
假設你的每一個sequence長度
link |
59:27.500
都還不一樣,那你就不容易
link |
59:29.500
把這些不同長度的sequence
link |
59:31.500
都用一個vector來
link |
59:33.500
描述它,所以你根本不知道
link |
59:35.500
它的x跟z長什麼樣子
link |
59:37.500
你根本就不知道它的final x
link |
59:39.500
應該要長什麼樣子
link |
59:41.500
但是,如果我們可以
link |
59:43.500
直接定它的kernel function
link |
59:45.500
我們知道kernel function其實
link |
59:47.500
就是
link |
59:49.500
投影到高維以後的inner product
link |
59:51.500
所以kernel function往往就是一個類似
link |
59:53.500
similarity的東西
link |
59:55.500
所以今天如果你可以定一個function
link |
59:57.500
它是evaluate x跟z的similarity
link |
59:59.500
就算x跟z它是
link |
01:00:01.500
有structure的object
link |
01:00:03.500
比如說它是tree structure
link |
01:00:05.500
它是sequence也沒有關係
link |
01:00:07.500
只要知道什麼算兩個sequence之間的
link |
01:00:09.500
similarity
link |
01:00:11.500
你知道知道什麼算兩個tree structure
link |
01:00:13.500
similarity,你就可以
link |
01:00:15.500
有機會把這個similarity
link |
01:00:17.500
當作一個kernel來使用
link |
01:00:19.500
當然你可能會很懷疑說
link |
01:00:21.500
我胡亂定一個
link |
01:00:23.500
similarity,它背後
link |
01:00:25.500
有那個feature vector
link |
01:00:27.500
可以support它嗎?
link |
01:00:29.500
這個kernel其實是兩個vector
link |
01:00:31.500
做inner product以後的結果
link |
01:00:33.500
那你胡亂定一個function
link |
01:00:35.500
它可以拆成兩個vector
link |
01:00:37.500
inner product以後的結果嗎?
link |
01:00:39.500
不是所有的function都可以
link |
01:00:41.500
但是有一個叫做Merser's theory
link |
01:00:43.500
可以告訴你說
link |
01:00:45.500
哪些function
link |
01:00:47.500
是可以的
link |
01:00:49.500
所以你有辦法check
link |
01:00:51.500
說你定出來的
link |
01:00:53.500
kernel function
link |
01:00:55.500
它背後有沒有兩個vector
link |
01:00:57.500
做inner product
link |
01:00:59.500
這件事情你是可以check的
link |
01:01:01.500
所以在語音上
link |
01:01:03.500
假設你現在要做分類的
link |
01:01:05.500
對象其實是
link |
01:01:07.500
audio的segment
link |
01:01:09.500
audio segment
link |
01:01:11.500
每一段聲音訊號
link |
01:01:13.500
我們就是會用一個vector sequence
link |
01:01:15.500
來描述它
link |
01:01:17.500
它們的長度都不一樣
link |
01:01:19.500
所以它vector sequence的長度可能都不一樣
link |
01:01:21.500
比如說假設你現在做test
link |
01:01:23.500
可能是給你一段聲音訊號
link |
01:01:25.500
它要看說這段聲音訊號
link |
01:01:27.500
它是個分類的問題
link |
01:01:29.500
它要看說這段聲音訊號裡面
link |
01:01:31.500
語者的情緒
link |
01:01:33.500
它可能分成高興、生氣
link |
01:01:35.500
等等的,有十類之類的
link |
01:01:37.500
你要把它做分類
link |
01:01:39.500
那你想要SVM
link |
01:01:41.500
但是一段聲音訊號你沒有辦法直接用一個vector
link |
01:01:43.500
來描述它
link |
01:01:45.500
你可以直接定它的kernel
link |
01:01:47.500
你就不要管它
link |
01:01:49.500
你就不要管一段聲音訊號它變成一個fixed length
link |
01:01:51.500
vector的時候長什麼樣
link |
01:01:53.500
你直接定它的kernel
link |
01:01:55.500
你直接定說定一個function
link |
01:01:57.500
kl xz
link |
01:01:59.500
然後說我把x是一段聲音訊號帶進去
link |
01:02:01.500
z是另外一段新聲音訊號
link |
01:02:03.500
帶進去的時候
link |
01:02:05.500
這個function的output應該是什麼
link |
01:02:07.500
你定好這個,你就可以直接
link |
01:02:09.500
用kernel trick apply SVM
link |
01:02:11.500
就算你不知道說
link |
01:02:13.500
你要描述成一個vector的時候
link |
01:02:15.500
應該是什麼樣
link |
01:02:17.500
那這個方法
link |
01:02:19.500
怎麼定這個kernel呢
link |
01:02:21.500
怎麼定兩個sequence之間的kernel呢
link |
01:02:23.500
這個我就把reference留在這邊
link |
01:02:25.500
給大家參考
link |
01:02:27.500
給大家參考
link |
01:02:29.500
其實SVM還有很多
link |
01:02:31.500
比如說SVM可以做
link |
01:02:33.500
regression
link |
01:02:35.500
SVM做regression就是
link |
01:02:37.500
support vector regression
link |
01:02:39.500
那它的精神是這樣
link |
01:02:41.500
我可以用幾句話講一下它的精神
link |
01:02:43.500
它的精神是說
link |
01:02:45.500
我們原來在做regression的時候
link |
01:02:47.500
我們會希望model的output跟target越近越好
link |
01:02:49.500
那如果做support vector regression
link |
01:02:51.500
它說我進到某一個距離裡面
link |
01:02:53.500
進到它的某一個
link |
01:02:55.500
我本來想像是某一個
link |
01:02:57.500
漸微的距離,但我想說漸微大家不知道是什麼
link |
01:02:59.500
所以就算了
link |
01:03:01.500
就張聊的漸微
link |
01:03:03.500
算了,我覺得這個太沒有關係了
link |
01:03:05.500
就是它進入某一個距離
link |
01:03:07.500
進入target的某一個距離裡面
link |
01:03:09.500
它的loss就是0
link |
01:03:11.500
那就是support vector regression
link |
01:03:13.500
那ranking SVM呢
link |
01:03:15.500
ranking SVM它常常被用在
link |
01:03:17.500
當你要考慮的東西是
link |
01:03:19.500
一個排序是一個list的時候
link |
01:03:21.500
比如說在final quadrant裡面
link |
01:03:23.500
不是有一個recommendation的題目嗎
link |
01:03:25.500
它要你的output
link |
01:03:27.500
是一個list
link |
01:03:29.500
你可以說我把它當作是一個
link |
01:03:31.500
regression的題目
link |
01:03:33.500
我給每一個element
link |
01:03:35.500
一個分數
link |
01:03:37.500
然後按照分數由高到低做收集
link |
01:03:39.500
但是
link |
01:03:41.500
這樣你並沒有直接optimize你的問題
link |
01:03:43.500
你其實可以直接考慮
link |
01:03:45.500
這個list的ranking
link |
01:03:47.500
如果直接考慮ranking的
link |
01:03:49.500
SVM呢,叫做ranking SVM
link |
01:03:51.500
或許你在你的final quadrant裡面
link |
01:03:53.500
用得到這個東西
link |
01:03:55.500
它另外一個東西叫
link |
01:03:57.500
one class SVM
link |
01:03:59.500
它是說它會希望
link |
01:04:01.500
屬於positive的example都聚成一類
link |
01:04:03.500
negative example呢
link |
01:04:05.500
然後就散佈在其他地方
link |
01:04:07.500
這個都留一些reference給大家參考就好
link |
01:04:09.500
我們可以比較一下
link |
01:04:11.500
deep learning跟SVM的差別
link |
01:04:13.500
那我們說deep learning的前幾個
link |
01:04:15.500
那個layer
link |
01:04:17.500
你就可以看作是一個feature transform
link |
01:04:19.500
最後一個layer
link |
01:04:21.500
可以看作是一個linear classifier
link |
01:04:23.500
那其實SVM做的事情
link |
01:04:25.500
也是很類似的事情
link |
01:04:27.500
你會它前面它先做一個
link |
01:04:29.500
我們先apply一個kernel function
link |
01:04:31.500
把你的feature轉到一個
link |
01:04:33.500
high dimensional上面
link |
01:04:35.500
然後在high dimensional上面
link |
01:04:37.500
我們就可以applylinear classifier
link |
01:04:39.500
只是在SVM裡面一般linear classifier
link |
01:04:41.500
你都會用這個hinge loss
link |
01:04:43.500
那事實上呢
link |
01:04:45.500
SVM的kernel是
link |
01:04:47.500
learnable
link |
01:04:49.500
我列了一個reference給大家參考
link |
01:04:51.500
事實上它是learnable
link |
01:04:53.500
但是它沒有辦法
link |
01:04:55.500
認得像這個
link |
01:04:57.500
deep learning那麼多
link |
01:04:59.500
你可以做的事情是
link |
01:05:01.500
你把好幾個不同的kernel
link |
01:05:03.500
然後你把不同的kernelcombine起來
link |
01:05:05.500
它們中間的位置是可以認的
link |
01:05:07.500
當你只有一個kernel的時候
link |
01:05:09.500
好像是只有
link |
01:05:11.500
SVM就好像是只有一個hidden layer
link |
01:05:13.500
的learnable
link |
01:05:15.500
當你把kernel再做linear combination的時候
link |
01:05:17.500
它就好像是一個有
link |
01:05:19.500
兩個layer的learnable
link |
01:05:21.500
ok
link |
01:05:23.500
link |
01:05:25.500
這邊呢SVM的部分