作爲全球最頂級的機器學習工具庫,Hugging Face 上最近悄悄出現了一個新的 transformers 模型—— Qwen2。沒錯,正是阿裏通義千問 Qwen 模型的第二代。不過通義團隊的算法同學在社交媒體上對此繼續保持神秘。
" 讓它保持神秘 "
也就是說,HuggingFace 上的信息相當于一次 " 劇透 "。而有劇透可能就說明距離正式 " 上映 " 不遠了。
這款最全尺寸的中國開源模型的一舉一動都備受開源社區開發者們關注,那麽這次劇透都透露了哪些信息?我們也來梳理了一下。
根據 Qwen2 頁面的 Overview 部分,這個新一代的基礎模型同樣包括不同參數大小的版本。這個簡短的介紹提到 Qwen2 是基于 Transformer 架構,采用 SwiGLU 激活、注意力 QKV 偏置、組查詢注意力、滑動窗口注意力和全序列注意力相混合等技術,根據介紹,Qwen2 還提供了一個适應多種自然語言和代碼的改進型分詞器。
我們給大家簡單講一講這些技術,首先是 SwiGLU 激活。它是激活函數的一種,全稱叫做 Swish-Gated Linear Unit。看這名就能明白,SwiGLU 激活函數就是縫合了 Swish 激活函數和門控線性單元(Gated Linear Unit, GLU)的特性。 Swish 激活函數是一種非線性函數,它在輸入趨近于正無窮時接近于線性變換,這有助于緩解梯度消失問題。GLU 是一種門控激活函數,常用于序列建模任務。GLU 将輸入分爲兩部分,其中一部分經過 Sigmoid 門,另一部分經過 tanh 門。将兩者逐元素相乘,以産生最終的輸出。這種門控機制允許網絡選擇性地傳遞信息,提高建模能力。
在 transformers 模型中,注意力(Attention)機制是一種計算方式,它允許模型在處理輸入序列時考慮不同位置之間的依賴關系,并動态地分配對輸入的不同部分的關注程度。Transformer 的核心是自注意力(Self-attention)機制,尤其在自然語言處理任務中發揮着關鍵作用。
而自注意力可以被表示爲每個輸入位置的詞嵌入會被映射到三個不同的向量空間:Query(查詢)、Key(鍵)和 Value(值)。Query 向量用于查詢相關信息,Key 向量負責與 Query 匹配以确定相關性,而 Value 向量包含每個位置實際需要被關注的信息内容。Qwen2 提到的注意力 QKV 偏置,剛好是 Query、Key 和 Value 的首字母。那也就是說,在自注意力機制中,通過引入偏置項,模型可以更靈活地捕捉輸入序列中潛在的模式或特征,并能夠針對特定任務或數據集微調其注意力行爲。
它使用的是注意力機制的一個變體。在傳統的自注意力機制中,所有的查詢通過計算與所有的 Key 的相似度來得到注意力權重。而在組查詢注意力中,引入了查詢(Query)分組的概念,查詢被分爲多個組,每個組内的查詢隻與對應組内的鍵計算相似度,從而獲得注意力權重。
傳統的自注意力機制需要計算 Query 和 Key 之間的所有相似度,因此其計算複雜度是輸入序列長度的平方級别。而滑動窗口注意力通過引入滑動窗口的概念,限制每個查詢隻與其周圍一定範圍内的鍵計算相似度,從而降低了計算複雜度。
與之相反,全序列注意力允許模型中的每個位置對序列中的所有其他位置進行關注,并據此計算權重分配。這種機制能捕捉到序列間的任意距離依賴關系,但在長序列上計算成本較高。
結合兩者形成的混合注意力機制可以在保持較低計算複雜度的同時,盡可能保留并利用全局上下文信息。例如,在某些層使用局部的滑動窗口注意力以節省資源,而在其他層或關鍵節點上使用全序列注意力來确保充分捕獲全局依賴關系。
Qwen 的能力對比
最後再讓我們看一看這個 " 改進型分詞器 "。所謂分詞器,它的英文名叫做 tokenizer。這個名字叫暴露了它的本職工作,就是将原始的文本數據分割成一系列有意義的、可管理的小單元,這些小單元通常被叫做 tokens。
根據 Qwen(或者區别于 Qwen2,可以稱爲 Qwen1)的技術報告,它采用了在編碼不同語言信息方面具有更高效率的分詞器,在多種語言中展示更高的壓縮率。而根據 Qwen2 提交的代碼,可以看出這個 " 改進分詞器 " 的一些細節。
首先它依然是多語言支持的:分詞器通過使用 Unicode 字符和字節編碼,支持多種語言的文本處理,這使得它能夠處理包含多種字符集的文本數據。其次,它使用了緩存(cache)來存儲已經分詞的結果,這有助于提高分詞效率,尤其是在處理大量文本時。而在分詞之前,分詞器使用正則表達式(regex)對文本進行預處理,這有助于簡化後續的分詞步驟,例如去除标點符号和非字母數字字符。
而整體的思路上,它采用的依然是字節對編碼(BPE),這是一種有效的詞彙擴展方法,它通過叠代地合并最常見的字符對來構建詞彙表,進而可以有助于處理未知詞彙(UNKs)。同時它還提供了多種配置選項,如錯誤處理策略(errors)、未知詞标記(unk_token)、開始序列标記(bos_token)、結束序列标記(eos_token)和填充标記(pad_token),這些選項允許用戶根據具體需求定制分詞器的行爲。
從這些僅有的劇透中,可以看出 Qwen2 繼續在對基礎模型層面的預訓練方法做着改進。而自從 Qwen 發布以來,整個通義家族都在以一種十分驚人的速度叠代和更新完善着,Qwen-VL,Qwen-Audio 等相繼發布。最近 Qwen-VL 還剛剛推出了 Qwen-VL-Plus 和 Max 兩個升級版本,在多模态能力上實現了大幅提升。
這種全尺寸和多類目的特點,讓 Qwen 系列成爲開源社區最歡迎的基座模型之一。而在此次的 " 劇透 " 代碼裏,也可以看到,Qwen2 可能最先發布的是它 70 億參數的版本,名字是 Qwen2-7B-beta 和 Qwen-7B-Chat-beta。
而且,另一個很重要的信息是,目前它上傳的代碼還顯示,Qwen2 模型開源協議依然是 Apache 2.0,也就是說,這個目前最全尺寸的中國開源大模型将繼續是免費可商用的。