Preface

前言

打開網易新聞 查看精彩圖片

楊松琳專注于線性注意力機制、機器學習與大語言模型交叉領域,聚焦高效序列建模的硬件感知算法設計,圍繞線性注意力、循環(huán)神經網絡優(yōu)化開展研究,并取得多項研究成果,多篇論文被ICLR 2025、NeurIPS 2024等頂會收錄。

此外,她還開源了Flash-Linear-Attention項目,已在 GitHub 擁有 2k 星標。通過線性注意力與硬件優(yōu)化技術,將 Transformer 模型的注意力計算復雜度大幅降低,顯著提升長序列任務(如文本、圖像處理)的訓練推理速度與內存效率。

Background

背景介紹

為什么要做基礎模型新架構研究?

今天想和大家分享的主題是下一代基礎模型的架構展望。今天的這個分享不會涉及太多特別細節(jié)的內容,主要是一個比較high level和general的overview。

打開網易新聞 查看精彩圖片

首先,從背景來說,序列建模本身涉及的任務非常廣,比如文本就是一個典型的 sequence modeling 任務,音頻、視頻也可以用序列建模的方法來處理,包括強化學習中的決策序列,DNA 和蛋白質的序列等等,甚至很多其他任務都可以看作是序列建模的問題。而 Transformer 其實就是一個非常典型的序列建模模型。

打開網易新聞 查看精彩圖片

之前很多人的觀點是,基礎模型的架構其實沒必要換,大家更關注數據,覺得數據比架構重要得多。因為過去在堆計算資源、堆數據的情況下,Scaling Law 還沒有撞到那個墻,這種情況下,大公司就沒有動力去研究新的架構,而是直接通過增加算力和數據規(guī)模讓模型變得更強。所以,一直以來很多人都認為架構沒有那么重要,數據才是關鍵。

但現(xiàn)在的情況不太一樣了,比如大家可能比較熟悉的Ilya,他去年在一次 keynote 里提到,他覺得預訓練已經撞墻了。現(xiàn)在主要的 Scaling 方向其實是在 Test Time Scaling,比如像 DeepSeek-R1,它有很長的思維鏈,而在這種情況下,Transformer 在長文本上的效率問題就會被進一步放大。所以,在這個背景下,新架構的研究就顯得越來越重要。

研究新的架構不僅有可能改善 Test Time Scaling 的效率問題,也可能在 Training Time Scaling 方面帶來更多的想象空間。

比如,如果現(xiàn)在數據和計算資源的邊際效益遞減,其實可能是因為架構本身已經到了瓶頸。

如果我們去設計一些更expressive的架構,會不會就能進一步提升模型的表現(xiàn)?這其實是一個很值得探索的問題。

Component?????????

序列模型的核心組件

打開網易新聞 查看精彩圖片

序列建模通常包含兩個核心部分:Token MixingChannelMixing。

  • Token Mixing 主要是在序列維度上面做一個混合

  • Channel Mixing 是在特征維度上面進行一個混合

因為這個輸入就是序列長度乘特征長度,所以只能在這兩個維度上進行混合,這兩個部分可以說是非常本質的。

之前有一個叫 MetaFormer 的工作,它把整個 Transformer 的架構抽象成兩個模塊: 一個是 Token Mixer 一個是 Channel Mixer Token Mixer 可以換成各種在序列維度上做混合的 layer,而 Channel Mixer 也可以換成在特征維度上做混合的 layer。
Token Mixing

打開網易新聞 查看精彩圖片

