back to index
【機器學習 2022】再探寶可夢、數碼寶貝分類器 — 淺談機器學習原理

link |
在現場還有線上的同學們大家好,那我們就開始上課。
link |
那今天這堂課啊,我們是要再探寶可夢跟數碼寶貝的分類器啦。
link |
你記得我們上週啊,有講說我嘗試做了寶可夢與數碼寶貝的分類器。
link |
結果發現呢,因為JPEG還有JPG檔的問題,所以其實分類器什麼都沒有學到。
link |
那今天呢,我們就是把所有的圖片都弄成JPEG檔,然後重新把同樣的問題再做一次。
link |
那為什麼我們要講這個寶可夢與數碼寶貝的分類器呢?
link |
那這邊是想要順便跟大家講一下機器學習的基本原理。
link |
在講這堂課之前啊,這邊是預設你對Machine Learning已經有基本的概念。
link |
之前有講過說,這門課是有要求大家要預習的,那如果你有按照預習的進度的話,
link |
你已經看過一個預測頻道訂閱人數的例子,那你已經有了機器學習的基本概念,
link |
你已經知道我們在做機器學習的時候,就是三個步驟。
link |
先找一個有未知數的function,然後呢,我們要決定我們的Loss長什麼樣子,最後要做一個Optimization。
link |
好,那如果你有按照預習的進度的話,其實你已經看到一個影片,
link |
這個影片是機器學習作業攻略,然後我有說這個攻略啊,
link |
就跟魔關羽一樣,會帶你打贏前期所有的副本。
link |
但是在講這個攻略的時候,有一件事情我其實是草草的帶過,
link |
什麼事情呢?我說今天如果參數越多,就越容易Overfitting,
link |
也就是你在訓練資料上面觀察到的Loss跟實際測試的時候觀察到的Loss會越有可能不一樣。
link |
那很多同學會問說,為什麼會這樣呢?為什麼參數越多,
link |
你訓練的時候觀察到的Loss跟測試的時候觀察到的Loss會差距越大呢?
link |
那過去呢,都只是很直觀的舉一些例子告訴你說,直覺上想起來就是會這樣。
link |
那今天呢,是要從理論上告訴你說,為什麼參數越多,就越有可能會Overfitting。
link |
好,那我們回到我們現在想要探討的問題,就是寶可夢跟數碼寶貝的分類器啦。
link |
好,那大家已經知道數碼寶貝是什麼了,那我想應該就不需要介紹。
link |
那你知道為什麼我們要做寶可夢跟數碼寶貝的分類器嗎?
link |
因為這兩群動物,牠們非常的類似。舉例來說,
link |
好啦,就來問一下大家,這隻是寶可夢還是數碼寶貝?
link |
欸,你覺得是寶可夢的同學舉手一下啊。
link |
好,欸,很厲害,為什麼你們覺得是數碼寶貝?
link |
而且你發現啊,寶可夢跟數碼寶貝有很多類似的地方。
link |
基本上寶可夢裡面有什麼,數碼寶貝裡面就有一隻類似的。
link |
這個是蟲蟲獸,在寶可夢裡面有一個綠毛蟲,長得是很像。
link |
在寶可夢裡面有小火龍,牠是主角小智身邊的一個動物,一個寶可夢。
link |
而在數碼寶貝裡面有一個牙骨獸,牠其實也是一個暴龍。
link |
這是一個暴龍,這也是一個暴龍,牠們兩個都是暴龍。
link |
但是右邊這隻暴龍呢,是數碼寶貝裡面的暴龍,牠就叫做牙骨獸,牠不叫做暴龍。
link |
所以總之,寶可夢裡面有什麼,數碼寶貝裡面也有什麼。
link |
所以寶可夢跟數碼寶貝是長得很像的,所以我們值得做一個分類器來分辨這兩種動物。
link |
所以我們今天要做的事情就是這個樣子的,我們要找一個函數。
link |
這個函數的輸入呢,就是一隻寶可夢或者是數碼寶貝,就是一隻動物。
link |
比如說這隻是傑尼龜,那牠的輸出呢,就是這隻動物牠是寶可夢還是數碼寶貝。
link |
那機器學習的起手式是你要先定一個有未知數的功能,對不對?
link |
大家知道說機器學習的起手式是先定一個有未知數的功能。
link |
那通常假設你沒有什麼想法的話,往往你需要先對你的資料做一些觀察。
link |
想像一下,假設有一個功能可以成功的分類寶可夢跟數碼寶貝,那這個功能牠應該長什麼樣子?
link |
所以在開始進入機器學習之前,也許我們先對我們的資料做一些觀察。
link |
那經過一番觀察以後啊,我發現寶可夢跟數碼寶貝雖然長得很像,但其實牠們還是有蠻顯著的差異的。
link |
比如說上面這五隻動物是我隨機sample了五隻數碼寶貝,下面這五隻動物是我隨機sample了五隻寶可夢。
link |
那你會很明顯的發現,雖然說寶可夢跟數碼寶貝裡面都有很類似的動物,但是牠們光是畫風就是不太一樣的。
link |
數碼寶貝裡面比較多人形的東西,然後往往數碼寶貝的這些動物啊,這些生物啊,牠都畫得比較複雜。
link |
然後寶可夢就是走小朋友路線,牠畫的動物比較圓潤,然後線條比較簡單。
link |
那既然他們畫風有差異,我們能不能夠設計一個function根據牠們的風格來分辨這兩種動物呢?
link |
我們已經知道說數碼寶貝的線條比較複雜,寶可夢的線條比較簡單。
link |
也許我們可以根據牠線條的複雜程度來決定一隻動物牠是寶可夢還是數碼寶貝。
link |
那怎麼辦呢?怎麼知道怎麼決定線條的複雜程度呢?
link |
你知道這個有很多的package,但這個細節我就不講了。
link |
很多package可以幫你把一個圖片裡面的線把它畫出來。
link |
這邊我就對每一張圖片,不管是寶可夢還是數碼寶貝,做了edge detection,把這一個圖裡面的邊線把它畫出來。
link |
實際的細節不重要,其實我也不太清楚怎麼做的,總之call一個library,自動會產生這種邊線的圖。
link |
那怎麼知道一張圖片的邊線比較複雜還是比較簡單呢?
link |
那我就用了一個很簡單的方法,就是有邊線的地方就是白色的。
link |
那我就算一下在這張圖片裡面白色的pixel有多少。
link |
舉例來說,上面這一張,這隻是獨角蟲。
link |
我記得他進化以後會變成鐵殼昆,然後鐵殼昆進化以後會變成大針鋒。
link |
那下面這一隻,如果你在數碼寶貝比較研究的話,我可以問一下這隻是什麼嗎?
link |
我其實也不知道這隻是什麼,我們就叫他機械手刀龍好了,我也不知道他是什麼,不好意思。
link |
那上面這隻獨角蟲,你把他做edge detection,然後算一下白色的點有幾個,有3558個。
link |
下面這個機械手刀龍,把他做edge detection以後,你看這個線很複雜,那有幾個點呢?
link |
所以我發現說,如果你把寶可夢做edge detection,平均而言白色的點比較多。
link |
如果是數碼寶貝的話,白色的點比較多。
link |
那我們就做了一個function,做了一個函式,這個函式我用小1來表示。
link |
這個函式就是輸入一張圖片,他會告訴你說,做完edge detection以後,白色的點有幾個。
link |
這個數字就代表了線條的複雜程度,今天如果數字越大,那就代表說這隻動物,不管他是寶可夢還是數碼寶貝,他的線條是越複雜的。
link |
有了這個觀察以後,我們就可以有一個function,這個function裡面有一些未知的參數,他可以用來分辨一張圖片是寶可夢還是數碼寶貝。
link |
那這個function長什麼樣子呢?他長這個樣子,有一個函式,輸入是一隻動物,這個是一個妙蛙種子。
link |
那如果輸的這隻動物丟到e這個edge detection的function裡面,這個e這個function會去計算線條的複雜程度。
link |
如果線條的複雜程度超過某一個數值,這邊用h來表示,那我就說這隻動物是一個數碼寶貝。
link |
反之,如果線條的複雜程度小於h,那我就說他是寶可夢。
link |
而現在未知的數值是什麼呢?未知的參數是什麼呢?未知的參數就是這個h。
link |
我們不知道要把h定在哪裡,才能夠準確的分割寶可夢跟數碼寶貝。
link |
那我們用f下標小h,代表說我們有一個function叫做f,function裡面未知的參數需要從data裡面學出來的參數,我們叫做小h。
link |
那這個小h只是一個數值,他只是一個fresh form,用來分割說如果今天複雜的程度超過h就是數碼寶貝,小於h就是寶可夢。
link |
雖然說這是一個很簡單的function,但以下的討論,你完全可以把這個function一般化到更複雜的情境,
link |
你完全可以把這個h換成我們在之前錄影裡面講過的setup,你完全可以把這個h換成deep network裡面的參數。
link |
不過我們今天為了舉例方便,我們就舉一個最簡單的例子,我們的function裡面只有一個未知的參數,就是h。
link |
那我們把所有未知參數,我們把這個未知參數所有的可能性集合起來,叫做H。
link |
那這個未知參數h他有哪些可能性呢?他的可能性其實是你自己決定的。
link |
那這邊我們假設說複雜的程度就是從1算到1萬,就是做完h detection以後,白色的點的數目最多不會超過1萬。
link |
所以我們把這個h省1到1萬,那也不需要考慮小數點,因為考慮小數點沒有意義啊,
link |
那個白色的點算出來的個數一定是整數啊,所以我們這個h不需要考慮小數點。
link |
那所以現在我們的h的可能性有1到1萬,全部集合起來,我們叫他大h。
link |
那大h加一個絕對,類似絕對值的符號,這個意思是說,在大h裡面我們有多少可能的選擇。
link |
而這個可能選擇的數目啊,我們又叫做模型的複雜程度。
link |
所以常聽到有人說,我有一個很複雜的模型,我的模型複雜程度很高,那什麼意思?
link |
代表說他現在定出來的這個還有未知數的function裡面,他的選擇性很多,這個叫做模型的複雜程度很大。
link |
好,那接下來呢,我們要定Loss,那記得說,我們說機器學習三個步驟,
link |
第一個步驟定一個有未知數的function,第二個步驟就是定一個Loss。
link |
那今天在這個問題裡面,怎麼定一個Loss呢?
link |
在定Loss之前,首先你需要有資料,Loss是根據資料計算出來的。
link |
那現在呢,假設我們把一個Dataset用大D來表示,一個Dataset大D裡面有什麼樣的東西呢?
link |
一個Dataset大D裡面就是有一堆成對的x跟y hat,有一堆成對的x跟y hat。
link |
那這裡的每一個x呢,就代表了一隻寶可夢或者是數碼寶貝,比如說這是一隻小拉達,他不是普通的老鼠,他是小拉達,知道嗎?
link |
然後他是寶可夢還是數碼寶貝呢?他是一隻寶可夢,那y hat就代表說這個x是寶可夢還是數碼寶貝。
link |
那接下來呢,我們就可以定Loss了,我們可以給一個threshold的數值,給一個h,然後我們就可以根據一個Dataset來計算他的Loss應該有多大或多小。
link |
來計算這個h,根據某一組訓練資料,某一組Dataset,他的Loss應該有多大。
link |
那這個Loss定義起來長什麼樣子呢?我們把某一個資料集,某一個資料集大D裡面的每一筆資料都拿出來。
link |
然後每一筆資料,比如說這邊是第n筆資料,第n筆資料跟這個threshold h合起來,我們會去計算一個Loss,代表這個h在這一筆資料上表現得好壞,Loss越大表現越差,Loss越小表現越好。
link |
那一個資料集裡面呢,有大n筆資料,我們就把大n筆資料每一筆都拿出來算這個Loss,這邊用小L來表示,每一筆資料的Loss都算出來,取他的平均值,就是我們最終的整個資料集的Loss,這邊用大L來表示他。
link |
那我們這個大L啊,他要吃兩個輸入,一個是h,一個是D,那這個h的意思就代表說我們現在這個大L是在計算哪一個threshold的好壞,那大D代表說我們是用哪一個資料集來計算好壞。
link |
好,那這個小L給一筆資料,他的好壞要怎麼計算呢?那你有很多不同的做法,那這邊採取的是一個最直覺的做法,如果說你把這個h當作是你的function f的參數,然後你把xn當作是input,如果這時候輸出的答案跟正解不一樣,那你的Loss就是1。
link |
如果跟正確答案一模一樣,那輸出就是0。
link |
那這邊用一個identity function來表示這個藍色框框裡面所表示的事情,就是如果說今天給定這個h,那你的function的輸出跟正確答案不一樣,那這個identity function就會輸出1,反之他就會輸出0。
link |
那我們把每一筆資料算出來的這個小L統統平均起來以後,我們得到什麼?我們得到的其實就是error rate,就是錯誤率。
link |
因為現在只要答錯一次,Loss就會加1,然後如果沒有答錯,Loss就1加0,最後對所有的資料都平均,那這個不就是錯誤率嗎?
link |
那講到這邊有人可能會問一個問題,誒,這個不對啊,我記得現在講的不是一個binary classification,二元分類的問題嗎?
link |
我記得在上課影片裡面其實也提過分類了,或者是你自己很有可能也實做過分類的問題。
link |
你可能會記得說,誒,在做分類的問題的時候,一般不是這樣定Loss的啊,你會用什麼?你會用cross entropy,對不對?
link |
這邊你當然可以用cross entropy,沒有問題。那如果用cross net,用現在這個error rate的壞處就是,誒,這個Loss是不能微分的,到時候你要gradient descent,你可沒有辦法那麼容易的optimize這個Loss function。
link |
如果是cross entropy,它至少是可以微分的,你比較能夠optimize這個Loss function。
link |
但是這邊呢,我們選擇了一個,就是如果相較於這個錯誤率跟cross entropy比起來啊,這個錯誤率是比cross entropy更加直觀一點啦,所以我這邊選擇用error rate,用錯誤率來做說明。
link |
那等一下的討論跟Loss function的選擇是沒有關係的,所以我們這邊可以選擇一個最直觀的Loss function來做以下的說明。
link |
好,那接下來呢,就進入訓練的環節了,進入optimization的環節了。
link |
那這邊呢,我們先講一個理想的狀況,假設今天我們可以蒐集到全宇宙中所有的寶可夢跟數碼寶貝,把它們集合起來,我們把它叫做DO。
link |
那我們其實就可以找到一個最好的threshold,找到一個最好的參數,我們把這個最好的參數叫做HO。
link |
那這個HO呢,或者是換句話說,這個HO就是所有可能的H裡面,可以讓DO所有的寶可夢跟數碼寶貝的這個資料集上,Loss最小的那個H就是HO。
link |
那當然有人會問說,這個optimization的問題是怎麼解的啊?你怎麼找到一個H可以讓這個大L最小的啊?
link |
我們剛才有說過,我們訂的大L呢,其實是error rate,所以它是不能微分的,所以今天這個問題,你不容易用gradient descent解。
link |
但是這邊不是一個問題,因為H畢竟是有限的,總共才一萬個而已,就每一個都試一下,你其實就可以知道可以讓Loss最小的那個H是什麼了。
link |
所以這個optimization的問題並不難解,當然如果你今天面對的是deep learning的問題,有百萬個參數,有千萬個參數,這個時候你可能就需要讓你的Loss function是可以微分的,你才用gradient descent。
link |
我這邊,我們沒有這個限制,Loss沒辦法微分,就算了,寶搜索的H一樣可以解這個optimization的問題。
link |
這個是理想的狀況,這個是假設我們可以收集到全宇宙的寶可夢跟數碼寶貝的狀況。
link |
但是事實上呢,我們並沒有辦法收集到全宇宙的寶可夢跟數碼寶貝。
link |
有的人可能會說,不是有出那個寶可夢或數碼寶貝圖鑑嗎?那照理說所有全宇宙的寶可夢跟數碼寶貝都在裡面啊。
link |
不不不,不是這樣子的,你知道寶可夢跟數碼寶貝每年不是都會出新的品種嗎?所以代表說我們人類對於寶可夢跟數碼寶貝的生態,我們了解仍然是非常有限的。
link |
所以寶可夢圖鑑裡面記載的並不是所有的寶可夢,我們並不知道全宇宙的寶可夢跟數碼寶貝有哪些,我們只知道部分的寶可夢跟數碼寶貝長什麼樣子。
link |
所以我們實際上手上我們只有部分的寶可夢跟數碼寶貝,這些部分的寶可夢跟數碼寶貝是從全宇宙的寶可夢跟數碼寶貝裡面去sample出來的。
link |
就是全宇宙的寶可夢數碼寶貝分散在世界各地,然後有訓練師去戶外抓到一個寶可夢跟數碼寶貝,他就把它輸入到圖鑑裡面,圖鑑裡面就多一筆資料,就把它放到我們的訓練資料集裡面。
link |
這個訓練資料集我們用DTRAIN來表示它。現在我們假設訓練資料集裡面有大N筆資料,訓練資料集的產生過程我們是有一個假設的,我們是假設說訓練資料集裡面的每一筆資料就是從一個更大的資料,也就是全宇宙的數碼寶貝跟寶可夢的總和的資料被sample出來的。
link |
那sample的過程有一個限制叫做IID,叫做Independent Identical Distribution,就是說今天sample每一筆資料的時候彼此之間是independent的。
link |
而每次sample的時候我們要sample的那個分布永遠是固定的,那多數的情況你都可以假設你的資料滿足這個IID的限制,滿足這個IID的特性。
link |
那有了這個訓練資料,有了這個DTRAIN以後啊,你就可以找出一個H,你可以找一個H它讓DTRAIN的值,它讓用DTRAIN所計算出來的Loss它的值越小越好。
link |
那可以讓這個DTRAIN所定義的Loss它的值最小的那個H,我們叫它HTRAIN。所以上面這第一個式子是理想的狀態,第二個式子是現實中實際上會發生的情況。
link |
上面的狀態是假設有全宇宙的寶可夢,你可以找一個最好的H,叫做HTRAIN。但是現實是你收集不到全宇宙的寶可夢,你只有手上你知道的那幾隻寶可夢,他們叫做DTRAIN。
link |
那我們在DTRAIN上面找一個最好的Threshold,叫做HTRAIN。那這個是理想,這個是現實,我們都知道俗話說的就是理想很豐滿,但現實很骨感。
link |
那要問的就是到底理想跟現實會有多大的差距呢?我們的期待是什麼?我們當然期待理想跟現實越接近越好。什麼叫理想跟現實越接近越好呢?我們的理想是我們找到了一個H0,我們把這個H0用在D0上,我們可以得到一個Loss。
link |
這個是我們在理想的狀態上可以得到最好的Loss,可以得到最低的Loss。但實際上因為我們手上並沒有D0,我們手上只有DTRAIN,那我們從DTRAIN裡面只能找到HTRAIN。
link |
HTRAIN跟H0顯然是不一樣的,因為他們是從不同的資料裡面找出來的,他們要minimize的Loss Function是不一樣的,這個Loss Function不只是跟H有關,它也跟Define這個Loss Function的資料是有關的。
link |
那因為我們拿來Define這個Loss的資料是不一樣的,所以我們找出來的H也是不一樣。所以HTRAIN跟H0是不一樣的,那我們把這個HTRAIN用在D0這一組Data上的時候,它到底跟H0用在D0這組Data上的時候差距有多少呢?
link |
那塊H0它是D0上面最好的H,所以我們不可能找到其他的H比H0還要在D0上的表現更好。我們只能找到DTRAIN,但是DTRAIN跟D0在同一個資料上的表現到底有多大的差距呢?這就是我們接下來要問的問題。
link |
你可能以為這只是隨便舉一個例子,不是!這個是真的有實作的,我實作了一下。這個是數碼寶貝資料的來源,這個是寶可夢資料的來源。
link |
剛才雖然說我們不可能真的收集到所有的寶可夢跟數碼寶貝,但我們先假設現在我們在圖鑑裡面收集到的寶可夢跟數碼寶貝跟全宇宙的寶可夢跟數碼寶貝的分佈已經很接近了。
link |
我們假設現在圖鑑裡面有的寶可夢有819隻,數碼寶貝有971隻,他已經非常充足了,他跟D0其實是蠻接近的。
link |
這邊要提醒一下說,在多數的任務裡面,我們其實是不知道D0的。比如說你今天要做語音辨識,D0顯然是你要收集到全世界所有人說的所有句子,這件事顯然是不切實際的。
link |
一般在實際的應用裡面,因為沒有D0,所以多數的這種充一般常見的做法就是你會準備一個testing set,這個testing set也是從D0sample出來的,那你期待這個testing set對D0對所有的data是有代表性的。
link |
回到寶可夢與數碼寶貝的問題,我們從圖鑑裡面找出819隻寶可夢,971隻數碼寶貝,我們把他複雜的程度畫出來,你會發現他的分佈是長得像這張圖這個樣子。
link |
這個橙色的是數碼寶貝的分佈,藍色的是寶可夢的分佈,他們之間有一些重疊的地方,不過顯然確實如同我們觀察,我們所猜測的數碼寶貝是比寶可夢的線條更加複雜的。
link |
橫軸越往右代表線條越複雜,縱軸代表有這種複雜度的動物的寶可夢或數碼寶貝的個數有多少。
link |
根據這些資料,我們計算一下H0是4824,然後我們還計算一下如果你把H0用在D0上,你的錯誤率是0.28。
link |
提醒一下,D0並不是真正的D0,因為還有很多數碼寶貝和寶可夢是還沒有發現的,我們現在只是假設我們已經發現了所有的寶可夢和數碼寶貝而已。
link |
接下來,假設我們要準備一個training dataset,那我們去野外抓了200隻動物,抓完以後都標上標記說他是寶可夢還是數碼寶貝。抓了200隻,這個東西叫做D-train。
link |
假設我們手上沒有圖鑑,沒有完整的寶可夢和數碼寶貝的資料,你去路上抓了200隻來,然後把他叫做D-train。抓完200隻以後,我們看一下他的分布長得是這個樣子。
link |
其實D-train的分布,我們叫他第一個training set叫D-train1好了。D-train1的分布跟D0的分布其實算是蠻類似的,他並沒有差距很大。
link |
那我在D-train1上面找一個H,找一個可以把D-train1做得最好的H,我發現這個H-train1,H-train1代表在D-train1找出來最好的H,他是4727。
link |
那他的loss是多少呢?把這個H-train1在D-train1上面算一下loss,我們的loss是0.27,錯誤率是27%,就是你用這個H-train1當作你的threshold,跑在這個D-train1上,錯誤率是27%。
link |
講到這邊,有人可能會有突然有一個問題,咦?怎麼這個H-train1,D-train1他的loss還比這個L-H-O,D-O的loss還要更低啊?
link |
剛才不是說H-O就已經是最好的那個threshold了嗎?照理說應該他就算出來的loss應該是最低的啊,應該沒有辦法算出更低的loss。
link |
但是你仔細想一想,這個H-O他的loss最低是說他在D-O這組data上,他的loss最低,並不代表他在所有任何可能的資料集上,他的loss是最低的。
link |
所以H-train1他是在D-train1上,他在D-train1這個資料上面,他的loss是最低的,他甚至有可能比H-O跑在D-O上面的loss還要更低。
link |
那如果你一下子想不明白的話,有一個很直觀的解釋啊,假設我們現在在做training的時候,我們只sample兩隻動物,正好找到一隻就是寶可夢,一隻就是數碼寶貝,那你顯然可以找到一個H,把兩隻動物分開。
link |
所以這個時候你的錯誤率是多少?你的錯誤率其實是零啊。所以其實在訓練資料上,你有可能做出非常低的錯誤率,甚至比H-O在D-O上面的錯誤率還要更低。
link |
所以如果你看到有某一個H在某一個資料上,他得到的錯誤率比H-O在D-O上面的錯誤率還要更低,完全不需要壓抑。
link |
但是我們真正關心的並不是H-O在D-O上面的錯誤率有多少,我們真正關心的是,如果我們把H-O用在D-O上面的時候,到底錯誤率會是多少呢?
link |
我們發現一用上去,錯誤率28%,我們發現理想跟現實很幸運的居然是差不多的。我們這邊在這個例子裡面,理想跟現實是一樣的,那這個就是我們最樂見的狀況。
link |
但是這只是運氣好而已,在另外一個平行宇宙中,你可能也抓了200隻寶可夢跟數碼寶貝。因為我們抓200隻寶可夢數碼寶貝的時候,你是從整個數碼寶貝寶可夢的整個集合裡面去隨便sample200隻出來。
link |
所以每次抓出來的200隻在不同的平行宇宙裡面,在做同一個實驗的時候,抓出來的200隻不一定是一樣的。假設在另外一個平行宇宙裡面,我們再做一次抓200隻寶可夢跟數碼寶貝的實驗,我們抓出了另外一個訓練的資料集,叫做D-Train-2。
link |
D-Train-2的分布是長這個樣子的,你發現他明顯跟D-O有明顯的差別,那這一次我們不知道為什麼抓到了比較多的數碼寶貝,抓到了比較少的寶可夢,所以看起來D-Train-2跟D-O他們的長相不太一樣。
link |
那你在這個D-Train-2上找一個最好的threshold,他找出來是3642,其實跟H-O還有蠻明顯的差距的。如果把H-Train-2跑在D-Train-2上面,其實結果非常的好,你的錯誤率是0.2,你的錯誤率是20%。
link |
但是這只是H-Train-2在D-Train-2上面的結果,我們剛才說,你要在一個training set上得到非常低的錯誤率根本就是很容易的,你只要sample兩筆資料,一個是寶可夢一個是數碼寶貝,你直接就可以得到0%的錯誤率。
link |
所以在training的資料上得到低的錯誤率,沒有什麼好令人高興的,你真正在意的是,我們把這個H-Train-2用在所有的資料上面的時候,那我們得到的錯誤率到底是多少呢?
link |
在這個實驗裡面,因為H-Train-2跟H-O其實差距非常的大,H-Train-2只在D-Train-2上面表現得好,它在D-O上面表現得並不好,當我們把H-Train-2放在D-O上面的時候,我們的錯誤率是37%。
link |
所以這邊學到什麼?得到的結果好壞,取決於你sample到什麼樣的資料,有時候你sample到好的資料,你的理想跟現實就很接近,有時候你sample到不好的資料,理想跟現實就很遙遠。
link |
我們把我們剛才講的事情舉個例子,用數學式來表示它。我們說理想跟現實很接近,我們要的是什麼呢?我們如果用數學式子來表示它的話,我們寫成這個樣子。
link |
我們希望當H-Train在D-O上面算loss的時候,減掉H-O在D-O上面算loss的時候,它們的差距小於等於某一個很小的數值delta。
link |
Delta是一個你自己設的數值,就看你希望理想跟現實有多接近。如果你覺得理想跟現實差一點,也沒有差,那delta你設大一點0.1。如果你很要求理想跟現實很接近,那你delta設小一點0.000001。
link |
這個delta是你自己決定的,看你期待理想跟現實可以有多接近,怎麼樣理想跟現實接近的程度才是你滿意的。
link |
這邊再提醒大家一下,這個L-H-O-D-O,它其實一定會比L-H-Train-D-O還要小。
link |
為什麼?同樣在D-O上面計算loss,H-O是無人能及的,因為它是在D-O上面找出來最好的一個threshold。
link |
D-O就是它的BGM,因為它在自己的BGM裡面是不可能會輸的,所以H-O在D-O上面算loss的時候,沒有人可以比它更小,沒有人可以比它更厲害。
link |
所以L-H-O-D-O一定會比L-H-Train-D-O還要小,但是我們只希望,雖然L-H-Train-D-O不可能比L-H-O-D-O還要小,但我們希望它們至少不要差太多。
link |
這邊我想再強調一下,H-O要好是在D-O上面才會好。
link |
有時候你甚至會看到H-Train在D-Train上面,它的loss是小於H-O和D-O的。
link |
這個是一個正常的狀況,就是H-O在D-O上面是無人能及的,但是並不代表它的loss一定會比其他的data set上面的其他的threshold所算出來的loss還要小。
link |
這句話其實怎麼樣才能夠滿足這個敘述呢?怎麼樣才能夠讓現實跟理想很接近呢?等一下很快的跟大家推導這件事情,什麼樣的D-Train可以讓理想跟現實很接近呢?
link |
如果D-Train滿足下面這個藍色框框裡面的特性,理想跟現實就會很接近。
link |
怎麼樣的特性呢?下面這個框框裡面講的是窮舉所有可能的H,窮舉所有可能的threshold,H從1到1萬。
link |
對所有可能的H而言,在D-Train上面算出來的loss跟在D-O上面算出來的loss,如果對所有的H而言,在D-Train上面算出來的loss跟D-O上面算出來的loss小於等於二分之delta的話,那最上面這個藍色框框裡面的狀況就會成立。
link |
如果你要理想跟現實很接近,那怎麼辦?你只要sample到一個training的資料,這個training的資料滿足這個特性,那理想跟現實就會夠接近。
link |
什麼特性?對所有的H而言,計算在D-Train上跟計算在D-O上面的loss,他們的差距小於等於二分之delta。
link |
那我們先很直觀的來解釋這件事,這個式子告訴我們說,不管你選擇的H是誰,算在D-Train跟算在D-O上面,他們的loss的差距都很小,小於等於二分之W。
link |
這意味著什麼?這意味著D-Train跟D-O很像,因為他們很像啊,D-Train跟D-O很像啊,所以你不管拿什麼樣的H過來,他們算出來的loss都是差不多的。
link |
如果D-Train跟D-O很像,對所有的H來說D-Train跟D-O很像,那我們其實就可以保證推得我們從這個D-Train找出來的H-Train,我們從這個D-Train找出來的threshold用在D-O上面的時候,跟H-O跑在D-O上面的時候,它的差距是小於等於delta,一個很小的數值。
link |
這個是直觀的解釋,什麼叫做好的training data,什麼叫做可以讓理想跟現實接近的training data,當你的training data跟所有的資料的分布很接近的時候,你可以做到這件事。
link |
那如果你要用數學的證明,如果你不要這種直觀的解釋的話,數學的證明在下一頁,那如果以下的推導你覺得太快的話,就直接跳過就好了。
link |
這個L-H-Train-D-O一定會小於等於L-H-Train-D-Train加二分之delta。我們現在要推導的是說,在假設中間這個藍色框框成立的前提之下,上面這個藍色框框就會成立。
link |
因為中間這個藍色框框是前提,它已經成立了,所以它告訴我們說,有一個D-Train,同一個function,同一個threshold,在D-Train上算Loss,跟在D-O上算Loss非常接近。
link |
所以現在我們在D-O上面根據H-Train算出來的Loss,跟在D-Train上面用H-Train算出來的Loss,它們會很接近,它們中間的差距一定小於二分之delta。
link |
所以這個式子是成立的。接下來告訴你說,L-H-Train-D-Train加二分之delta一定小於等於L-H-O加L-H-O-D-Train加二分之delta。
link |
為什麼?因為上面這條畫紅色線的Loss一定小於等於下面這條畫紅色線的Loss。為什麼?因為H-Train是在D-Train上面找出來的,H-Train是可以讓在D-Train上面的Loss算出來最小的那個H-Train。
link |
所以只要看到他們這個上標跟下標的那個文字是一樣的,就代表說這個H-Train是在D-Train上找到的。如果上標跟下標的這個文字是一樣的,或者是顏色是一樣的,就代表說這個D-Train是H-Train的BGM,所以H-Train在D-Train上面是沒有人可以比它Loss更小的。
link |
所以當你把H-Train換成H-O的時候,你的Loss一定會稍微大一些。所以L-H-Train和D-Train會小於等於L-H-O-D-Train。
link |
接下來,再套中間這個藍色框框裡面的結論,一次我們說我們有一個D-Train,它可以滿足代入任何的Threshold,D-Train上的Loss跟D-O上的Loss都很接近。所以D-Train上的Loss、D-Train上用H-O算出來的Loss跟D-O上用H-O算出來的Loss,它們是很接近的,最多就差一個二分之Delta。
link |
所以我們得到這個式子,L-H-O-D-Train加二分之Delta,它就會小於等於L-H-O-D-O加二分之Delta,再加二分之Delta。
link |
所以我們得到一個式子,就把兩個二分之Delta加起來變成Delta。所以我們得到的式子是L-H-Train-D-O,小於等於L-H-O-D-O加上Delta。
link |
再整理一下,我們就可以得到上面藍框框的式子。那如果這個地方你沒有辦法跟上的話,也無所謂啦,你就記得說,怎麼樣讓理想跟現實比較接近?
link |
要找到一個具有代表性的D-Train,不管是哪一個Threshold、哪一個H,在D-Train上量跟D-O上量都差不多,那我們就可以讓理想跟現實很接近。
link |
剛才最開始說我們的目標是理想跟現實要很接近,那現在我們的目標是,我們要Sample到一個好的Training Data,
link |
這個好的Training Data,不管帶入什麼樣的H,在D-Train上,在這個Training Data上算出來的Loss,跟真正所有資料上面算出來的Loss,它的差距要小於等於某一個很小的數值,叫做Epsilon。
link |
那我這邊把二分之Delta換成Epsilon,那只是為了之後不要再寫除二這件事,希望不要造成大家的困擾。
link |
所以我們現在知道說,你要怎麼讓理想跟現實很接近,那就要看你Sample到什麼樣的訓練資料,要看你有沒有含著金湯匙出生,含著金湯匙出生,那理想跟現實就很接近了。
link |
接下來我們要問的問題就是,那我們沒有含著金湯匙出生的機率有多大呢?
link |
我們如果隨便Sample一組訓練資料,隨便Sample一組D-Train,Sample出來,上面這個數值不滿足,沒有辦法讓理想跟現實接近的機率到底有多大呢?
link |
如果這個機率很大,那我們就要小心了,我們的理想跟現實差很遠的,如果機率很小,那就恭喜你,我們理想跟現實是很接近的。
link |
那以下的討論,這邊要強調一下,以下的討論跟模型沒有關係,所以它適用於Deep Learning或者是其他的模型。
link |
那再來呢,以下的討論對於資料本身的分佈並沒有假設,我們並沒有對資料假設說它一定要是Gaussian Distribution。
link |
最後呢,以下的討論跟Loss Function是沒有關係的,它適用於任何Loss Function。
link |
所以今天雖然我們在討論的一直是一個二元分類的問題,但你完全可以把今天的討論直接套到Regression上面。
link |
因為你知道這個Classification跟Regression的差距只是Loss Function不同啊,Classification上面你可能會用Cross Entropy作為你的Loss,Regression上面你可能會用NSE作為你的Loss。
link |
那今天等一下的討論跟Loss Function是沒有關係的,所以它可以不只用在分類上,它也可以用在Regression上面。
link |
所以以下要講的這個機器學習的原理,它是一個非常一般化的原理,它可以用在很多不同的情境下。
link |
好,那我們現在的主題是什麼呢?我們現在的主題就是沒有含著金湯匙出生的機率到底有多大呢?
link |
Sample到一組壞的訓練資料的機率到底有多大呢?
link |
以下我們用一個點來代表一組訓練資料。注意一下哦,在這個圖示裡面,一個點不是一筆資料哦,一個點是一組訓練資料。
link |
那藍色的點代表好的訓練資料,可以讓理想跟現實接近的訓練資料。
link |
橙色的點代表壞的訓練資料,會讓理想跟現實有差距的訓練資料。
link |
好,再強調一次,現在每一個點不是一筆資料,而是一組訓練資料。
link |
比如說,我們剛才Sample過一個好的訓練資料,叫做D圈1,在這個圖上它就是一個點。
link |
我們剛才Sample到一組很壞的訓練資料,叫做D圈2,它也是圖上的一個點。
link |
好,那假設我們每一個訓練資料都有被Sample到的機率。
link |
如果我們可以把這邊每一個橙色的點的機率,通通都算出來進行加總,
link |
我們就知道我們Sample到壞的訓練資料的機率有多少。
link |
那我們當然希望這個橙色的點,它所佔的總機率,在Sample所有的資料裡面佔的總機率越小越好。
link |
好,那怎麼計算這些橙色的點所佔有的機率總共有多大呢?
link |
直接一個點一個點算,顯然是很麻煩的,不知道要怎麼做。
link |
那這邊有一個方法來估測橙色的點所佔的機率有多少。
link |
怎麼估測呢?我們先回憶一下什麼叫做一個Data Set D圈,它是不好的。
link |
如果你可以找得到任何一個H,這個H可以讓在D圈上算出來的Loss跟D2上算出來的Loss大過Excel,那這個訓練資料就是不好的。
link |
那前幾個投影片裡面我們是正面的定義怎麼樣叫做一個好的訓練資料,
link |
就是對所有的H而言,在Trending Set上算出來的Loss跟所有資料上算出來的Loss是夠接近的,叫做好。
link |
那前面定義好是說所有的H都要滿足,那現在反過來不是好就是壞,什麼叫做壞的訓練資料?
link |
就是找到一個,哪怕只有一個,找得到一個H,讓訓練資料上算出來的Loss跟所有資料上算出來的Loss有足夠的差距,
link |
所以每一個H,每一個壞的資料後面一定有至少一個H把它弄壞。
link |
那我們這個圖示的意思就是H1它弄壞了這些資料,就是說H1這一個Threshold,這一個參數,這一個數值,它會讓這一些Trending的Data跟所有的Data的差距超過Excel。
link |
然後H2會讓這九個訓練資料它的Loss,這個H2在這九個訓練資料上,它的Loss會跟所有的訓練資料D2差距大於Excel。
link |
然後H3它很厲害,它弄壞了這麼多的訓練資料,這一些訓練資料當用H3計算Loss的時候,跟H3在所有資料上計算的Loss會超過Excel。
link |
所以每一個橙色的點至少會被一個H,某一個H晃到。當然有可能說同一個資料集它會被好幾個不同的H弄壞,這些事情是有可能發生的。
link |
但是總之每一個壞的資料集至少會被一個H弄壞,那被多的H弄壞也叫壞的資料集,被一個H弄壞也叫壞的資料集。
link |
好,那我們就要進入在接下來的推導了。所以我們現在把被H弄壞的這些訓練資料的機率,我們這邊就用比較簡單的文字來表示它。
link |
我們說某一個訓練資料是差的因為H1的時候,就代表說這個訓練資料是被H1弄壞。那我們把這個黃色框框裡面的這一些訓練資料的機率加起來,叫做P of D trend是差的因為H1的關係。
link |
然後這一些訓練資料的機率加起來,叫做P of D trend是差的因為H2的關係。
link |
現在知道訓練資料是差的出現的機率,等於這邊所有框框裡面框到的機率的union的連擊,對不對?你窮取所有的H,然後計算出資料集是差的因為H的機率。
link |
然後把所有的H統統union起來,當然因為它們有overlap的地方啦,所以你不是直接加起來,你是union起來,那你會等於資料集是差的機率,你會等於D trend是差的機率。
link |
但是呢,我們今天如果要考慮這個overlap的地方,顯然是很麻煩的,我們有點難以考慮這個overlap的地方。所以我們取一個upper bound,我們不知道怎麼考慮overlap的地方,那我們就把union改成summation。
link |
我們把H1這些範圍加H2這些範圍加H3的這些範圍不取連擊而直接相加,如果直接相加的話,這些重複的地方就是如果某個資料集會被好幾個H弄壞,那就會被重複計算到,所以它是一個upper bound。
link |
所以我們知道說,今天我們sample到我們拿到差的資料集的機率,它會小於等於summation over所有可能的H,然後呢,把這一個H會弄壞的資料集它的機率全部加起來,然後summation over所有可能的H,那這是我們拿到壞的資料集的upper bound。
link |
會不會那一堆的p,我以為p是0到1之間的機率,那如果有100個加起來會不會超過1?
link |
超過1,對不對?你說你這邊隨便把union改成summation,會不會超過1?如果是union的話,顯然是不會超過1的嘛,那summation有可能會超過1,有可能會,所以當超過1的時候,這個理論就完全沒有用了。
link |
所以實際上,通常你算出來都會超過1,所以這個理論沒什麼用。
link |
好,那如果沒有問題的話,那我們就繼續下去囉。
link |
好,那接下來的問題就是,我們能不能夠算出給定某一個H,會被它弄壞的那些D圈出現的機率呢?
link |
可以的,等一下我們只講觀念,不講證明,雖然這個證明理論上你在機率統計那門課應該是學過的啦,但我們這邊只講觀念。
link |
好,我們來回憶一下,什麼叫做D圈是差的?因為H的關係。
link |
什麼意思呢?就是如果我今天拿H來在D圈上計算Low,相較於H拿在D0上計算Low,它的差距大於Epsilon,我們說這個叫做D圈是差的。
link |
好,那我們再來看一下,回憶一下大L是怎麼算出來的?大L是D裡面的每一筆訓練資料計算出來的小L的平均。
link |
好,那我們現在用一個三角形來代表某一筆資料用某一個H計算出來的Low。
link |
那今天所謂的H在D0上面計算出來的Low是什麼呢?
link |
就是我們在很多很多筆,在所有我們可以收集到的宇宙間,所有可能收集到的資料上面,都去計算小L,再去平均,就是這個H在D0上面的Low。
link |
好,那這個是LHD0這一項,那LHD圈這一項呢?我們記得D圈是哪來的?D圈是從D0裡面sample出來的。
link |
所以當我們在算H在D圈上面的Low的時候,實際上我們做的事情就是從全世界所有資料的Low裡面sample一些Low出來,sample一些小L出來做平均,就是H在D圈上算出來的Low。
link |
所以你在所有的資料上面算出來的小L的平均就是H在D0上算出來的Low。你在部分sample到的資料上面算出來的Low的平均就是H在D圈上面的Low。
link |
而這兩個東西啊,他們顯然會有可能是蠻接近的,對不對?因為這裡下面的這些數值就是從上面這些數值裡面sample出來的。但是他們到底有多接近呢?
link |
這個你其實在機率與統計那一門課學過了,那我們就不講你可能已經知道的東西,我們直接告訴你結論。那假設你已經忘記機率與統計你學過什麼的話,你就記得結論。
link |
這邊的結論是什麼?這邊的結論是,這個就是Hofding的Inequality。D圈被某一個H弄壞的機率,它有一個upper bound,有一個上界。
link |
這個上界小於等於兩倍的exponential,負兩倍的n乘以ε平方。那這邊有一個前提是,我們要假設Loss它的值是介於0到1之間,上面那個式子才會成立啦。
link |
那我剛才有說Loss其實沒有什麼限制,那這邊還是有一個限制啊,需要介於0到1之間。但是對於Loss的function長什麼樣子,你是可為的不可為的,是identity還是cross entropy還是regression,這點是沒有限制的,只對它數值的範圍有限制。
link |
n是什麼?n是訓練資料的數目,就是在D圈裡面的訓練資料的數目就是N。
link |
所以我們現在知道一件事,我們現在知道說,某一個H把D圈弄壞的機率小於等於兩倍的exponential,負2nε平方。
link |
好,那接下來呢,你就是把兩倍的exponential,負2nε平方,代進去。所以變成小於等於,因為這個東西是它的一個上界啦,所以小於等於summation over所有的H,兩倍的exponential,負兩倍的nε平方。
link |
那你發現啦,兩倍的exponential,負兩倍的nε平方跟H是沒有關係的,對不對?這個雖然說summation over所有的H,但是summation裡面的東西跟H是沒有關係的。
link |
所以我們可以直接看一下,我們有多少的H,我們的大H裡面總共有多少個可能的選擇,把它直接乘到兩倍的ε,負2nε平方前面。
link |
所以我們現在,我們已經得到我們的結論,就是一個training set,它會壞掉的機率有多少呢?
link |
小於等於你可以選擇的function的數目,就是H,大H的絕對值,乘上兩倍的exponential,負兩倍的nε平方。
link |
那怎麼讓這個sample到的data是壞的的機率變低呢?怎麼讓dtrain是差的機率變低呢?
link |
那你就要看一下這個式子了,怎麼讓這個機率變低呢?
link |
那就看看這個式子裡面有什麼,Excel是你自己訂的啦,就看你希望現實跟理想有多接近嘛,Excel是你自己訂的。
link |
但n跟H是你可以調的,我們今天如果讓n越大,那sample到壞資料的機率就越低。
link |
n是什麼?n是訓練資料的數目,所以知道訓練資料的數目越多,一個training set裡面訓練資料的數目越多,你sample到壞資料的機率就越低。
link |
然後另外一個是,假設這個H的絕對值越小,那sample到壞資料的機率也越低。
link |
所以假設你有一個比較小的H,你讓可以選擇的function的數目變少的話,那sample到壞資料的機率也會跟著變低。
link |
好,那這邊是圖示一下,當你把n調大的時候,會得到什麼樣的效果。
link |
因為你把n調大的時候,那實際上做的事情就是讓每一個H可以弄壞的training data變少了。
link |
當我們把n調大的時候,一個H要把某一個training set弄壞的難度就增加了。
link |
所以當你把n調大的時候,每一個H他可以弄壞的training data set就變小了。
link |
所以整體而言,比較差的sample到差的training data set的機率就變小了。
link |
那另外一方面,如果我們今天把大H的絕對值變小,那達到什麼樣的效果呢?
link |
每一個H他們管的範圍還是一樣,但是當我們把H的數目變小的時候,我們也可以讓差的data set、壞的data set被sample到的機率變小。
link |
所以n跟H他們從兩個不同的方向,讓差的data set被sample到的機率變小。
link |
好,那這邊我們就可以跟大家舉一個例子,看一下這個式子是怎麼運作的。
link |
假設現在大H是1萬,我們剛才說我們的threshold就從1設到1萬,總共只有1萬個可能。
link |
n training data我們說就是100筆,就是抓100隻動物來,然後標註他是寶可夢還是數碼寶貝。
link |
Excelon是你自己決定的,就是你要求說什麼叫做好的訓練資料,好的訓練資料就是任何的H在訓練資料上算出來的Loss跟所有資料上算出來的Loss要小於等於Excelon,也就是小於等於0.1。
link |
把這個H,把這個n,把這個Excelon如果都帶進去的話,你算出來的數值是多少呢?算一下,小於等於2707啦。
link |
這個機率,sample到壞的機率,sample到壞data的機率,小於等於2707。
link |
所以這個式子就是一個幹話,他什麼都沒有說,他告訴你有,你sample到差的機率就是小於等於2707。
link |
這個理論推導出來的結果,這種狀況非常常發生。
link |
所以你會發現說,你真的在做機器學習的時候,幾乎沒有人會特別把這些理論拿出來在實際的資料上面進行計算,因為你算出來往往都是大於1的數值。
link |
但他只是試圖去解釋機器學習的原理,告訴你說這個model的complexity跟訓練資料到底對結果造成什麼影響。
link |
那他是一個upper bound,他是一個上界,這個上界離實際的數值差距往往非常的巨大。
link |
所以在實際的應用上,你很難把這個理論派上用場。
link |
我這邊隨便舉一個例子,哇,這個機率大過1,等於什麼都沒有講。
link |
不過我們今天怎麼讓壞的訓練資料被sample到的機率變小呢?增加訓練資料的數目。
link |
所以發現說,增加訓練資料的數目其實是非常有效的。
link |
當我們把訓練資料從100筆增加到500筆的時候,sample到壞資料的機率就小於等於0.91了。
link |
如果我們今天把資料增加到1000筆的時候,sample到壞的資料的機率就變得非常低,0.00004。
link |
sample到壞資料的機率就變得非常低了。
link |
你可以想見說,在一般的情境下,在正常的模型上,比如說你作業1用的模型上,這個h它是非常非常巨大的一個數字。
link |
所以你真的帶到這個不等式裡面去計算,你往往算出來的上界都是大於1的。
link |
這邊我們也可以換另外一個方式來問這個問題。
link |
有人可以問說,如果我今天希望壞的資料被sample到的機率小於等於某一個小的數值delta,那我需要準備多少筆訓練資料才夠呢?
link |
你想要這個sample到壞資料的機率小於等於delta,那如果你要保證這件事成立,那你就要讓它的上界,就是h的絕對值乘以兩倍的exponential-2nx²,你就要讓這個上界小於等於delta。
link |
然後你再把這個式子做一下組裝以後,把這些項目做一下左右對調以後,你可以推導出你需要多少的訓練資料呢?
link |
訓練資料的數目需要大於等於兩倍的exponential-2nx²分之log兩倍的h的絕對值除以delta。
link |
假設你今天希望這件事情sample到壞資料的機率越低越好,那你的n就得越大越好。
link |
如果你今天對於什麼叫做理想跟現實的要求非常的龜毛,你希望exponential很小,那你的n也要越大越好。
link |
如果你今天的模型很複雜,就是這個大h的值越大,那你n的訓練資料量也要越大越好。
link |
所以我們推出n要大於等於兩倍exponential-2nx²分之log兩倍的h除以delta。如果代進去數值的話,h是1萬,delta是0.1,我們希望抽到壞資料的機率應該小於0.1。
link |
然後我們對於exponential的要求是0.1,那算出來n要大於等於610。
link |
也就是說假設你的訓練資料裡面有大過610隻的寶可夢加數碼寶貝的話,那你抽到壞資料的機率就小於10%,小於0.1了。
link |
這邊我們又遇到了一個問題,在這個式子裡面有一個h的絕對值,我們說這個h的絕對值是什麼?
link |
它是你有可能選擇的function的數目,但你仔細想一想,在剛才的例子裡面,我們說h就是1,2,3到1萬,它是離散的,總共只有1萬個可能。
link |
但是一般在train network的時候,就算不是train network,就算只是linear model的時候,我們的參數不是都是連續的嗎?如果參數是連續的,那這個h的絕對值不是應該是無窮大嗎?
link |
如果它是無窮大的話,那這個式子還有什麼用呢?那你就只是推出說sample到差的data的機率小於等於無窮大而已,這句話有講跟沒有講是一樣的。
link |
如果要回答這個問題,有兩個回答的方向,第一個回答方向就是告訴你說,世界上沒有真正連續的東西,對不對?
link |
在這個數位的世界裡面,在電腦裡面,所有的計算其實都是discrete的,所有的計算都是離散的,對不對?
link |
你在表示一個參數的時候,在你表面上覺得它是連續的,但它的精度還是有限的啊,你用8個bit,16個bit,32個bit來描述一個數值,你的精度終究是有限的。
link |
所以這個h還是可以數的,就算是你號稱說你用的參數是連續的,但這個連續不是真正的連續,它其實還是離散的,所以h的速度還是算得出來的,只是非常大而已。
link |
所以這是第一個解釋的方法,那希望你不要覺得這個解釋的方法太牽強,希望這個解釋的方法可以稍微說服你說這個式子偶爾還是有機會可以派上用場的。
link |
好的,另外一個真正的解釋的方法是什麼呢?有一個東西叫做VC Dimension,它是另外一個方法來計算一個參數是continuous的模型的複雜程度。
link |
所以就算有一個模型,它的參數是連續的,並不代表它的複雜程度就是無窮大,還是有辦法估計的,那這個描述一個模型複雜程度的指標就叫VC Dimension。
link |
那這一門課我們並不會提到VC Dimension,那如果你想要知道VC Dimension是什麼,你可以收看林宣田老師的機器學習,你會更深入的了解怎麼評量一個模型的複雜程度。
link |
好,那我們剛才已經看到說,怎麼讓理想跟現實比較接近呢?要嘛是增加訓練資料,要嘛是減低模型的複雜程度。
link |
增加訓練資料,它的副作用就是你要耗費比較大的成本,你往往沒有辦法自己決定說你的訓練資料要用多少。
link |
那如果在課堂上作業的訓練資料是給定的,所以這個部分你是沒有辦法自己決定的,那你會把所有給定的資料通通都用上,但你沒辦法用更多。
link |
今天在現實的application中,你在一個公司工作,你可能以為大公司收集資料都很容易,其實也不一定啦,大公司不見得收集資料很容易,
link |
尤其是假設你的主管對機器學習沒有那麼了解,你就跟他說我們今天先花個一百萬收集資料吧,他就告訴你機器自己會學習,收什麼訓練資料。
link |
你說他一百萬訓練資料,你就要保證說進步正確率要變2%以上,不然你不准收訓練資料,就遇到各式各樣的卡啦,所以訓練資料不是你想收就可以收的。
link |
另外一方面,H倒是你可以自己決定的,所以從這個角度看來,如果我們要讓現實跟理想越接近越好,這個H好像應該要越小越好喔。
link |
但H越小越好,會遇到什麼樣的問題呢?H太小的話會遇到什麼樣的問題呢?
link |
如果你想想看,H太小會有什麼樣的副作用?當我們說一個訓練資料是好的意思的時候,我們指的是什麼?我們指的是理想跟現實是接近的。
link |
當我們說D圈是好的的時候,意味著不管是哪一個H,D圈上算出來的Loss跟D2上算出來的Loss都很接近。
link |
然後這個條件可以告訴我們說,在D2上,不管你是用H2算,還是用H圈算,你算出來的Loss,他們的差距都會小於等於一個小的數值,叫做Delta。
link |
所以當我們說一個訓練資料是好的的時候,我們其實意思是說,用這個訓練資料上面所算出來的Loss,用這個訓練資料所找出來的H圈,在D2上面跟最好的這個H2,他的Loss的差距沒有太大。
link |
但是當我們把這個H的絕對值弄得很小的時候,會發生什麼事情呢?注意一下這個HO是哪來的。HO是所有大H裡面的小H,可以讓D2上面算出來的Loss,最小的那個H,叫做HO。
link |
當我們把H調得很小的時候,你可以選擇的小H就非常有限了。當你可以選擇的小H非常有限的時候,你就沒有辦法讓HO在D2上面算出來的Loss真的很小。
link |
當你可以選擇的H有限的時候,你沒有辦法真的找到一個很好的HO,他在D2上面算出來的Loss很小。
link |
所以當有很小的H的時候意味著什麼?意味著你的理想崩壞了,你的理想根本就是壞掉的東西。
link |
所以這個時候你就算是讓現實跟理想很接近,那理想這個壞掉的東西,那你拿到的其實也是一個壞掉的東西。
link |
好,講到這裡呢,我們發現我們陷入了一個兩難。如果我們想要讓理想跟現實比較接近的話,我們需要比較大的N,比較小的H的絕對值。
link |
但是通常我們比較難收集到比較大量的N,通常N不是你可以自己決定的。也許你就會想說,為了讓理想跟現實比較接近,你選了一個比較小的大H,讓你可以選擇的function的數量比較少。
link |
但是如果你選擇了一個比較小的大H,會造成什麼問題呢?選擇比較小的大H雖然可以讓理想跟現實比較接近,但他可能會造成你的理想直接崩壞。
link |
如果你的理想崩壞的話,就算現實跟一個崩壞的理想接近,那也是一個崩壞的現實,那也不是我們要的。
link |
如果用圖像化的方法來說明的話,左邊是大的大H,右邊是小的大H。
link |
當你有比較大的大H的時候,你的理想會是比較好的,你的HO在DO上面會算出比較小的Loss。如果你只有比較小的大H,那HO在DO上面就可能會算出比較大的Loss。
link |
但是另外一方面,假設我們考慮理想與現實間的距離,如果今天有比較大的H,那理想與現實間的差距就會比較明顯。
link |
也就是說,你的Htrend在DO上面算出來的Loss很有可能會遠大於HO在DO上算出來的Loss。
link |
另外一方面,如果今天的H比較小的話,那理想與現實間的差距就會比較小。
link |
那你在Htrend在DO上面算出來的Loss可能就會比較接近HO在DO上算出來的Loss。
link |
那是因為這個理想已經崩壞了,所以就算現實跟理想接近也沒有什麼用。
link |
看來我們陷入了一個兩難。怎麼辦呢?有沒有可能魚與熊掌都兼得呢?
link |
有沒有可能我們想辦法讓HO在DO上面算出來的Loss可以小,而同時理想與現實又是接近的,
link |
同時Htrend算在DO上面的結果又要接近HO算在DO上面的結果呢?
link |
是沒有可能的。這個可以讓魚與熊掌兼得的辦法就是深度學習。
link |
那至於深度學習怎麼做到這件事情,我們下回分解。