知名AI研究者深挖谷歌Gemma:引數不止70億,設計原則很獨特

机器之心發表於2024-02-28

想要了解谷歌 Gemma 與 Llama 2、Mistral 有哪些異同嗎?這篇文章值得一讀。


就在幾天前,開源大模型領域迎來了重磅新玩家:谷歌推出了全新的開源模型系列「Gemma」。相比 Gemini,Gemma 更加輕量,同時保持免費可用,模型權重也一併開源了,且允許商用。
圖片
谷歌釋出了包含兩種權重規模的模型:Gemma 2B 和 Gemma 7B。儘管體量較小,但 Gemma 已經「在關鍵基準測試中明顯超越了更大的模型」,包括 Llama-2 7B 和 13B,以及風頭正勁的 Mistral 7B。與此同時,關於 Gemma 的技術報告也一併放出。
圖片
相信大家已經對 Gemma 的相關內容進行了系統研究,本文知名機器學習與 AI 研究者 Sebastian Raschka 向我們介紹了 Gemma 相比於其他 LLM 的一些獨特設計原則。

Raschka 首先從模型效能展開,他表示看過技術報告的小夥伴可能都有一個疑問,是什麼讓 Gemma 表現如此出色?論文中沒有明確說明原因,Sebastian Raschka 認為可以從下面兩點得出結論:

  • 首先是詞彙量大,Gemma 詞彙量達到 256000 個單詞,相比之下,Llama 的詞彙量為 32000 個單詞;
  • 其次是訓練資料集達 6 萬億 token,作為對比,Llama 僅接受了其中三分之一的訓練。

在架構方面,Raschka 列舉了 Gemma 與 LLama 2 7B 和 OLMo 7B 的架構概覽。
圖片
在模型大小上,Raschka 表示 Gemma 2B 有多查詢注意力,而 Gemma 7B 沒有。另外,與 Llama 2 相比,Gemma 7B 具有相對較大的前饋層,儘管其層數較少(28 VS 32),但 Gemma 中的引數數量卻相當大。

Raschka 猜測 Gemma 7B 實際上總共有 93 億個引數,如果考慮到權重共享(Weight tying)的話,則有 85 億個引數權重共享意味著模型在輸入嵌入和輸出投影層中共享相同的權重,類似於 GPT-2 和 OLMo 1B(OLMO 7B 的訓練沒有權重共享)。

歸一化層

另一個引人注目的細節是以下出自 Gemma 論文中的段落。

歸一化位置。谷歌對每個 transformer 子層的輸入和輸出進行歸一化,這與單獨歸一化輸入或輸出的標準做法不同。谷歌使用 RMSNorm 作為歸一化層。

乍一看,看起來像 Gemma 在每個 transformer 塊之後都有一個額外的 RMSNorm 層。但是,透過檢視「keras-nlp」專案的官方程式碼實現,原來 Gemma 僅僅使用了 GPT-2、Llama 2 等其他 LLM 使用的常規預歸一化方案,具體如下圖所示。
圖片
GPT、Llama 2 和其他 LLM 中典型的層歸一化位置,Gemma 中沒有什麼新東西。來源:https://github.com/rasbt/LLMs-from-scratch

GeGLU 啟用

Gemma 與其他架構之間的一大區別是它使用了 GeGLU 啟用,而 GeGLU 啟用是在 2020 年的谷歌論文《GLU Variants Improve Transformer》中提出的。
圖片
論文地址:https://arxiv.org/pdf/2002.05202.pdf

GeLU 全稱為高斯誤差線性單元(Gaussian Error Linear Unit),它是一個啟用函式,越來越多地被作為傳統 ReLU 的替代方案。GeLU 的流行得益於它有能力引入非線性特徵,並允許為負輸入值執行梯度傳播,這解決了 ReLU 的一大侷限,完全阻斷了負值。

現在,作為 GeLU 的門線性單元變體,GeGLU 的啟用被分割為兩部分,分別是 sigmoid 單元和線性對映單元(它與 sigmoid 單元的輸出逐元素相乘),具體如下圖所示。
圖片
GeLU 與 ReLU 啟用函式圖示比較,來源:https://github.com/rasbt/LLMs-from-scratch

同時,GeGLU 與 Llama 2、Mistral 等其他 LLM 使用的 SwiGLU 啟用類似。唯一的區別是 GeGLU 使用的基礎啟用是 GeLU 而不是 Swish。
圖片
下圖展示了 GeLU(GPT-2)、SwiGLU(Llama 2)和 GeGLU(Gemma)的虛擬碼
圖片
需要注意,與使用 GeLU(僅線性)的常規前饋模組相比,使用 SwiGLU 和 GeGLU 的前饋模組各多了一個線性層(分別是 linear_1 和 linear_2)。不過,在 SwiGLU 和 GeGLU 前饋模組中,linear_1 和 linear_2 通常透過將單個線性層分割為兩部分而獲得,因此不會增加引數規模。

那是否 GeGLU 就比 SwiGLU 強呢?並沒有消融實驗來證實這一點。Raschka 猜測谷歌選擇使用 GeGLU,只是為了讓 Gemma 與 Llama 2 略有不同。

舉例而言,Gemma 為 RMSNorm 層新增了 + 1 的偏移量,並透過隱藏層維數的開立方根來歸一化嵌入。Gemma 論文中沒有提及或討論這些細節,所以它們的重要性也不清楚。

結論

對於開源 LLM 而言,Gemma 做出了非常棒的貢獻,展示了 7B 引數規模也能成就強大的模型,並有潛力在真實世界的用例中取代 Llama 2 和 Mistral。

此外,目前 7B 大小規模的開源模型已經有很多了,因此 Gemma 2B 更加有趣,它可以輕鬆地在單個 GPU 上執行。當然,Gemma 2B 與 2.7B 大小的 phi-2 之間的對比也將會很有趣。

參考連結:https://lightning.ai/lightning-ai/studios/understanding-using-and-finetuning-gemma

相關文章