我們先來看 Token Mixing,目前大家主要還是用全局的 Full Attention,不過這里面其實還是有兩個問題。

  1. 第一個問題是 RoPE,RoPE 是一種相對位置編碼,它在長度外推上有一些局限性,沒法很好地進行長度外推。而且 RoPE 和Transformer 本身的表達能力也不夠強,所以需要借助一些 Chain-of-Though 來增強它的表達能力。

  2. 另外一個方面是效率問題,Self-Attention 機制的時間復雜度是平方級的,這在長序列建模任務中有很大的問題。比如在視頻生成任務中,如果直接在幾百萬長度的序列上跑 Full Attention,計算成本會非常高。像視頻這種數據,隨便幾分鐘的視頻就能達到幾百萬的序列長度,在這種情況下,Attention 機制的平方復雜度即便有 Flash Attention 來優(yōu)化,依然是不容忽視的。另外還有一個線性的空間復雜度問題。在解碼過程中,KV Cache 的大小會隨著解碼長度的增加而不斷增長,很容易導致 out of memory 的問題。

RoPE后已有的改進

打開網易新聞 查看精彩圖片

首先,我們來講 Position Encoding。也就是說 RoPE 還能換成什么別的東西?

  • 之前有個方法叫 NoPE,它的做法是直接把 Position 空間去掉,但實際效果并不好。

  • 另外,也有很多方法嘗試改進 RoPE,讓它可以做長度外推。但最后大家發(fā)現(xiàn),直接增大 RoPE 的 base,然后在長文本上繼續(xù)訓練,整體上的超長文本能力會更好一些。


上下文相關的位置編碼——看好的方向

打開網易新聞 查看精彩圖片

那接下來,Position Encoding 未來可能的發(fā)展方向是什么?

我個人比較看好上下文相關的 Position Encoding。RoPE 其實是上下文無關的位置編碼,它的值和前后詞的內容沒有關系。而有研究提出了一種Contextual Position Encoding,在一些任務上,比如 selective Copy、counting、Flip-Flop,比起 RoPE 這種相對位置編碼,效果會更好一些。

打開網易新聞 查看精彩圖片

然后最近 ICLR 25 也有一些關于位置編碼的改進工作,比如我們這篇Scaling Stick-Breaking Attention,我也是作者之一。

論文鏈接:https://arxiv.org/abs/2412.06464 https://arxiv.org/abs/2412.06464

在這篇工作里,我們提出了一個完全不需要 RoPE 的編碼方式,核心思路是改進 Attention算法之前的全局 Softmax Attention 是位置不敏感的,而我們把它換成從右到左的 Sigmoid Attention,它本身的累乘機制就自帶位置敏感性,所以不需要額外的位置編碼??梢园堰@種自帶的位置敏感性,看作是一種上下文相關的位置編碼。然后下面有幾個公式,核心的思想就是從右到左的 Sigmoid 計算,即 (1 - sigmoid) 的累乘。

實驗結果表明,這種Stick-Breaking Attention 在性能上是穩(wěn)壓 RoPE 的。

打開網易新聞 查看精彩圖片

另外的話,還有一篇 Mila 的工作,叫做Forgetting Transformer,它其實可以看成是 ALiBi 的一個動態(tài)版本。ALiBi 的話,大家應該也比較熟悉,它是一種位置編碼,但是它的衰減方式在長文本任務上容易出問題,所以現(xiàn)在大家基本都不用 ALiBi,而是更多選擇 RoPE。而Forgetting Transformer的核心想法,就是把 ALiBi 的衰減因子從一個固定的常數變成一個動態(tài)值。它通過類似 Forgetting Gate這種機制來計算這個衰減值。因為這個衰減是跟上下文相關的,所以它也可以看成是一種上下文相關的位置編碼。

高效注意力機制

打開網易新聞 查看精彩圖片

然后,除了位置編碼之外,就是注意力機制的一些改進了。主要的話,還是有三種機制:

