知名AI研究者深挖谷歌Gemma:參數(shù)不止70億,設(shè)計原則很獨特
就在幾天前,開源大模型領(lǐng)域迎來了重磅新玩家:谷歌推出了全新的開源模型系列「Gemma」。相比 Gemini,Gemma 更加輕量,同時保持免費可用,模型權(quán)重也一并開源了,且允許商用。
谷歌發(fā)布了包含兩種權(quán)重規(guī)模的模型:Gemma 2B 和 Gemma 7B。盡管體量較小,但 Gemma 已經(jīng)「在關(guān)鍵基準(zhǔn)測試中明顯超越了更大的模型」,包括 Llama-2 7B 和 13B,以及風(fēng)頭正勁的 Mistral 7B。與此同時,關(guān)于 Gemma 的技術(shù)報告也一并放出。
相信大家已經(jīng)對 Gemma 的相關(guān)內(nèi)容進(jìn)行了系統(tǒng)研究,本文知名機器學(xué)習(xí)與 AI 研究者 Sebastian Raschka 向我們介紹了 Gemma 相比于其他 LLM 的一些獨特設(shè)計原則。
Raschka 首先從模型性能展開,他表示看過技術(shù)報告的小伙伴可能都有一個疑問,是什么讓 Gemma 表現(xiàn)如此出色?論文中沒有明確說明原因,Sebastian Raschka 認(rèn)為可以從下面兩點得出結(jié)論:
- 首先是詞匯量大,Gemma 詞匯量達(dá)到 256000 個單詞,相比之下,Llama 的詞匯量為 32000 個單詞;
- 其次是訓(xùn)練數(shù)據(jù)集達(dá) 6 萬億 token,作為對比,Llama 僅接受了其中三分之一的訓(xùn)練。
在架構(gòu)方面,Raschka 列舉了 Gemma 與 LLama 2 7B 和 OLMo 7B 的架構(gòu)概覽。
在模型大小上,Raschka 表示 Gemma 2B 有多查詢注意力,而 Gemma 7B 沒有。另外,與 Llama 2 相比,Gemma 7B 具有相對較大的前饋層,盡管其層數(shù)較少(28 VS 32),但 Gemma 中的參數(shù)數(shù)量卻相當(dāng)大。
Raschka 猜測 Gemma 7B 實際上總共有 93 億個參數(shù),如果考慮到權(quán)重共享(Weight tying)的話,則有 85 億個參數(shù)。權(quán)重共享意味著模型在輸入嵌入和輸出投影層中共享相同的權(quán)重,類似于 GPT-2 和 OLMo 1B(OLMO 7B 的訓(xùn)練沒有權(quán)重共享)。
歸一化層
另一個引人注目的細(xì)節(jié)是以下出自 Gemma 論文中的段落。
歸一化位置。谷歌對每個 transformer 子層的輸入和輸出進(jìn)行歸一化,這與單獨歸一化輸入或輸出的標(biāo)準(zhǔn)做法不同。谷歌使用 RMSNorm 作為歸一化層。
乍一看,看起來像 Gemma 在每個 transformer 塊之后都有一個額外的 RMSNorm 層。但是,通過查看「keras-nlp」項目的官方代碼實現(xiàn),原來 Gemma 僅僅使用了 GPT-2、Llama 2 等其他 LLM 使用的常規(guī)預(yù)歸一化方案,具體如下圖所示。
GPT、Llama 2 和其他 LLM 中典型的層歸一化位置,Gemma 中沒有什么新東西。來源:https://github.com/rasbt/LLMs-from-scratch
GeGLU 激活
Gemma 與其他架構(gòu)之間的一大區(qū)別是它使用了 GeGLU 激活,而 GeGLU 激活是在 2020 年的谷歌論文《GLU Variants Improve Transformer》中提出的。
論文地址:https://arxiv.org/pdf/2002.05202.pdf
GeLU 全稱為高斯誤差線性單元(Gaussian Error Linear Unit),它是一個激活函數(shù),越來越多地被作為傳統(tǒng) ReLU 的替代方案。GeLU 的流行得益于它有能力引入非線性特征,并允許為負(fù)輸入值執(zhí)行梯度傳播,這解決了 ReLU 的一大局限,完全阻斷了負(fù)值。
現(xiàn)在,作為 GeLU 的門線性單元變體,GeGLU 的激活被分割為兩部分,分別是 sigmoid 單元和線性映射單元(它與 sigmoid 單元的輸出逐元素相乘),具體如下圖所示。
GeLU 與 ReLU 激活函數(shù)圖示比較,來源:https://github.com/rasbt/LLMs-from-scratch
同時,GeGLU 與 Llama 2、Mistral 等其他 LLM 使用的 SwiGLU 激活類似。唯一的區(qū)別是 GeGLU 使用的基礎(chǔ)激活是 GeLU 而不是 Swish。
下圖展示了 GeLU(GPT-2)、SwiGLU(Llama 2)和 GeGLU(Gemma)的偽代碼。
需要注意,與使用 GeLU(僅線性)的常規(guī)前饋模塊相比,使用 SwiGLU 和 GeGLU 的前饋模塊各多了一個線性層(分別是 linear_1 和 linear_2)。不過,在 SwiGLU 和 GeGLU 前饋模塊中,linear_1 和 linear_2 通常通過將單個線性層分割為兩部分而獲得,因此不會增加參數(shù)規(guī)模。
那是否 GeGLU 就比 SwiGLU 強呢?并沒有消融實驗來證實這一點。Raschka 猜測谷歌選擇使用 GeGLU,只是為了讓 Gemma 與 Llama 2 略有不同。
舉例而言,Gemma 為 RMSNorm 層添加了 + 1 的偏移量,并通過隱藏層維數(shù)的開立方根來歸一化嵌入。Gemma 論文中沒有提及或討論這些細(xì)節(jié),所以它們的重要性也不清楚。
結(jié)論
對于開源 LLM 而言,Gemma 做出了非常棒的貢獻(xiàn),展示了 7B 參數(shù)規(guī)模也能成就強大的模型,并有潛力在真實世界的用例中取代 Llama 2 和 Mistral。
此外,目前 7B 大小規(guī)模的開源模型已經(jīng)有很多了,因此 Gemma 2B 更加有趣,它可以輕松地在單個 GPU 上運行。當(dāng)然,Gemma 2B 與 2.7B 大小的 phi-2 之間的對比也將會很有趣。