知名AI研究者深挖谷歌Gemma:參數不止70億,設計原則很獨特
就在幾天前,開源大模型領域迎來了重磅新玩家:谷歌推出了全新的開源模型系列「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 之間的對比也將會很有趣。