OpenAI假設被推翻!給定計算量,較小模型打敗大模型,Llama 2訓練與GPU計算關聯(lián)度
模型推斷時,避免將算力浪費在緩慢收斂上至關重要。
孫子兵法的一句話「多算勝,少算不勝」,便闡盡了這個道理。
Chinchilla究竟是什么?
較小的模型,乘法少,因此它們跑得更快,訓練得也快。
然而,通常人們認為,小模型最終會達到知識能力的極限,學習速度會變慢。
而一個具有更大規(guī)模的模型,將超過小模型,并在給定的訓練時間內取得更好的性能。
在評估模型如何在訓練期間獲得最佳性能時,OpenAI和DeepMind都試圖繪制帕累托邊界(Pareto frontier),但他們沒有明確說明是使用該理論繪制的。
不過,OpenAI最近的一句話暗示著這一假設:
我們期望較大的模型總是比較小的模型表現(xiàn)更好。[…] 大小固定的模型將受到GPU容量限制。
這一假設是OpenAI計算帕累托邊界的基礎。
在此,我們先介紹下DeepMind成員在2022年的工作Chinchilla模型,其技術原理和其他同類模型一樣(比如GPT-3) ,區(qū)別在于訓練參數(shù)和數(shù)據(jù)量。
DeepMind宣稱,「對于計算優(yōu)化訓練,模型大小和訓練數(shù)據(jù)集大小應該相等地縮放: 模型大小每增加一倍,訓練數(shù)據(jù)集大小也應該加倍?!?/p>
圖片
Chinchilla AI通過使用與Gopher相同的計算預算,但具有70B個參數(shù)和4倍多的數(shù)據(jù),來訓練一個計算更優(yōu)化的模型Chinchilla ,從而來檢驗這一假設。
驗證結果表明Chinchilla 在大量下游評估任務中明顯優(yōu)于 Gopher、GPT-3、Jurassic-1 和 Megatron-Turing NLG。
Chinchilla 在MMLU 基準測試中的平均準確率達到 67.5%,比 Gopher 提高了 7% 以上。
圖片
在Chinchilla的工作中,如圖顯示了不同大小模型大量訓練運行的訓練損失。
乍一看,這些曲線遵循理論:較小的模型最初損失較低,但最終速度變慢,并被較大模型的曲線超越。
圖片
在圖表中,較小的模型性能低于較大的模型時,都標記成灰點?;疑€,即帕累托邊界,是計算比例定律的方式。
這個假設的問題在于,我們不知道如果讓較小的模型訓練更長時間會發(fā)生什么,因為一旦它被超越,他們就停止訓練。
讓我們來看LLaMA。
Chinchilla能復刻Llama曲線嗎?
今年早些時候,Meta訓練了4個不同大小的模型。與其他模型不同,研究人員對每一個模型都進行了大量的訓練,即使是規(guī)模較小的模型。
他們還發(fā)布了訓練運行曲線:
圖片
1. 每條曲線首先在冪定律中直線下降
2. 然后似乎進入了一個近乎線性的損失遞減過程(與相當恒定的知識獲取率相對應)
3. 在曲線的最末端,它們都變得稍微平緩
首先,我們想談談人們對「曲線末端變平坦」的一個微妙誤解。
它們都是通過使用可變學習率的梯度下降法進行訓練的(學習率大致是一個超參數(shù),用于確定向梯度方向移動的幅度)。
為了獲得良好的訓練效果,它們必須不斷降低學習率,這樣才能在源素材中檢測到更微小的模式。
而它們使用的降速公式是最廣泛使用的:余弦時間表(the cosine schedule)。
圖片
正如從圖表中看到的,在訓練快結束時,余弦時間表停止以產生良好的、近線性的訓練損失曲線的速度降低學習率。
學習速度的減慢就是這樣導致的結果。模型還是可能有能力以同樣接近線性的速度來學習。
事實上,如果我們給它更多的文本,就會拉長余弦時間表,這樣它的學習率就會以同樣的速度繼續(xù)下降。
模型的適應情況并不依賴于,我們可以為其訓練提供的數(shù)據(jù)量。因此,學習率下降的變化是不合理的。
不過,這不是本文的重點。
訓練損失曲線可能會以另一種方式誤導我們。
當然,它們都是在相同的數(shù)據(jù)上訓練的,但它們不會以相同的速度處理這些數(shù)據(jù)。
我們想知道的不是模型的樣本效率又如何(在這方面,較大的模型顯然從它所看到的數(shù)據(jù)中學到更多東西)。
讓我們想象一場比賽:所有這些模型都在同一時間開始,我們想知道哪一個先越過終點線。
換句話說,當在訓練中投入固定計算量時,誰在這段時間里學得最多?
值得慶幸的是,我們可以將損失曲線與Meta提供的另一項數(shù)據(jù)結合起來:每個模型訓練所花費的時間。
圖片
圖片
首先要說明的是,我們看到的整個Chinchilla圖形只覆蓋了這個圖形左邊的一小塊。
在這一小片區(qū)域中,我們看到了與Chinchilla記錄相同的行為。
以7B為例:一開始,它的損耗下降速度比更大的模型快得多,然后速度減慢,13B模型超過了它,首先達到了1.9。
但是,接下來是一個遙遠的、意想不到的轉折:
7B進入一個近乎線性的狀態(tài),呈陡峭的下降趨勢,似乎正在再次超越13B?很難從這張圖上看出如果7B訓練得更久會發(fā)生什么。
然而,13B和33B之間似乎也有同樣的行為,最初的Chinchilla減速也近乎線性的狀態(tài),此時13B下降得很快。
就33B來說,它的計算時間是13B兩倍,因此超越13B理所當然。
33B和65B之間也出現(xiàn)了同樣的先減速后加速的情況,以至于33B實際上從未被65B超越。
圖表顯示的情況打破了OpenAI和Chinchilla的假設:更大的模型還沒有贏(尚未)。他們檢測到的速度減慢實際上并不是因為達到了某個容量極限!
不過,7B曲線還是有點不盡人意。如果Meta對其進行更長時間的訓練就好了... 而現(xiàn)在,他們做到了!Meta本周發(fā)布了 LLaMA 2!
證實「質疑」
圖片
同樣,Llama 2也公布了模型的訓練時間:
圖片
圖片
一眼望去,我們就會發(fā)現(xiàn)訓練曲線與LLaMA 1并不一致,即使模型完全相同。
原來,LLaMA 2是在雙倍的上下文大小和更長的余弦時間上進行訓練的,不幸的是,這對所有大小的模型都產生了負面影響。
不過,較小模型受到的影響比較大模型更嚴重。
因此,在 LLaMA 1中,34B模型在任何訓練時間內都始終優(yōu)于65B模型,而現(xiàn)在則略高于70B模型,之后又超過了70B模型:
圖片
更重要的是,對訓練速度的比較有力地證實了我們對LLaMA 1的猜測:
1. 首先,它們比更大的模型更快,
2. 然后,它們放慢速度,被較大的模型超越(根據(jù)Chinchilla的說法)
3. 但隨后,它們又進入了近似線性的狀態(tài),在這種狀態(tài)下,較小的模型會以更陡峭的速度下降,從而獲得更優(yōu)越的知識,并再次超越較大的模型!
一個有趣的結果與開始訓練時做出正確的選擇有關:與人們普遍認為的相反,更大的模型會產生更差的結果。
如果必須選擇參數(shù)大小和數(shù)據(jù)集,最好選擇一個7B模型,并在數(shù)萬億個token上訓練7個epoch。
看看7B的近線性機制,再推斷一下70B模型的停止時間:如果把70B的計算用在7B模型上,那么它可能會達到更低的困惑度(perplexity)!
我們從LLaMA 2中注意到的另一件事是,LLaMA 1曲線末端的學習速度減慢確實是余弦時間表的一個假象。
在LLaMA 2的訓練中,讀取1萬億token的相應時間點上完全沒有出現(xiàn)這種放緩現(xiàn)象。
事實上,在同樣token下,LLaMA 2 7B模型比LLaMA 17B模型質量差,原因可能是它的余弦時間表被拉長了!
讓我們回到Chinchilla的論文來論證這一點。在附錄A圖A1 中,他們展示了針對各種余弦時間表參數(shù)的消融研究(拉伸學習率曲線的各種方法)。
圖片
他們指出,當曲線不被拉長時,損失最低。圖表證明了這一點,但作者也注意到了一些不對勁的地方。
在讀取了600萬個token后,頂部模型的訓練損失低于2.8。與此同時,在同一標記處,底部模型的訓練損失高于2.8。
然而,模型之間唯一的區(qū)別就是余弦時間表!
由于底層模型需要訓練更多的數(shù)據(jù),因此「未拉伸」余弦值被計算為更多的步驟,這有效地拉伸了它。
如果學習率遵循分配給更少訓練步驟的時間表,那么在相同的訓練時間內會有更好的損失。
更廣義地說,這就提出了一個問題:如果余弦時間表不是最優(yōu)的,那么曲線的尾部形狀應該是怎樣的呢?