人工智慧的世界正在經歷一場革命,大型語言模型正處於這場革命的前沿,它們似乎每天都在變得更加強大。從BERT到GPT-3再到PaLM,這些AI巨頭正在推動自然語言處理可能性的邊界。但你有沒有想過是什麼推動了它們能力的飛速提升?
在這篇文章中,我們將介紹使這些模型運作的秘密武器——一個由三個關鍵部分組成的法則:模型大小、訓練資料和計算能力。透過理解這些因素如何相互作用和規模化,我們將獲得關於人工智慧語言模型過去、現在和未來的寶貴見解。
引言
過去幾年中,語言模型的發展迅速擴大。如下圖所示,語言模型從2018年的BERT-base的1.09億引數規模,增長到2022年的PaLM的5400億引數。每個模型不僅在大小上增加(即引數數量),還在訓練令牌的數量和訓練計算量(以浮點運算或FLOPs計)上都有所增加。
“這三個因素之間有什麼關係?”模型大小和訓練資料對模型效能(即測試損失)的貢獻是否相等?哪一個更重要?如果我想將測試損失降低10%,我應該增加模型大小還是訓練資料?需要增加多少?
這些問題的答案在於大型語言模型(LLMs)的規模化法則行為中。但在深入答案之前,讓我們先回顧一下冪律分佈。
冪律分佈
冪律是兩個量x和y之間的非線性關係,可以通用地建模為:
其中k和a是常數。
如果我在對數-對數圖中繪製冪律關係,它將是一條直線,因為
讓我們為兩個不同的k值繪製冪律圖,以觀察其不同的行為。如果k是正的,y和x之間有增加的關係。然而,如果k是負的,它們之間則有減少的關係。這裡有一個簡單的程式碼來繪製冪律曲線。
import numpy as np
import matplotlib.pyplot as plt
def plot_power_law(k, x_range=(0.1, 100), num_points=10000):
"""
Plot the power law function y = x^k for any non-zero k.
Parameters:
k (float): The exponent for the power law (can be positive or negative, but not zero).
x_range (tuple): The range of x values to plot (default is 0.1 to 10).
num_points (int): Number of points to calculate for a smooth curve.
"""
if k == 0:
raise ValueError("k cannot be zero")
# Generate x values
x = np.linspace(x_range[0], x_range[1], num_points)
# Calculate y values
y = x**k
# Create the plot
plt.figure(figsize=(10, 6))
plt.plot(x, y, 'b-', label=f'y = x^{k}')
plt.title(f'Power Law: y = x^{k}')
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
plt.legend()
plt.show()
我們把k為正時的情況畫成這樣
plot_power_law(2) # y = x^2
如果我們選擇一個負數關係就會減小
plot_power_law(-0.5) # y = x^(-0.5)
上面的圖在x軸和y軸上都是線性刻度。如果我們用對數標度表示它們,它們將是一條直線,如公式2所示。現在,讓我們把這些聯絡在一起,展示冪律是如何與llm的測試損失聯絡起來的。
語言模型中的Scaling Law
語言模型中的規模化法則行為(Scaling Law)指的是模型效能與模型大小、資料集大小和計算資源等多種因素之間觀察到的關係。隨著模型的擴充套件,這些關係遵循可預測的模式。規模化法則行為的關鍵因素如下:
- 模型大小:隨著模型中引數數量的增加,效能通常會按照冪律改善。
- 資料集大小:更大的訓練資料集通常帶來更好的效能,也遵循冪律關係。
- 計算:用於訓練的計算資源(浮點運算次數)與效能改善相關。
下圖展示了大型語言模型中的規模化法則。
所有三個圖都在對數-對數空間中是線性的,這證明了測試損失與計算、資料集大小和模型引數之間遵循冪律關係。此外這些圖表還顯示,隨著模型大小、資料集大小和用於訓練的計算量的增加,語言建模效能得到了提升。
我們已經看到了這三個因素與測試損失之間的單獨關係。但是現在有幾個問題:這三個因素本身之間的關係是什麼?這些因素如何對測試損失產生貢獻?它們的貢獻是否相等?還是說其中一個比其他的更重要?
因素間的相互作用
對於模型中的每個引數和每個訓練示例,大約需要6次浮點運算。因此,這三個因素之間的關係如下:
每個引數和每個訓練例項需要大約6次浮點運算(FLOPs)的原因如下:
考慮在訓練中的一個引數w:
- 在前向傳播中,需要恰好2次FLOPs將w與輸入節點相乘,並將其新增到語言模型的計算圖的輸出節點中。(1次乘法和1次加法)
- 在計算損失對w的梯度時,需要恰好2次FLOPs。
- 在用損失的梯度更新引數w時,需要恰好2次FLOPs。
以α ≈ 6為基礎,如果我們知道模型的大小和使用的訓練資料量,就可以估計訓練語言模型的計算需求。
那麼我們就可以回答這個問題:模型大小和訓練資料這兩個因素是如何對模型效能產生貢獻的?
Chinchilla:改變遊戲規則的研究
Chinchilla[1]是DeepMind在2022年釋出的一篇論文。作者發現,由於專注於在保持訓練資料不變的情況下擴大模型大小,當前的大型語言模型實際上訓練不足!作者訓練了從7000萬到超過160億引數的400多個語言模型,這些模型使用的訓練令牌從50億到5000億不等,並得出結論,對於計算最佳化的訓練,模型大小和訓練令牌數量應該同等規模化。
他們提出了以下經驗預測公式,將模型大小和訓練資料與模型效能聯絡起來。
N 是引數數量(即模型大小),D 是訓練令牌。符號 L(N,D) 指的是一個擁有 N 個引數並且在 D 個令牌上訓練的模型的效能或測試損失。E 是一個常數,代表不可約減的損失,即模型在完美訓練的情況下能夠達到的最小損失。它考慮了模型所訓練的任務的固有難度和資料中的噪聲。
常數 A 和 B 以及指數 α 和 β 透過實驗和資料擬合經驗性地確定。具體來說,他們發現 α≈0.50 和 β≈0.50。這加強了論文的主要發現,即每翻倍增加模型大小時,訓練令牌的數量也應該翻倍,以實現計算最優訓練[1]。
邊際效益遞減
在大語言模型中,邊際效益遞減是指隨著模型規模的增大,每增加相同數量的引數或計算資源,獲得的效能提升逐漸減少的現象。這是Scaling Law中非常關鍵的一個方面,它對於理解和決策模型設計及其部署策略有著重要的指導意義。
1、主要原因和表現
- 對數關係:在很多研究中觀察到,模型效能(如測試集上的準確率或其他指標)與模型大小(通常是引數數量或計算複雜度)呈對數關係。這意味著隨著模型規模的擴大,要獲得同樣幅度的效能提升,需要的資源增加將更為顯著。
- 資源效率的降低:當模型規模達到一定階段後,繼續增加模型的大小,其效能提升不再明顯,而相對應的訓練成本、時間和能源消耗卻顯著增加。這種現象表明,從成本效益角度出發,模型規模的無限擴大並非總是合理的。
- 技術挑戰:較大的模型更難訓練,可能會面臨梯度消失或爆炸、過擬合等問題,這些技術挑戰也限制了模型效能的持續提升。
2、應對策略
- 模型和演算法創新:透過改進模型架構、最佳化演算法或引入新的訓練技術(如稀疏化、量化等),可以在不顯著增加引數的情況下提高模型的效率和效果。
- 多工學習和遷移學習:利用多工學習和遷移學習技術可以提高模型的泛化能力,使得模型在多個任務上具有更好的效能,這種方式可以在一定程度上克服單一任務上的邊際效益遞減問題。
- 選擇適當的規模:根據應用場景的實際需求和可用資源,選擇合適的模型規模,避免資源的浪費,實現效能與成本的最優平衡。
總結
語言模型的規模化法則為這些強大的人工智慧系統的發展和最佳化提供了關鍵洞察。正如我們所探討的,模型大小、訓練資料和計算資源之間的關係遵循可預測的冪律模式。這些法則對人工智慧研究者和工程師具有重大意義:
- 平衡規模化:Chinchilla 的發現強調了同時對模型大小和訓練資料進行等比例規模化以達到最佳效能的重要性。這挑戰了之前僅增加模型大小的重點。
- 資源分配:理解這些關係可以更有效地分配計算資源,可能導致更具成本效益和環境可持續的人工智慧發展。
- 效能預測:這些法則使研究人員能夠根據可用資源做出有根據的模型效能預測,幫助設定現實的目標和期望。
隨著人工智慧領域的快速發展,牢記這些規模化法則對於做出有關模型發展、資源分配和研究方向的明智決策至關重要。透過理解和利用這些關係,我們可以朝著建立更高效、更強大、更負責任的語言模型的未來努力。
參考文獻:
https://avoid.overfit.cn/post/9867397a40334064b0bbd470e588c4c2
作者:Mina Ghashami