在如今這個時代,人工智能儼然已經成了一個大家耳熟能詳的詞匯。隨著技術的發展,它在不斷地降低計算機領域一些工作的門檻,甚至有時候我們能看到一個可能六年前還需要從頭開始學習的職業,現在只需要能掌握一個專屬的小模型就可以擁有不俗的工作能力了。
但實際上,一旦所研究的數據的規模到達增長到一定程度后,很多小語言模型都不再能夠支撐這些學習強度了。鑒于此,從基礎開始學大語言課程是很有必要的,正所謂要了解一個事物,最好的方式就是自己親手構筑一個事物。
前瞻
在課程中,一共分為三種類型的知識:
-
有關于事物如何運作的機制:什么是transformer,如何實現一個transformer,模型并行是如何高效使用GPU的。
-
思維模式:怎么盡可能地讓硬件發揮出其全部的性能,并認真地對待擴展
-
直覺:哪些數據和決策能夠產生好的模型,但是只能學到一部分,因為那些在大多數規模上有效的數據集和決策,可能并不適用于更大規模。
在學習的過程中,有時候會不可避免的產生一種誤解,就是很多時候會發現,只要適當地擴大規模,很容易就會把模型的準確率提升上去,這容易讓我們誤入把規模擴大后建立模型后就萬事大吉了的理解。實際上,模型的準確率等于我們所構建的算法的效率乘以投入規模的乘積,忽視效率只看準確率,會讓我們在使用的過程中浪費很多資源,有時候涉及到規模很大的模型時,這甚至會反過來成為我們的負擔。
所以我們要樹立一種正確的心態,即時常思考在給定的計算和數據預算下,一個人所能構建的最佳模型是什么樣的,不管在什么樣的場景下這種思維都能給予我們幫助,因為這意味著我們是在計算每單位資源的準確率,能保證我們盡量不迷失方向。
課程中一共有五個作業,每次作業都不提供代碼框架,也就是說需要我們自己去了解代碼的框架構筑應該是什么樣的,雖然有類似于我們在github引用文件時的readme文件去引導,但是相關的設計決策以及命名函數和代碼需要我們自己獨立完成。這些作業所涉及到的資源都比較小,是可以直接用筆記本電腦在本地跑的,這其實是在傳達另一種思想,就是在運行大型任務前,應該盡可能地用小的數據集和較小的資源去完成代碼的原型設計,一方面能夠節省資源的浪費,畢竟有很多錯誤是可以在本地測試出來的,另一方面則可以讓我們發散自己的思維,思考一下該怎么構筑可能出現的問題。
對于每個作業來說,最基礎的目標就是讓一個完整流水線的基礎目標運作起來,也就是說要實現一個分詞器、模型架構和訓練。分詞器是一個可以在字符串和整數序列之間轉換的東西,簡單來說,它可以把字符串分解成若干片段并將整個片段映射到一個整數,起到一個解構器的作用。比較常見的是BPE分詞器。
至于架構的方法有很多,這取決于你希望模型側重于什么,比較常見的是注意力機制,通過動態分配不同權重來聚焦輸入數據的關鍵部分,從而提升模型對重要信息的處理能力,這能提高模型的效率,畢竟人工智能最初的思想就是往人類的思維去靠近,那么注意力機制也是讓模型學會抓住重點。
最后是我們熟悉的訓練部分,我們需要用到優化器,調整學習率以及一系列超參數,再進行訓練,也就是說需要我們去對待很多細節,這也是直接使用基礎架構和使用精心設計的架構效率完全不一樣的原因所在(我們很多時候在看文獻時,會看到作者也很難去解釋為什么這樣的參數是好的,給不出有效的實驗去證明,因為有時候我們也不知道為什么參數僅僅只是變了一點點整個模型的效率就可以提升許多)。
學習課程鏈接來自于B站教程:https://www.bilibili.com/video/BV1pAjUzYEaK/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click&vd_source=867b8ecbd62561f6cb9b4a83a368f691