back to index
Life Long Learning (1/7)

link |
好,各位同學,大家早!我們來上課吧!
link |
今天要講的主題是Lifelong Learning,Lifelong Learning翻成中文,你可以翻成終身學習,要讓機器做到終身學習這件事情。
link |
我們知道說,你在學習的時候,人在學習的時候,你只有一個腦,你從國小、國中、高中到大學到現在坐在課堂上,你都是用同一個腦在學習的。
link |
但你仔細想想看,當你在做機器學習的時候,機器學習的情境跟人真的是很不一樣。你每一個作業,你都會訓練一個不同的類神經網絡。你從作業一到現在作業三,每一個作業,你用的訓練的模型都是不一樣的。
link |
那為什麼我們不每一次作業都訓練同一個模型呢?一直使用同一個模型來進行學習這件事情,就是Lifelong Learning。
link |
Lifelong Learning的縮寫是LLL,有時候會縮寫成三個L,不是LOL。Lifelong Learning在不同文件上有不同的名字,比如說它又叫做Continuous Learning,或者是叫做一個很炫的名字,叫做Never Ending Learning,又叫做Incremental Learning。
link |
在Lifelong Learning裡面,我們想要做到的事情就是,我們讓機器先去學第一個任務,比如說先做作業一的PM2.5的Prediction,然後它就學會了一個技能。
link |
接下來,你讓它再學第二個任務,就是預測一個人的年收入,然後它又學會了第二個任務,它現在會了兩個技能,會預定PM2.5,也會預測人的年收入。
link |
接下來,再讓它學作業三的影像辨識,所以它就會了三個任務,它就一直學,一直學,一直學,最後它就學會呈現上文的任務,然後就成為天王這樣子。
link |
這就是人們心中想像的機器學習,其實是這個樣子的。雖然你知道說,實際上我們在這個課堂上的作業,機器每一個作業都是分開來學的,所以它都只會一個技能,它並沒有把這門課裡面所有的技能通通都學會。
link |
要讓機器可以做到live long learning,可以一個模型學很多的技能,我們到底需要解決什麼樣的問題呢?至少需要解決三個問題,等一下我們就一個一個來看。
link |
第一個問題是live long learning裡面最嚴重的問題,這個問題是knowledge retention的問題,就是大家可能以為機器的記性很好,它學過的東西都不會忘掉。其實不是,就是它腦袋有動量,它學過的東西,在學下一個任務的時候,它就把前一個任務學過的東西忘掉了,所以它沒有辦法把它的知識留下來。
link |
所以你要做到live long learning,第一個最關鍵的要解決的問題就是,怎麼讓機器把它學過的知識記下來。但是要注意的事情是,機器不只要記下來,它還要做到不能夠是intensive,intensive這個字的意思是不妥協的、頑固的。
link |
也就是說,機器今天它一方面不能忘記舊的東西,但是它同時要有能力學會新的東西。我們並不希望說,我們為了讓機器避免忘記舊的東西而變得它完全沒有能力學新的東西,給它新的任務的時候,它就乾脆不要學,然後為了避免把舊的任務忘掉,這不是我們要的。
link |
我們希望機器一方面可以做knowledge retention,但另外一方面它又不可以是固執,它又不可以是intensive。我們來看一下說,到底機器的腦洞到底有多大。
link |
我們這邊就舉一個實際的例子,我們現在有一個三層的內臥,這個內臥每一層都有五十個neuron,是一個很小的內臥。我們想要這個內臥學兩個test,這兩個test其實都是手寫數字辨識,所以具體講起來也沒有說真的非常不一樣,都是手寫數字辨識。
link |
但是在這兩個test,我們要讓機器辨識的數字是有些不同的。在第一個任務裡面,那些數字是有加上雜訊,大概還是可以看得出來原來的數字是什麼,但是加上了一些雜訊,而在第二個任務,這些數字是沒有雜訊的。
link |
我們讓機器先學第一個任務,再學第二個任務。如果讓機器學第一個任務的時候,結果是怎麼樣呢?我們讓機器把第一個任務的訓練資料導進來,然後就用大家都知道的grade and descent的方法,就train一下,train幾個epoc以後,然後讓機器測試在任務一和任務二的測試資料上面。
link |
這是機器學習的成果,在任務一上面它得到了90%的正確率,在任務二上面它得到了96%的正確率。
link |
雖然它現在還沒有看過任務二的data,但是因為任務一跟任務二很像,所以它在任務一學到的東西可以transfer到任務二上,這個就是transfer learning的概念,它在任務一學到的東西可以用在任務二上。
link |
所以它只有看過任務一的資料,任務一可以做到90%的正確率,但是任務二其實比任務一更簡單,所以機器得到了96%的正確率。
link |
接下來我們讓機器去學任務二。讓機器接下來學任務二的意思就是說,你把在任務一測完了那個network,直接拿來繼續拿任務二的資料,繼續去做grade and descent,繼續去調它的參數。
link |
換另外一句話說就是,你今天要訓練任務二的時候,一般我們有一個任務,我們會把那個network的參數做random initialize,
link |
那我現在不random initialize,我們的initialize的參數就是學完任務一的network,我們把任務一學完的那個network當作學任務二的時候的network的初始的參數,就可以想成說是同個腦繼續去學習。
link |
那讓機器繼續去學習任務二的時候會發生什麼事呢?你會發現說,任務一的結果整個都慘掉了。本來讓機器去學任務二,它任務二的正確率又稍微提高了1%,但是它就完全忘了任務一要怎麼做了,任務一的正確率從90%降到80%。
link |
那有同學可能說,你要求機器完全不會忘記過去的事情,會不會太嚴苛了一點?畢竟這是一個小的network,現在小的network能夠解的問題就是有限的,也許今天要求它同時解兩個任務,它就是辦不到。
link |
但是事實上其實並不是這樣,假設我們讓這個network同時去學任務一跟任務二,所謂同時去學的意思就是說,我們把任務一跟任務二的訓練資料通通都倒在一起,倒成一個比較大的database。
link |
那其實今天在學習的時候,我們知道說你在train deep learning的時候,你就每次sample一個batch出來,然後開始算,做規定design,開始update你的參數。也就是說我們從任務一,把任務一跟任務二的資料倒在一起,然後把從這個倒在一起的資料庫裡面去samplebatch出來,這個batch裡面有任務一的training data,也有任務二的training data,讓機器同時去學任務一和任務二。
link |
那學起來的結果是怎麼樣?也就是說同一個network,它如果同時學任務一和任務二,它是有辦法把兩個任務同時都做好的,但是如果讓它先學任務一,再學任務二,不知道為什麼它就會慘掉,它就會忘記它之前已經學過的東西。
link |
那這邊舉的是影像的辨識的例子,我們再舉一個文字處理的例子,這邊我們要讓機器做的事情是做一個問答系統,讓機器開一篇文章,然後根據你問它的問題,它可以給你一個答案。
link |
這個實際上怎麼做,當然是有點network的架構你需要稍微設計一下,是有點複雜的,那我們就不細講說這個network的架構要怎麼設計,你只要有概念說,我們就是訓練了一個deep的network,我們這邊用的是一個叫做QRN的network,具體它是什麼並不重要,反正就是有一個network,
link |
然後這個network它會先讀一篇文章,它就把文章每一句話一句一句地輸入這個network裡面,至於一句話要怎麼輸入network裡面,我們今天就先不講這個問題,反正機器就是可以把一篇文章讀進去,接下來它再讀一個問題,最後它就吐出那個問題的答案。
link |
那這邊我們用的,你知道我們今天要做machine learning,當然就需要訓練資料嘛,那你今天要讓機器做question and answer,雖然聽起來很嘈,但是實際上你需要的訓練資料也就是很多文章問題跟答案的篇,也就是說你提供給機器很多的文章跟問題,
link |
然後每一個文章跟問題你都告訴機器說正確的答案是什麼,給機器上千筆上萬筆這種資料給它學,它就可以學會怎麼看到問題得到答案。
link |
這樣子的資料集,網絡上有滿坑滿谷,其中最常被使用的、最簡單、最早出現、最簡單、已經被玩到爛掉的Corpus,是一個叫做BABI的Corpus,一個叫做BABY的Corpus。
link |
那裡面有二十種不同的體型,比如說有一類體型都是問戶的,有一類體型都是問where的,都是問地點的,等等等等,反正就是有二十種不同的體型。
link |
我們現在就是讓機器從第一種體型開始學習,一直學到第二十種體型。一般通常人家在做BABY的時候就是有二十種不同的體型,要嘛就是訓練一個模型同時解二十種不同的體型,要嘛就是二十種體型各自訓練不同的模型,總共二十個模型去分別解二十種不同的體型。
link |
我們這件事,訓練一個模型,它從第一個體型開始學習,再學第二個,再學第三個,一直學到最後一個體型,看看會發生什麼樣的事情。
link |
好,那我們現在看一下比如說提醒5正確率的變化。提醒5就是問戶的,其實BABY這個Corpus就是一個很簡單的Corpus,它其實是用某些template、某些規則產生的,你會發現它文章的句子都很簡單,問題都很簡單,那你也可以輕易地得到答案。
link |
這是拿來檢測機器的understanding能力的最basic的問題,幼稚園等級的問題。我們來看一下機器在提醒5的正確率的變化,就是它從第一個任務開始學習,一直學到第二十個任務。
link |
每一個任務學完,我們都讓它去做一下提醒5的問題,看看它可以得到多少正確率。我們發現說,它學第一個、第二個、第三個、第四個提醒,對提醒5的回答都沒有幫助,學完前四個提醒,它都還不會做提醒。
link |
學完第五個提醒,就給它第五個提醒的訓練資料,在第五個提醒的測試資料上馬上暴增到100%的正確率。但是學完第六個提醒以後,它又突然不會做提醒5的問題了,講得出來,全部之前學的東西統統都忘記了,它完全不會做提醒5的問題了,這個是提醒5的狀況。
link |
那在別的提醒上,其實結果也非常類似,比如說這是提醒10,在提醒10上面,那機器,你會發現說,它在剛學完提醒10的時候,正確率達到100%,接下來讓它學提醒11,馬上就忘記提醒10怎麼做。
link |
不過有趣的事情是說,可能提醒17跟提醒18跟提醒10還是比較像的,所以雖然它一度忘記了提醒10要怎麼做,但學完提醒17跟提醒18的時候,它又稍微有點會做提醒10了,第十類提醒它又可以得到40%的正確率。
link |
那這個例子比比皆是,每一個task都是這樣,比如說提醒15,也只有在學完提醒15的時候可以得到100%的正確率,在學完提醒16以後,它馬上就忘記提醒15要怎麼解。
link |
那有人就會說,那難道是因為現在的network它的能力不夠同時把20個提醒學起來嗎?其實不是,如果你拿同一個network,讓它同時學20個提醒的題目,
link |
你把20個提醒的題目統統倒在一起讓它去學,然後學完以後讓它去做20個提醒的題目,它的正確率是這個樣子。
link |
雖然沒有辦法每一個提醒都做到完美,但至少每一個提醒都除了提醒19有點難,它沒做起來以外,
link |
其實至少每一個提醒多多少少都可以得到一些正確率,而不是全然的完全都不會做。
link |
所以其實今天機器遺忘的狀況跟人遺忘的狀況是非常不一樣的。機器的遺忘是,它明明可以記得住,但不知道為什麼它就沒記起來,就是忘記它之前學到的東西。
link |
這個network的能力,這個network的參數量,有辦法讓它同時把所有的任務統統都學會,統統都解出來,但不知道為什麼它學過一個任務以後,新的任務它就忘記了。
link |
這個狀況我們叫做catastrophic forgetting。catastrophic這個字眼的意思是災難性的。
link |
之所以要在前面加一個形容詞,是因為它不是一般的遺忘。人也會遺忘啊,所以遺忘並不是什麼罪大惡極的事。
link |
但機器的遺忘是一個災難性的遺忘,是統統都忘光了,就好像它跟這個人一樣,它腦袋有一個洞,它只要學新的東西,舊的東西就統統都掉出來了。