打開網易新聞 查看精彩圖片

  • 第一種是線性注意力,這部分的話,之前我其實也寫過一些內容,包括 tutorial video,還有 slides,大家可以到我主頁上去看,這里就不細講了,簡單提一下。像線性注意力,它基本上可以分成幾類,比如加衰減率的模型,像MSR 做的RetNet,然后是Lightning Attention,就是MiniMax-01里面用的注意力機制。然后像Mamba-2,它其實就是一個線性注意力,再加上一個動態(tài)的衰減。而 Gating Linear Attention 這個是我之前在 ICML 的一個工作,它也是一個動態(tài)衰減的線性注意力。另外最近比較流行的一種線性注意力機制叫做Test-time 在線學習的線性注意力。最近這類方法比較流行,比如DeltaNet、Test-time Training、Titans。像Titans這篇工作,大家最近應該能經常在微信公眾號、三大頂會上面看到。然后像RWKV-7、Gated DeltaNet這些都是表達能力更強的在線學習線性注意力的一些變體。如果大家對這些更感興趣的話,可以去看我主頁的 slides。

打開網易新聞 查看精彩圖片

  • 然后除了線性注意力,還有一種東西叫做稀疏注意力。稀疏注意力一般分為靜態(tài)稀疏和 動態(tài)稀疏。靜態(tài)稀疏指的是那個稀疏的 pattern 是事先給定的,它在計算過程中不會發(fā)生變化。像這種靜態(tài)稀疏的一些經典工作,比如 BigBird,這其實是谷歌之前做的一個工作。然后 StreamingLLM,它是用一個 sliding window,再取最前面的那個 attention sink。動態(tài)稀疏 就是模型會根據不同位置的信息,動態(tài)地改變那個稀疏模式。最近比較火的就是 DeepSeek 和 Kimi,他們兩個都同時出了兩個動態(tài)稀疏機制。第一個是 Native Sparse Attention,另一個是 MoBA。

打開網易新聞 查看精彩圖片

  • 在這兩種方法之外,我們還會碰到一種叫做混合注意力的一些模型,它主要可以分為兩類:

    • 一種是在層間混合;

  • 另一種是在層內混合。層間混合的意思是,在不同的層里有不同的注意力機制,比如有的層使用 Linear Attention,有的層使用 Softmax Attention。而 層內混合 則是同一層中會同時使用 Sliding Window Attention 和 Linear Attention 等不同的機制。

  1. 線性注意力

打開網易新聞 查看精彩圖片

這里我展示了一些來自我主頁的 slides,基本上想表達這都是一些線性注意力在硬件上非常高效的RNN。

打開網易新聞 查看精彩圖片

它通過一些高效的操作,比如外積,來更新狀態(tài),而外積有很多良好的性質,這也讓其在硬件上訓練時非常高效。具體細節(jié)這里就不再展開了。另外,加Decay的方法是在 Hidden State 前加一個 Gamma(Gamma 介于 0 和 1 之間)。這樣做的效果是,逐步忘掉之前的信息,更加關注當前的狀態(tài)。

這種機制其實就是 Lightning Attention 在 MiniMax-01 中使用的那種方法,是一個相對簡單的機制。

打開網易新聞 查看精彩圖片

另外,還有一種方法是 test-time 訓練模型。這種方法的目標函數其實是在線學習的目標函數,而隱狀態(tài)的更新是通過在線梯度下降來進行的。例如 DeltaNet,它通過在線優(yōu)化一個線性回歸損失來更新模型的參數,通過一次梯度下降,進而得到 DeltaNet 的更新公式。

以上這些方法都是典型的線性注意力方法,它們的基本思想在之前的工作中已經有了一些總結,具體細節(jié)可以參考我的主頁。

2. 稀疏注意力

打開網易新聞 查看精彩圖片

稀疏注意力可以分為靜態(tài)稀疏和動態(tài)稀疏。

  • 靜態(tài)稀疏的模式是事先設定好的,并且不會隨著輸入的變化而變化。通常這些方法因為給定了很強的先驗,所以它們的表達能力相對較弱?,F(xiàn)今,這類方法已經不太被使用了。

    打開網易新聞 查看精彩圖片

  • 動態(tài)稀疏是近年來比較流行的一種方式。它的特點是稀疏模式是由每個 token 動態(tài)選擇的。動態(tài)稀疏的主要挑戰(zhàn)在于,由于其稀疏模式非常靈活,沒有固定規(guī)則,因此可能會出現(xiàn)不連續(xù)的稀疏模式,而不連續(xù)的模式在硬件上會比較慢。為了應對這一問題,近期的研究通過將選擇分為 block 來進行優(yōu)化。因為一個 block 通常包含多個連續(xù)的 tokens,所以它的讀取是連續(xù)的,這樣有助于提高硬件效率。

