# 李宏毅_生成式導論 2024_第6講:大型語言模型修練史 — 第一階段: 自我學習,累積實力 ###### tags: `Hung-yi Lee` `NTU` `生成式導論 2024` [課程撥放清單](https://www.youtube.com/watch?v=AVIKFXLCPY8&list=PLJV_el3uVTsPz6CTopeRp2L2t4aL_KgiI) ## 第6講:大型語言模型修練史 — 第一階段: 自我學習,累積實力 [課程連結](https://www.youtube.com/watch?v=cCpErV7To2o&list=PLJV_el3uVTsPz6CTopeRp2L2t4aL_KgiI&index=7) ### 背景知識:文字接龍 ![image](https://hackmd.io/_uploads/rJ_JHDh-R.png) 課程預計說明LLM的背景知識。 首先是課程中開頭就先說過的,大型語言模型做的事情就是文字接龍。每次模型都會產生一個稱之為token的符號。課程中會假設每次生成一個中文字都是一個token。 ### 背景知識:機器怎麼學會做文字接龍? ![image](https://hackmd.io/_uploads/HkZgUPnb0.png) 課程中也提過,模型就是一個函式,給定一個未完成的句子,然後輸出下一個token,並且這個函式中會有數十億個未知參數。 這個存在大量未知參數的函式就是模型,透過訓練資料我們可以讓模型知道應該輸出怎麼樣的token。透過這些訓練資料,機器學習就可以把這數十億個未知參數找出來。這個過程又稱為訓練或是學習。找出參數之後就可以拿這個函式來做文字接龍,這又稱為測試或是推論。 ### 找參數的挑戰 ![image](https://hackmd.io/_uploads/SJRjDvh-C.png) 剛剛提到,機器學習做的事情就是在找參數,這個過程就是一個最佳化過程(optimization)。過程中我們必需對機器學習設置參數,這個設置在機器學習上的參數又稱為超參數(hyperparameter)。 值得注意的是,訓練並不是每一次都能成功。不過,就算失敗了,再換一組超參數再來訓練一次就是。這也是為什麼大家一直強調算力的原因,因為要不斷的重新計算。 那常聽到的調參指的是調超參數,而不是模型的參數,這部份不要搞混。 ### 找參數的挑戰 ![image](https://hackmd.io/_uploads/S1JSOw3W0.png) 找參數的另一個挑戰就是,訓練成功,但是測試失敗,這指的就是過擬合(overfitting)。也就是用於訓練資料是很順利的,但是用於測試資料卻失敗。 以上圖為例,訓練資料中的貓貓是黑的,狗狗是黃的,這時候給個黃色的貓貓測試就可能會得到是狗狗的結果。 記得,機器學習的過程中只看訓練資料,不會思考其它事情,不要過於擬人化。' ### 如何讓機器找到比較合理的參數 ![image](https://hackmd.io/_uploads/ry3IYvhbR.png) 最簡單的方法就是增加訓練資料,也就是增加資料的多樣性,以剛剛的貓狗為例,就是加入黃色貓貓跟黑色狗狗的資料,讓模型學習過程中可以知道狗狗貓貓不是單純的從顏色來分。 ### 如何讓機器找到比較合理的參數 ![image](https://hackmd.io/_uploads/SJDlEnTZ0.png) 還有一種作法就是針對初始參數的設置。一般我們都是用隨機的方式來設置。如果我們可以用一組離我們所期望合理參數較為接近的參數來做為初始參數的話,那是不是可以有比較好的結果? 這種給定比較好的參數做為初始參數的作法又稱為先驗知識。不過這種作法的最大問題就是,要去那邊找這種好的參數。 ### 需要多少文字才夠學會文字接龍 ![image](https://hackmd.io/_uploads/B1vfH2TbR.png) 故事開始。 [參考文獻_When Do You Need Billions of Words of Pretraining Data? ](https://arxiv.org/pdf/2011.04946) 要學會文字接龍有兩個面向要看,一個是語言知識,一個是世界知識。 語言知識的部份,根據參考文獻來看並不需要太多。但想做好文字接龍就必需要對世界知識也有所理解,模型必需要知道像是水的沸點應該是100度而不是50度之類的知識,因此過於少量的資料是無法滿足的。從論文資料來看,即使擁有30B,也就是300億的文字資料量也是有所不足。 ### 需要多少文字才夠學會文字接龍 ![image](https://hackmd.io/_uploads/B1fMLhT-0.png) 為什麼需要這麼多,水的沸點是100度就一般來說是正確的,但是如果是在低壓的地方也許50度就是沸點,100度反而是錯誤的。 世界知識是非常複雜的,也因為如此才會需要大量資料做為訓練資料。 ### 任何文字資料都可以拿來學文字接龍 ![image](https://hackmd.io/_uploads/H1oG82T-R.png) 尋找大量資料也許不是那麼困難,因為任何文字資料都可以拿來教語言模型怎麼做文字接龍。網路上存在大量資料,這些資料就可以很好的拿來做為訓練資料使用。 這種學習人工介入很少的學習又稱為Self-supervised Learning(自督導式學習),就是機器自己教自己,人要做的事情就是爬文給機器做為學習資料。 ### 資料清理 ![image](https://hackmd.io/_uploads/ByIyDh6bR.png) [參考文獻_Scaling Language Models: Methods, Analysis & Insights from Training Gopher](https://arxiv.org/pdf/2112.11446) 雖然說是人工介入很少,不過基本的資料清理還是少不鳥。比較特別的是,在品質的部份會另外訓練一個模型來判定品質,如果是高品質的話就會訓練多次,通常就是教科書或是重要文獻就會是高品質。 ### 資料清理 ![image](https://hackmd.io/_uploads/S15EK2pWR.png) [參考文獻_Deduplicating Training Data Makes Language Models Better](https://arxiv.org/pdf/2107.06499) 去除重複資料這個項目蠻妙的,論文研究顯示,還真的有文章重覆61036次,真看到鬼。不過這是一個婚禮公司的業配文章,也算合理,所以這個動作真的很重要。 如果真的拿這段文字去訓練,模型就真的會一直幫忙業配... ### 所有文字資料都能拿來學文字接龍嗎? ![image](https://hackmd.io/_uploads/ry1tt26-0.png) 可能也不是什麼資料都能無償免費拿來訓練,最近就不乏有誰告誰拿資料不付錢的新聞。 ### 在ChatGPT之前的GPT系列 ![image](https://hackmd.io/_uploads/rkLgq3a-0.png) 一個模型的參數量就可以想成是人工智慧的天資,拿來訓練的資料就可以視為是後天的努力。 初代GPT大概就是117M的參數量,現代技術來看真的不多就是。 ### 在ChatGPT之前的GPT系列 ![image](https://hackmd.io/_uploads/B1IEq2aZC.png) ![image](https://hackmd.io/_uploads/HJ0rc36ZR.png) GPT2的話也大概就是15億,用了40G的資料量,整個效能也是普普。 ### 在ChatGPT之前的GPT系列 ![image](https://hackmd.io/_uploads/Hk1Ocnab0.png) ![image](https://hackmd.io/_uploads/ryx253aZ0.png) [參考文獻_Language Models are Few-Shot Learners](https://arxiv.org/pdf/2005.14165) 到了3代的時候,整個模型的參數已經來到175B,並且使用580G的資料量,這足足有300B個tokens,簡直就是你讀哈利波特30萬遍,看到眼睛會脫窗的概念。 不過結果來看還是不怎麼樣就是了。 ### 訓練更大的模型也沒用.. ![image](https://hackmd.io/_uploads/Sk1yThaWC.png) google用行動證明,模型再大三倍也沒有用,模型還是亂喇叭。 ### 為什麼語言模型不能好好回答問題? ![image](https://hackmd.io/_uploads/rJama36WA.png) 機器會亂喇叭的主要原因還是來自於資料,資料中沒有好的回應,自然就不知道什麼是正確答案了。 ### 為什麼語言模型不能好好回答問題? ![image](https://hackmd.io/_uploads/rk5uahaW0.png) 所以,目前為止機器只知道有很多資料可以學習,但學好內功還不會發功,繼續練到吐血為止!