Karpathy離職OpenAI,首發(fā)2小時AI大課!從頭開始構(gòu)建GPT分詞器
離職OpenAI的技術(shù)大神karpathy,終于上線了2小時的AI大課。
——「讓我們構(gòu)建GPT Tokenizer(分詞器)」。
其實,早在新課推出兩天前,karpathy在更新的GitHub項目中,就預(yù)告了這件事。
這個項目是minbpe——專為LLM分詞中常用的BPE(字節(jié)對編碼)算法創(chuàng)建最少、干凈以及教育性的代碼。
目前,GitHub已經(jīng)狂攬6.1k星,442個fork。
項目地址:https://github.com/karpathy/minbpe
網(wǎng)友:2小時課程含金量,相當(dāng)于大學(xué)4年
不得不說,karpathy新課發(fā)布依然吸引了業(yè)內(nèi)一大波學(xué)者的關(guān)注。
他總是可以把相當(dāng)復(fù)雜的LLM概念,用非常好理解的方式講出來。
有網(wǎng)友直接取消了晚上的約會,去上課了。
與karpathy的約會之夜。
AI機(jī)器學(xué)習(xí)研究員Sebastian Raschka表示,「我喜歡從頭開始的實現(xiàn),我真的很期待看到這個視頻」!
英偉達(dá)高級科學(xué)家Jim Fan表示,「Andrej的大腦是一個大模型,它能將復(fù)雜的事物標(biāo)記化為簡單的token,讓我們小型思維語言模型可以理解。
還有UCSC的助理教授Xin Eric Wang表示,「就個人而言,我非常欣賞他多年前發(fā)表的關(guān)于RL的文章:http://karpathy.github.io/2016/05/31/rl/,這篇文章幫助我進(jìn)入了RL領(lǐng)域」。
還有人直言這兩個小時課程的含金量,堪比4年制大學(xué)學(xué)位。
「Andrej是最好的AI老師」。
為什么是分詞器?
為什么要講分詞器?以及分詞器為什么這么重要?
正如karpathy所言,分詞器(Tokenizer)是大模型pipeline中一個完全獨立的階段。
它們有自己的訓(xùn)練集、算法(字節(jié)對編碼BPE),并在訓(xùn)練后實現(xiàn)兩個功能:從字符串編碼到token,以及從token解碼回字符串。
另外,大模型中許多怪異行為和問題,其實都可以追溯到分詞器。
就比如:
- 為什么LLM拼不出單詞?
- 為什么LLM無法完成超級簡單的字符串處理任務(wù),比如反轉(zhuǎn)字符串?
- 為什么LLM不擅長非英語語言方面的任務(wù)?
- 為什么LLM不擅長簡單算術(shù)?
- 為什么GPT-2在用Python編碼時遇到了超出必要的麻煩?
- 為什么LLM在看到字符串<lendoftextl>時突然停止?
- 為什么大模型實際上并不是端到端的語言建模
......
視頻中,他將討論許多這樣的問題。討論為什么分詞器是錯誤的,以及為什么有人理想地找到一種方法來完全刪除這個階段。
兩小時大課走起
在本講座中,他將從頭開始構(gòu)建OpenAI GPT系列中使用的Tokenizer。
根據(jù)YouTube課程章節(jié)介紹,一共有20多個part。
其中包括引言介紹、字節(jié)對編碼 (BPE) 算法演練、分詞器/LLM 圖:這是一個完全獨立的階段、minbpe練習(xí)時間!編寫自己的GPT-4分詞器等等。
從講解到習(xí)題演練貫穿了全部課程。
以下是從演講內(nèi)容中總結(jié)的部分要點。
在視頻結(jié)尾,Karpathy重新回顧了LLM分詞器帶來的怪異問題。
首先,為什么LLM又時拼不正確詞,或者做不了其他與拼寫相關(guān)的任務(wù)?
從根本上說,這是因為我們看到這些字符被分割成了一個個token,其中有些token實際上相當(dāng)長。
因此,我懷疑這個單個token中塞進(jìn)了太多的字符,而且我懷疑該模型在與拼寫這個單個token相關(guān)的任務(wù)方面應(yīng)該不是很擅長。
當(dāng)然,我的提示是故意這樣做的,你可以看到默認(rèn)風(fēng)格將是一個單一的token,所以這就是模型所看到的。
事實上,分詞器不知道有多少個字母。
那么,為什么大模型在非英語任務(wù)中的表現(xiàn)更差?
這不僅是因為LLM在訓(xùn)練模型參數(shù)時,看到的非英語數(shù)據(jù)較少,還因為分詞器沒有在非英語數(shù)據(jù)上得到充分的訓(xùn)練。
就比如,這里「hello how are you」是5個token,而它的翻譯是15個token,相當(dāng)與原始的3倍大。
「?????」在韓語中代表著「你好」,但最終只有3個token。
事實上,我對此感到有點驚訝,因為這是一個非常常見的短語,只是典型的問候語,如你好,最終是三個token。
而英語中的「你好」是一個單一的token。這是我認(rèn)為LLM在非英語任務(wù)中表現(xiàn)差的原因之一便是分詞器。
另外,為什么LLM會在簡單的算術(shù)上栽跟頭,也是與數(shù)字的token有關(guān)。
比如一個類似于字符級別的算法來進(jìn)行加法,我們先會把一加起來,然后把十加起來,再把百加起來。
你必須參考這些數(shù)字的特定部分,但這些數(shù)字的表示完全是任意的,主要是基于在分詞過程中發(fā)生的合并或不合并。
你可以看看,它是一個單一的token,還是2個token,即1-3、2-2、3-1的組合。
因此,所有不同的數(shù)字,都是不同的組合。
不幸的是,有時我們會看到所有四位數(shù)字的四個token,有時是三個,有時是兩個,有時是一個,而且是以任意的方式。
但這也并不理想。
所以這就是為什么我們會看到,比如說,當(dāng)訓(xùn)練Llama 2算法時,作者使用句子片段時,他們會確保把所有的數(shù)字都分割開來,作為Llama 2的一個例子,這部分是為了提高簡單算術(shù)的性能。
最后,為什么GPT-2在Python中的表現(xiàn)不佳,一部分是關(guān)于架構(gòu)、數(shù)據(jù)集和模型強(qiáng)度方面的建模問題。
但也有部分原因是分詞器的問題,可以在Python的簡單示例中看到,分詞器處理空格的編碼效率非常糟糕。
每個空格都是一個單獨的token,這大大降低了模型可以處理交叉的上下文長度,所以這幾乎是GPT-2分詞的錯誤,后來在GPT-4中得到了修復(fù)。
課后習(xí)題
在課程下方,karpathy還給在線的網(wǎng)友們布置了課后習(xí)題。
快來打卡吧。