打開網易新聞 查看精彩圖片

接下來簡單介紹一下 NativeSparseAttention 的思想,一共有三個分支(compression/block selection/sliding window)。它將整個序列劃分成若干個 chunk,每個 chunk 首先通過 compression 將其壓縮成一個 token 表示。然后使用新的橙色的querytoken對這些 compressed tokens 進行注意力操作,得到一個 compressed attentionoutput。在這個過程中,注意力分數會用來選擇 top-k 的 attention blocks,然后在這些 blocks 上執(zhí)行 sparse attention。最終,再補充一個 sliding window attention,這就是 Native Sparse Attention 的主要做法。

Native Sparse Attention 之所以被稱為原生稀疏注意力,是因為它可以直接進行預訓練,并且有一些假設:每個 query group 下的每個 head 選擇相同的 KV block,這樣可以避免不同的 head 重復讀取不同的 KV block,從而減少 IO 開銷。

打開網易新聞 查看精彩圖片

此外,Native Sparse Attention 還可以將每個位置的 attention heads 合并成一個矩陣乘法,這對硬件加速有很大幫助。

打開網易新聞 查看精彩圖片

一個有趣的發(fā)現(xiàn)是Native Sparse Attention 甚至在一些任務上能超過全局注意力 的效果。傳統(tǒng)上大家認為稀疏注意力只是掉點,也就是效果只能保持,無法提高,但 Native Sparse Attention 通過學習自己的注意力分布,能夠達到不輸于全局注意力的效果。這表明,通過設計新的架構并進行預訓練,可能會得到比現(xiàn)有架構更好的效果。

打開網易新聞 查看精彩圖片

MoBA 的思想與 NativeSparseAttention 非常相似。它的 chunk pooling 使用的是 mean pooling,不像 NSA 中那樣有多個分支,因此不會引入額外的參數,也不強制選擇相鄰的 blocks。它也比較兼容 Flash Attention 的 kernel,但在硬件訓練效率上不如 Native Sparse Attention。不過,MoBA 通過預訓練,能夠實現(xiàn)與 full attention 相比完全不遜色的性能。

3. 混合注意力

接下來就是混合注意力。

打開網易新聞 查看精彩圖片

前面我們講到,它有很多種混合方法,基本上就是說不同的層就用不同的混合方式,也就是說在不同層之間我們用不同的注意力機制。大部分層都用的是高效的注意力機制,只有少數層用的是全局的 softmax attention。

舉個例子,通常我們會有 7/8 層用線性注意力,而 1/8 層用全局 softmax attention。

這樣做的好處就是,我們可以把 7/8 層 的 KV cache 直接省下來,因為線性注意力的 hidden state 可以表示為 RNN,它的 KV cache 基本上可以忽略不計。

這方面比較典型的例子,比如 Jamba 和 MiniMax-01。他們的做法就是每七層使用 Lightning attention。前面提到過,Lightning attention 其實就是最簡單的線性注意力,再加一個衰減項。這里的 m 通常取的是 7,所以形成了 7:1 的比例,這個比例在實際中是比較常見的。

打開網易新聞 查看精彩圖片

前面我們也說過,這種方法需要存儲 1/8 層的 KV cache。如果層間混合做得更極致的話,可能只需要存儲一個 KV cache。也就是說,前半部分的層采用高效的注意力機制,然后它算出來的 KV cache 就可以用于后面所有的全局注意力層。這樣的話,首先能節(jié)省預填充的時間,因為在預填充時,我們只需要計算前面的高效層,得到 KV cache 就好了,不需要計算后面的全局注意力層,我們只需要存儲中間那一層的 KV cache,后面的層可以共享這個中間層的 KV cache。

