技術約11分で読めます

Qwen3-NextのGated AttentionはなぜシグモイドゲートひとつでAttention Sinkを消せるのか

いけさん目次

TransformerのAttentionは、どこを見るかは決められても、見つけた情報を使わないという判断ができない。
参照したいものがない場合でもAttentionはどこかへ配らなければならず、内容と無関係な先頭トークンへ流れていく。これがAttention Sinkと呼ばれる現象だ。
Qwenチームは、この「使わない」の選択肢をAttentionに足した。Softmax Attentionの出力にヘッドごとのシグモイドゲートを掛けるだけの変更で、Gated Attentionと呼ばれる。これで先頭トークンへのAttentionの集中が46.7%から4.8%まで減った。
Qwen3-Next(2025年9月公開の80B-A3B)はこの機構を組み込んだモデルで、単に新しいモデルが出たというより、アーキテクチャをかなり作り直している。
最近Qwen Devアンバサダーの集まりで、この論文を解説した記事が流れてきた。このブログでも単一層だけを狙ってSFTを掛ける実験SAEでモデル内部の特徴を取り出す実験のように、モデルの中で実際に働いている場所をいじる実験を繰り返してきたので、その線の参考として論文を噛み砕いてみた。

Qwen3-Nextは何を作り直したのか

Qwen3-Nextの変更点は大きく4つある。
線形AttentionとSoftmax Attentionを混ぜたハイブリッド構造、総パラメータ80Bに対して推論時は約3Bしか動かない超スパースMoE、Attention SinkやMassive Activationに対処する訓練安定化策、そして投機的デコードを速くするMulti-Token Prediction(MTP)だ。

48層の構成は次の繰り返しになっている。

12×(3×(Gated DeltaNetMoE)    1×(Gated AttentionMoE))12 \times \bigl(\,3 \times (\text{Gated DeltaNet} \to \text{MoE}) \;\to\; 1 \times (\text{Gated Attention} \to \text{MoE})\,\bigr)

4層ブロックが12セット。3層が線形AttentionのGated DeltaNet、1層がSoftmax AttentionベースのGated Attentionという3:1の比率だ。

項目
総パラメータ / アクティブ80B / 約3B
層数48(Gated DeltaNet 36 + Gated Attention 12)
MoEエキスパート512(ルーテッド10 + 共有1を活性化)
Gated AttentionヘッドQ: 16、KV: 2(GQA、ヘッド次元256)
Gated DeltaNetヘッドQ/K: 16、V: 32(ヘッド次元128)
ネイティブコンテキスト262,144トークン(YaRNで約101万まで拡張可)
訓練トークン15T

この設計は後続モデルにも採用されている。
Qwen3-Coder-Nextは同じ80B-A3B構成のコーディング特化版として公開され、2026年4月のQwen3.6-35B-A3BもGated DeltaNetとGated Attentionの3:1ハイブリッドを採っている(細部のパラメータは各モデルで異なる)。
線形Attention側のGated DeltaNetの数式はQwen3.6の記事のほうにまとめてあるので、ここから先はもう片方のGated Attentionの話になる。

なぜAttention Sinkが起きるのか

Attentionが集中する先は、多くの場合は文頭のBOSトークン(文書の開始を示す特殊トークン)だ。
論文の計測では、ゲートなしのベースラインモデルで平均46.7%のAttentionが先頭トークンに割り当てられていた。半分近くが、意味のないトークンに流れている。

原因はSoftmaxの構造にある。
Softmaxは出力を確率分布として正規化する関数なので、これを通ったAttentionの重みは総和が必ず1になる。
つまり各ヘッドは「どこも見ない」という選択ができない。
参照したい情報がコンテキストに存在しない場合でも、合計1のAttentionをどこかに配らなければならず、その受け皿として意味の薄い先頭トークンが使われる。

この現象は先頭トークンへのAttentionの集中だけでなく、hidden stateの特定次元が極端に大きな値を持つMassive Activation(Residual Sinkとも呼ばれる)とセットで現れる。
ベースラインモデルではhidden stateの最大活性値が1053に達していた。
BF16の表現精度は値が大きいほど粗くなるので、この外れ値は数値誤差や量子化劣化の原因になる。

Attention SinkとResidual Sinkがなぜ発生するかについては、「訓練を安定させるための暗黙的な調整機構」と説明する論文を以前の記事で扱った。
あちらの論文はsinkをモデルに必要な仕組みとして読み解く立場で、今回のGated Attention論文は、別の出口を用意するとsinkが大きく減ることを実測した側になる。
Qwen3-8Bのresidual streamで先頭トークンが内容と無関係に一定パターンへ収束する様子は、Qwen-ScopeのSAEをローカルで動かした記事で実際に確認している。この記事はこの記事で面白いので一読してみて欲しい。

