前言
OpenAI的創始人之一,大神Andrej Karpthy剛在微軟Build 2023開發者大會上做了專題演講:State of GPT(GPT的現狀)。
他詳細介紹了如何從GPT基礎模型一直訓練出ChatGPT這樣的助手模型(assistant model)。作者不曾在其他公開視頻里看過類似的內容,這或許是OpenAI官方第一次詳細闡述其大模型內部原理和RLHF訓練細節。
難能可貴的是,Andrej不僅深入了細節, 還高屋建瓴的抽象了大模型實現中的諸多概念,牛人的洞察就是不一樣。
比如,Andrej非常形象的把當前LLM大語言模型比喻為人類思考模式的系統一(快系統),這是相對于反應慢但具有更長線推理的系統二(慢系統)而言。這只是演講里諸多閃光點的其中一個。
并且,Andrej真的有當導師的潛力,把非常技術的內容講得深入淺出,而又異常透徹。這個演講完全可以讓非專業人士也能理解,并且,認真看完演講后會有一種醍醐灌頂的感覺。
本次演講的精校完整中文版視頻的B站傳送門: https://www.bilibili.com/video/BV1ts4y1T7UH
他將整個報告分為了兩個部分,分別是GPT是如何訓練的,以及該如何用GPT。
GPT是如何訓練
這節的主要內容其實都是圍繞著這個圖中的概念來的,從左邊開始到右邊描述了gpt在訓練過程中的4個階段,通常來說是四個階段預訓練(Pretraining),有監督的微調(Supervised Finetuning),獎勵建模(Reward Modeling)和強化學習(Reinforcement Learning),這幾個階段通常是依次進行,每個階段都有不同的數據集。
這里從第一個階段:預訓練階段開始說起,這個階段使用大量的文本對模型進行預訓練,消耗了99%的訓練資源,需要數千GPU訓練幾個月(其他幾個階段只用了1%資源,一般是數個gpu訓練幾天就可以)。
預訓練階段
這個階段首先需要準備大量的數據,下圖是引用了llama中使用了哪些數據。
可以大致看到進入這些集合的數據集的種類,我們有common crawl這只是一個網絡爬取,C4也是common crawl,然后還有一些高質量的數據集。例如,GitHub、維基百科、書籍、ArXiv論文存檔、StackExchange問答網站等。這些都混合在一起,然后根據給定的比例進行采樣,形成 GPT 神經網絡的訓練集。
下載完這些數據之后,并不能直接使用他們進行訓練,計算機是無法識別的,需要首先做一下tokenization,將單詞轉化為token,這個過程如下圖所示,最后的結果是每一個單詞(或單詞的一部分)都會被一個數字編號所代替,所有單詞會形成一個詞典,數字編號就是詞典中的序號。
接下來開始準備一個transformer的模型,Andrej以GPT3和LLaMA作為例子如下圖
這里針對幾個超參數進行一下描述:
- vocabulary size:表示上一張圖中籌備的詞典有多少個
- context length:表示訓練時一次性能輸入的文本的長度是多少,意味著超過這個長度就無法記憶了
- parameter:表示transformer的參數數量
- Trained on XXX tokens:表示訓練時一共看過多少token,可以認為是訓練iteration * context length * batch size
這些大致是在進行預訓練時要處理的數量級:詞匯量通常是幾萬個標記。上下文長度通常是 2,000、4,000,現在甚至是 100,000,這決定了 GPT 在嘗試預測序列中的下一個整數時將查看的最大整數數。
你可以看到,Llama 的參數數量大概是 650 億。現在,盡管與 GPT3 的 1750 億個參數相比,Llama 只有 65 個 B 參數,但 Llama 是一個明顯更強大的模型,直觀地說,這是因為該模型的訓練時間明顯更長,訓練了1.4 萬億標記而不是 3000 億標記。所以你不應該僅僅通過模型包含的參數數量來判斷模型的能力。
這里我展示了一些粗略的超參數表,這些超參數通常用于指定 Transformer 神經網絡。比如頭的數量,尺寸大小,層數等等。
在底部,展示了一些訓練超參數。例如,為了訓練 65 B 模型,Meta 使用了 2,000 個 GPU,大約訓練了 21 天,大約花費了數百萬美元。
現在,當我們實際進行預訓練時&#