這篇就叫 YOCO,也就是 You Only Cache Once,意思是我只存一層的KVcache,然后做層間混合。

打開網易新聞 查看精彩圖片

相比之下,注意力的混合方法主要是層內混合,比如 Jamba 這種比較典型的層內混合方法,它就是在一層里同時用 sliding window attention 和 linear attention。具體來說,它先跑一個 sliding window attention,然后在此基礎上再加一個 linear attention,這樣就能在同一層里實現(xiàn)兩種不同的注意力機制。

Channel Mixing

打開網易新聞 查看精彩圖片

再來看注意力機制的 token mixing,它主要是在位置編碼和注意力機制本身上做一些研究。而 channel mixing 一般就是 FFN 層,F(xiàn)FN 層可以被看成是一種key-value形式的associative memory。它的參數可以理解為存儲了一些全局知識,所以大家普遍認為 FFN 和知識存儲是相關的。那么很自然的一個思路就是,我想增大 FFN 的容量,但又不想大幅增加計算量,于是就有了 Mixture of Experts(MoE)模型。現(xiàn)在 MoE 結構基本上成了主流架構,很多支線模型都會帶一些 MoE 組件,因為它是目前非常高效的擴展整體參數規(guī)模的方式。

MoE 還是有很多可以做的東西。

打開網易新聞 查看精彩圖片

比方說,UltraMem 這篇文章就是用張量分解進一步加速 MoE 的 inference。它提出了一個叫做 Memory Layers at Scale 的方法。

打開網易新聞 查看精彩圖片

前面提到,F(xiàn)FN layer 可以理解成一個 memory layer,是用來存全局知識的。而這篇文章的做法就是用了一層非常非常大的 memory layer,來存儲更多的信息。因為這層很大,所以他們不想做全局更新,而是通過一些高效的檢索算法,找到激活的部分,只對這些部分進行查詢和更新。這樣的話,就能在擁有一個超大 memory layer 的同時,不會讓整體的計算復雜度變得不可控。

Thinking

未來方向預測

打開網易新聞 查看精彩圖片

前面主要講了 token mixing 和 channel mixing 能做的一些事情,那架構層面還能有哪些新的思路呢?

目前的模型基本上都是基于 next word prediction,但能不能探索一些非 next word prediction 的方法?

比如,最近有很多研究在做 diffusion large language model,用擴散來做文本生成。還有像 Meta 去年年底推出的一個模型,它做的是 next concept prediction,而不是直接做 next word prediction。此外,還有一些研究在做 Multi-token Prediction,比如 DeepSeek-V3 也有相關的模塊。

另外,現(xiàn)在大家特別關注 test-time scaling,而 test-time scaling 一般是通過長的思維鏈來做的。這種方式可以看作是水平方向的 scaling,那能不能在垂直方向上也做 test-time scaling?

這里的垂直方向指的是layer,如果從這個維度來做,一種比較自然的思路就是 Universal Transformer。那么,在 test-time scaling 的背景下,這類方法能不能有更大的應用空間?這其實也可以歸為 latent reasoning,因為它不像 Chain of Thought 那樣顯式地依賴推理鏈,而是通過隱式的方式進行推理,因此被稱為 latent reasoning。

另外的話,就是關于 memory 機制的進一步探索。之前,F(xiàn)FN 的權重基本上都是靜態(tài)的,那能不能讓這些權重隨著輸入的變化而動態(tài)調整?這樣的話,其實就有點類似于 fast weight 這種比較經典的概念。然后還有一個方向,就是我們能不能加一些顯式的外部記憶?比如 Transformers with Explicit Memory 這篇文章,它就在模型外部外掛了一個很大的知識庫,來作為 KV memory。

最后的話,我們前面講的 token mixing 和 channel mixing 是完全分開的,那能不能把它們結合在一起,直接做一個統(tǒng)一的更新呢?這些都是可以繼續(xù)探索的方向。然后整體來看,在架構層面,其實還有很多優(yōu)化的空間。