Gated Attentionとは何か

Gated Attention for Large Language Models: Non-linearity, Sparsity, and Attention-Sink-Free(2025年5月、Qwenチーム。のちにNeurIPS 2025のBest Paper Awardを受賞)が提案した変更は単純で、SDPA(Scaled Dot-Product Attention、Softmax Attentionの計算本体)の出力に、入力から計算したシグモイドゲートを要素ごとに掛ける。

Y=(σ(XWθ)SDPA(Q,K,V))Wo\mathrm{Y} = \bigl(\,\sigma(X W_\theta) \odot \mathrm{SDPA}(Q, K, V)\,\bigr)\, W_o

XX はAttention層への入力、WθW_\theta はゲート用に追加した線形層、σ\sigma はシグモイド、\odot は要素ごとの積だ。
記号の読み方があやしいときは、AIの記事を読むための数学入門シリーズでシグモイドや行列積を扱っているので、先にそっちを見てほしい。わからなくても感覚だけで、そういう式なんだな、と思えればOKなので、面倒なら読み飛ばしてもらって構わない。
ゲート値は0〜1の範囲を取り、SDPAの出力を通すか絞るかをヘッドごと・トークンごとに決める。

flowchart TD
    X[入力 hidden state] --> QKV[Q / K / V 射影]
    QKV --> SDPA[SDPA<br/>Softmax Attentionの計算]
    SDPA -.->|従来のAttentionは<br/>ここから直接出力射影へ| O[出力射影]
    X --> G[ゲート射影]
    G --> SIG[シグモイド<br/>0〜1のゲート値]
    SDPA --> MUL[要素ごとの積]
    SIG --> MUL
    MUL --> O

Attentionの計算自体には手を入れず、計算が終わった後の出力にゲートを掛ける。

論文は思いつきでこの位置を選んだわけではなく、15Bパラメータ規模のMoEと1.7B denseで、ゲートを挿す位置・粒度・活性化関数を変えた30以上のバリアントを比較している。

ゲート位置結果
SDPA出力の直後最も効果が大きい(採用)
value射影の直後次点
query / key射影の直後改善が小さい
出力射影の後ほぼ効果なし

粒度と形式の比較では、ヘッド固有のゲートがヘッド間共有のゲートを上回り、乗算型のシグモイドがSiLUや加算型を上回った。
最も効果が大きいのは出力の要素ごとにゲートを掛ける形(15B規模で追加2.01億パラメータ)だが、ヘッドごとにスカラー1個の粗いゲートでも性能はほぼ並ぶ。
後者の追加パラメータは160万個程度で、要素ごとゲートの約125分の1に収まる。

なぜゲートを後ろに付けるだけで改善するのか

論文はこの効果を2つの機構に分解している。

潰れていた2つの線形層に非線形が入る

SDPAの出力は VV の線形結合で、VV 自体も入力の線形射影だ。
そしてSDPAの直後には出力射影 WoW_o が続き、この2つの線形層の間に非線形はない。
Attention層の内部だけを見れば、value射影 WvW_v と出力射影 WoW_o は数学的に1つの低ランク線形写像 WvWoW_v W_o にまとめられる形をしている。残差接続や後続の層まで含めたモデル全体の表現力の話ではない。

シグモイドゲートはちょうどこの2つの層の間に挟まる。
これでvalue側の経路は、線形(WvW_v)→ 非線形(ゲート)→ 線形(WoW_o)のサンドイッチになる。MLPがLinear → ReLU → Linearの順で組まれているのと同じ理屈だ。
論文は、入力依存の非線形変換がここに入ってAttention層の表現力が上がることを、改善要因のひとつとして挙げている。

ヘッドが「今回は黙る」を選べるようになる

もうひとつがクエリ依存のスパース性だ。
訓練後のモデルでゲート値を計測すると、平均スコアは0.116だった。
ほとんどのヘッドは、ほとんどの入力に対して出力を大きく絞っている。

これがAttention Sinkの減少に繋がる。
Softmaxの総和1制約はゲートを付けても変わらない。
ただ、参照したい情報がないヘッドの出力をゲートが出力段で抑えられるので、先頭トークンにAttentionを退避させる必要が薄れる、というのが著者らの解釈だ。
要するに、「なんもないので先頭に退避させとけ」という動作を極力なくして、「なんもないなら捨てりゃいい」に置き換えた形だ。
論文が実測で示しているのは、ゲートの導入で先頭トークンへのAttentionの集中と巨大活性が同時に激減した、というところまでになる。

効果は数値にはっきり出ている。

指標ベースラインゲートあり
先頭トークンへのAttention割合46.7%4.8%
hidden state最大活性値105394
PPL(1.7B dense、3.5Tトークン)6.1806.130
MMLU(15B MoE)58.7960.82
RULER 128k(長文ベンチマーク)31.6558.82

