back to index
【生成式AI】快速了解機器學習基本原理 (2/2) (已經略懂機器學習的同學可以跳過這段)

link |
我們先逆過來看,我們先從達成目標開始看起,什麼叫做達成目標比較好的方法呢?
link |
你其實可以把整個最佳化的演算法看作是一個巨大的function。
link |
這個巨大的function做的事情就是,它吃一個你先定好的函數的集合,這邊我們叫大H,
link |
它吃一個你自己定好的評估函數好壞的標準,它把大H跟大L吃進去,然後就吐出一個最好的函數。
link |
這個函數在大H裡面,然後可以讓這個函數帶進大L裡面,它的值越小越好。
link |
那我們期待比較好的最佳化演算法,也許它可以做的事情是,在給同樣的H跟L的時候,它跑得比較快,比較快幫你找出答案。
link |
那有時候你需要的是,這個大L,or F star,它找出來的答案,帶到這個大L裡面越低越好。
link |
有人可能會問說,這個最佳化演算法,它的目標不就是要找出大L最小的那個F嗎?那怎麼還會有越低越好這件事呢?
link |
我不是就應該給我大L最小的那個F嗎?那是因為現在這個最佳化的演算法,它不一定能夠幫你找出大L最低的那個。
link |
它不一定能夠成功找出大L最低的那個,我應該更精確地講,通常找不出大L最低的那個。
link |
但是你期待它,雖然找不出大L最低的那個,至少給我一個比較低的function,我們希望最佳化的演算法,找出來的F star,它的大L越低越好。
link |
那這些最佳化的演算法,雖然我說它是一個函式,好像你把H大L丟進去,F star就直接跑出來。但是這個函式,你有把它想成一個機器的話,它有很多按鈕要事先設定好。
link |
比如說,如果我們用的最佳化的演算法是brilliant descent的話,那你要先設定好learning rate、batch size,還有初始化你的模型的參數。這些你不知道是什麼,沒有關係,首先上課錄影裡面有。
link |
或者是,如果你不知道是什麼的話,反正就是告訴你說最佳化演算法要用它,得先做設定。設定這些learning rate、batch size、怎麼做initialize等等,其實是一個技術活。
link |
那這些需要設定的東西,又叫做超參數,又叫做hyperparameter。所以這些learning rate、batch size等等,又叫hyperparameter。
link |
它們是需要人手工去調的,所以常常你會聽到有人說,我做deep learning,花好多時間調參數,大家都叫我參數工。你有沒有做完作業一,有沒有覺得花很多時間在調參數?就是這個感覺。
link |
這個參數指的不是內神經網路裡面的參數,它指的其實是最佳化演算法的參數。這些參數為了避免跟內神經網路的參數搞混,所以通常會叫做超參數hyperparameter。
link |
一個好的演算法,其實我們也會期待說,它對超參數不敏感,最好超參數隨便亂試,用預設值,結果就會好。如果最佳化的演算法,超參數都用預設值,結果就挺不錯的,那你就會覺得說這個最佳化的演算法挺不錯的。
link |
這個是達成目標的部分,接下來我們來看看設定標準的部分。在講設定標準之前,我們先要有一個概念,就是我們在使用這個函式的時候,我們分成訓練跟測試,整個機器學習的framework分成進訓練跟測試兩個階段。
link |
所謂的訓練,指的是找函式的過程。找函式的過程中,我們需要由訓練資料定出我們的loss function,找出這個函式之後,我們就進入測試的環節。
link |
進入測試的環節以後,這個函式就不動,你把資料丟給它,你把輸入丟給它,期待它跑出來的輸出是正確的。但很多時候,在訓練資料上計算出來loss低的那些函式,實際上拿來測試,結果不一定好。
link |
這背後有很多的理論可以講,但是就直覺上你也可以想像為什麼會這樣。因為訓練資料跟測試資料可能長得很不像,所以在訓練資料上面定出來的標準直接拿到測試資料上,結果不一定好。
link |
我們的F-star是在訓練資料上面定出來的標準找到的,在測試資料上應該要有另外一種標準,因為資料不一樣,但是我們並沒有重新去找函式,所以我們得到的結果當然不會好。
link |
我想到我小時候聽的一個故事,我並不知道這件事情是不是真的,我沒有求證過。有一次教育部想要知道全國的高中生他們跑步的速度有多快,跑一百公尺有多快,所以它想要定出一個標準,就會知道說如果你一百公尺跑十五秒算是還可以,如果跑十三秒算是很快,跑二十秒算是一個肥宅。
link |
然後教育部就跟各個學校說,每個學校都派一個人,我們來量一下大家跑步的速度。教育部想說每個學校都sample一個人,全部集合起來,我們就可以得到全國高中生跑一百公尺的速度分布。
link |
結果每個學校以為這是一個跑步競賽,都派他們學校的田徑隊跑最快的來比賽,定出來的標準就高得不可思議。定出那個標準以後,全臺灣99.9%的高中生通通都是肥宅,通通沒有辦法達到教育部定的一百公尺跑步的平均值。
link |
這個故事就是一樣的,標準定在訓練資料上,用在測試資料上,但是不一樣的資料,結果不一定會好。那怎麼辦呢?有一些方法,你可以在尋找還是在定標準的時候做一些額外的考量。
link |
這些額外的考量可以讓你做到說,就算訓練資料跟測試資料分布有一些不一樣,這些額外的考量可以讓你在訓練資料上面找到的函數在測試資料上面比較有機會也是一個好的函數,就算他們的標準、分布不太一樣。
link |
比如說regularization就是其中一個例子。實際上這怎麼做,我們今天就先不講。總之,你只要知道說在訓練資料上面找出來的、根據你定評量函數的標準找出來的好的函數在測試資料上面,結果不一定會好。
link |
接下來我們來看設定範圍。為什麼我們要設定一個範圍呢?為什麼我們要設定找候選函數的範圍,為什麼不把全天下的函數納進來考慮呢?
link |
那是因為我們在這個圖上每一個點就代表一個函數。在所有可能的函數裡面,有一些函數是用我們的評量標準計算出來是好的,然後拿來測試,實際上在測試資料上跑起來結果好。
link |
但有另外一種函數是,它雖然根據我們的評量標準算出來好,但是測試的結果不好。舉例來說,假設有一個函數,它唯一會做的事情就是硬背答案。看你的訓練資料裡面有什麼,它就把輸入跟輸出的關係硬背下來,完全不做任何的推論或舉一反三。
link |
那它在你的訓練資料上面,在你定出來的標準上面,它也會是好的,但是它的測試結果其實就不會太好。這個就是你硬是去fit那個標準。有人定了一個標準,但這個標準有一些漏洞,那你就可以硬去fit它。
link |
舉例來說,你知道課程都有教學評鑑嘛,其實拿到高的教學評鑑有一個很厲害的技巧,就是不要收太多人。假設你要拿到五分滿分的評鑑怎麼做呢?
link |
你只收你自己的研究生收一個,然後告訴他說你一定要給他五分。你要給五分,那你的評鑑標準就是滿分。結果人家會這麼做,如果你真的很在意那個教學評鑑的話。但是這個就是去fit那個教學評鑑的標準而不做其他的考慮。
link |
對函式來說也是一樣,一個印記答案的函式,它可能在標準上面表現得很好,但是在實際使用、測試的時候,結果不太好。我們知道說這些函式,如果我們只憑標準來判斷,我們可能會挑到這種函式,這根本不是我們要的。
link |
所以劃定範圍的部分就是,期待劃一個範圍,直接把這些標準算出來好,但是測試會不好的,直接把它濾掉,直接把它排除在選擇的範圍之外。
link |
所以如果我們把全天下的函式都納進來考慮,你可不可以選到這種,一開始我們就劃一個範圍,不要讓你選到這種,這種根本就不在選擇的範圍之內。
link |
所以你知道,劃定這個範圍就變成是一個很有技巧性的事情,不能太大也不能太小。
link |
所以如果你劃得太大,你可能就會框到一些你不想框到的函式,劃得太小,可能裡面根本就沒有任何一個好的函式,那就變成你想要大海撈針,結果針還不在海裡,所以怎麼撈都撈不到。
link |
所以函式劃的範圍就要不要太大也不要太小,至於怎麼不要太大也不要太小,這個就是一個技術活。
link |
在標準上面算出來好,但測試結果不好的函式,什麼狀況下會變得很多呢?當你訓練資料少的時候。
link |
所以你訓練資料越少,這種函式就會越多。所以你訓練資料少的時候,你劃的範圍就要保守,劃的範圍就要小。
link |
你訓練資料多一點,這種函式就會變得比較少,那你的範圍就可以劃得大一點。
link |
為什麼會這樣呢?你就先把這個結論硬背下來吧,如果你真的想知道,請參見上課的錄影,這裡面有很多數學式,背後都是有很堅實的理論基礎的,大家再自己慢慢研究。
link |
所以不同的候選函式的集合,我們剛才講到說不同的類神經網路的結構,就是對應到不同的候選函式的集合,而這些集合有大有小。
link |
舉例來說,如果比較Convolutional Neural Network,大家都知道CNN就是特別適合用在影像上。如果比較CNN跟Fully Connected Feedforward Network,另外一種很通用的網路結構,CNN的話範圍小,Fully Connected的話範圍大。
link |
所以你就知道說CNN其實適用於資料量比較少的時候,但我們資料量永遠都不夠啦,所以今天在影像處理的時候,你往往就選擇CNN。
link |
那為什麼CNN比Fully Connected的範圍小呢?請見上課錄影講CNN的部分。
link |
在另外一方面,如果我們比較CNN跟Self-Attention,Self-Attention是一個比較大的範圍,而CNN是一個比較小的範圍。那你會發現說近年來影像處理好像從CNN有一點轉移到Transformer,也就是用Self-Attention的趨勢。
link |
這其實意味著什麼?Self-Attention是一個比較大的範圍,比較大的範圍適用於資料量比較多的情況。那就意味著說近年來大家覺得我們影像處理的標註資料也夠多了,多到我們可以把範圍再畫大一點,以囊括更多好的漢字。
link |
所以你可能會發現說近年來文獻上很多做影像處理的論文,就從CNN又稍微移到了使用Self-Attention。那至於為什麼Self-Attention畫的範圍是比CNN更大的,請參見上課錄影。
link |
有一些方法,它的好不是對它現在的目標本身好,而是它可以去support其他面向的技術。我們舉一些例子。舉例來說,在類神經網路的結構裡面,有residual connection,有batch normalization。
link |
像residual connection這種結構,你不知道它是什麼結構也沒關係,反正就是一種特殊的網路結構。這種結構,如果你單從劃定一個範圍的角度來看它,你說不上來好在哪裡,沒什麼好。
link |
但是它的好是什麼呢?它的好是,在這個範圍裡面找一個最好的函式是比較容易的。在用residual network所定出來的候選函式的範圍內,要找一個最佳的函式,找一個load最低的函式,是比較容易的。
link |
雖然它可能不是一個單從劃範圍的角度來看,它可能並沒有相較於其他可能的類神經網路的架構,它可能並不是框到特別好的函式,或並沒有特別的能力去排除我們不要的函式。
link |
但是它仍然常常被使用,因為它可以讓你第三步達成目標最佳化的演算法做起來更為容易。
link |
所以有一些技術,比如說residual connection或batch normalization,它們可能不是特別好的範圍,但是它們可以幫助達成目標這個階段。
link |
或者是說在設定標準的時候,我們在做分類的時候,都會用cross entropy的loss,而不會用mean square的error。
link |
其實在上課錄影也會跟你講到說,之所以用cross entropy的loss一個很重要的原因,是因為它對達成目標比較容易。
link |
這個其實就是這份投影片的總結了,看起來還是花了比我預期的時間還稍微長一點,大概是三十分鐘左右。
link |
所以現在我們就知道說機器學習早函式有三個步驟,所以我們今天在技術開發的時候有三個面向。
link |
今天聽到有人說他提出了一個新的方法,這個方法會比較好的時候,你要想想看這個方法到底是用在這三個面向的哪一個面向,而它所謂的好到底是怎麼的好法。
link |
比如說劃定範圍的時候,是劃一個比過去可以劃的範圍在更大的範圍嗎?還是劃一個比過去可以劃的範圍在更縮限的範圍?
link |
這個是你自己在讀文獻的時候要考慮清楚的,但是如果你了解說機器學習就是三個步驟,而今天各式各樣的方法其實就是在三個步驟裡面選一個面向進行開發,
link |
那你在看文獻的時候可以加快你的速度,讓你更了解各種不同技術間的關係。