RULER(長文コンテキストでの検索・追跡能力を測るベンチマーク)の128kトークンで31.65から58.82というのが一番大きな差だ。
sinkと巨大活性が大幅に減ったことで、RoPEの周波数設定を変えて文脈長を伸ばす操作に対してモデルが壊れにくくなった、と論文は分析している。

訓練の安定性も変わる。
1.7Bモデルを1Tトークン訓練する設定では、ベースラインが発散する学習率8e-3でもゲートありは収束し、loss spike(学習中の損失の突発的な跳ね上がり)も大幅に減った。
最大活性が1053から94に下がったことで、BF16の数値精度が実質的に上がっているのが一因とされている。

Qwen3-Next全体でどう使われているか

Qwen3-NextのGated Attention層は、論文では1.7Bと15Bで実験されていたこの機構を、80B・15Tトークン訓練の実モデルに採用したものだ。
公式ブログでは “Adopt the output gating mechanism from our prior work [2]” として、参照 [2] にこの論文を挙げたうえで出力ゲーティングの採用を明記している。採用理由はAttentionの低ランク問題を減らすためで、Attention SinkやMassive Activationの抑制に役立ち、数値的安定性を確保できたとも書かれている。
16個のQヘッドと2個のKVヘッド(GQA)、ヘッド次元256で、RoPEは256次元のうち先頭64次元にだけ適用する部分RoPEになっている。
公式ブログはこれを、訓練で見た長さを超える入力でも性能が落ちにくくするためと説明している。
仕組みとしては、RoPEを掛けた次元は位置に応じた角度で回転するため、訓練で見た長さを超えると回転角が未知の範囲に入って照合が崩れる。一方RoPEを掛けていない次元は距離と無関係に内容だけで照合するので、系列が伸びても壊れない。位置なしの次元を75%残しておけば、長さを伸ばしたときに崩れうる次元を25%に限定できるわけだ。

訓練の安定化には、ゲート以外の対策も入っている。
前提として、正規化層(RMSNorm)は層を通る値のばらつきを揃えたうえで、学習で調整できる倍率を掛け直す部品だ。Qwen3ではこれをQとKに掛けるQK-Normを使っていたが、この倍率の一部が訓練中に異常に大きくなる問題があった。ここにも外れ値が現れる。
Qwen3-NextのZero-Centered RMSNormは、この倍率の持ち方を変える。倍率そのものを学習する代わりに「1+ズレ」の形に分けてズレのほうを学習し、そこにweight decayを掛ける。ズレが常に0へ引き戻されるので倍率は1の近くに保たれ、異常に大きくなること自体が起きにくくなる。
MoEルーターも初期化時に正規化して、訓練初期に特定のエキスパートへルーティングが偏るのを防ぐ。

MTPは次のトークンだけでなくその先のトークンも予測するモジュールで、事前学習時の追加シグナルとして本体の性能を押し上げつつ、推論時は投機的デコードのドラフト生成器として使える。
本体と同じ文脈を共有するドラフトなので受理率が高く、複数トークンをまとめて確定させて推論を速くする。
投機的デコードの仕組みと実測はGemma 4のMTPドラフターをM1 Maxで動かした記事で扱っている。


Gated Attentionのゲート値は、forward一回で全ヘッド分読み出せる。どのヘッドが出力を通し、どのヘッドが絞っているかが、モデルの外からそのまま観測できる。
このブログでは、学習済みのモデルを外からいじって挙動を変えられないか、という実験をいくつか続けてきた。1層だけをフルランクSFTした校正器では、eval_lossは中間層に局在したのに、書き換えの挙動はその数字についてこなかった。それをJ-lensで読んだ回では、学習した層が「直すものがない」方向を書き込んで書き換えを止めていることまで分かり、この方向をベクトル1本のゲートにして素のQwenへ足せばSFTなしで校正器が組めるかもしれない、という締めになった。Knowing–Using Gapの論文では、覚えたはずの知識が中間層に届かず座礁していて、隠れ状態を推論回路の走る層へ移植し直すだけで、重みを1ビットも変えずに正答が戻っていた。
どれも、本体はそのままに、必要な判断や表現だけを狙った場所へ後から効かせようとする試みだ。順番に試してはみたが、結局のところ自分の中でブレイクスルー的な解決策にはなっていない。
Gated Attentionが効いているのは、どのヘッドで出力を絞るかを事前学習の段階から全ヘッド分まとめて鍛え込んであるからだ。後から効かせる苦労をそもそも回避している。自分がやりたいのはそれを学習済みモデルの外から近づけることで、今回はその参考になればと思って論文を読んだ。
Qwen3系のローカルモデルでヘッドごとのAttentionの分布とゲート値を可視化する実験は、別の記事でやるつもりだ。