Architecture notes · DeepSeek V4.1 Flash

DeepSeek V4.1 Flash architecture: making a giant AI faster through reuse

AIが長い会話を扱うとき、負担になるのは新しい計算だけではありません。同じ文脈を層ごとに保存し、同じ参照先を何度も探すことにも手間がかかります。DeepSeek V4.1 Flashは、この重複を減らす設計を組み合わせています。

2026年9月11日

この記事はAIの分析をもとに執筆しました。

一度作った記憶を、どう使い回すか。 AttentionとKVキャッシュの基本から始め、文脈を共有し、検索結果まで引き継ぐしくみをたどります。最後には、DeepSeekの構成図が「情報の流れ」として見えてきます。

Ⅰ · 共通知識

Transformerは、何をしているのか。

まず、モデルに共通するしくみを押さえます。AttentionとKVキャッシュがわかると、後半に出てくるDeepSeekの設計を「何の負担を減らしたのか」で読めるようになります。

01共通知識

文章を読むことを、二つの計算に分ける

言語モデルは、入力された文章を読み、その続きに来る小さな単位を一つずつ予測します。この単位をトークン(token)と呼びます。単語一つのこともあれば、単語の一部や記号のこともあります。

トークンは、そのままでは計算できません。まず数値の並び、つまりベクトルに変換します。そのベクトルを何層もの処理に通し、最後に次のトークンの候補へ点数をつけます。Transformerは、この処理を組み立てるための基本構造です。[3]

Transformerの一層には、二つの主な仕事がある
文章 → トークン → 数値の表現
Attention:ほかのトークンから情報を集める
FFN:集めた情報を加工する

この基本ブロックを何層も重ねる

次のトークンの候補と、その確率

実際の層には、元の情報を足し戻す残差接続(Residual Connection)や、数値を整える正規化もあります。

Attentionは情報を集める処理、FFNはその情報を加工する処理です。層を重ねるたびに表現が更新され、文章の離れた場所にある関係も扱えるようになります。後で登場するMoEは、主にFFNを複数の小さなネットワークへ分けたしくみです。

未来を見ずに、続きを予測する

文章の続きを予測するなら、正解を先に見てはいけません。そこで、各位置から参照できるのはその位置と、それより前に限ります。この制約がCausal Maskです。すでに処理した位置に未来の情報が流れ込まないことが、後で説明するキャッシュの再利用につながります。

02共通知識

Attentionは、必要な情報を集めるしくみ

Attentionは、「いま必要な情報が、文章のどこにあるか」を調べるしくみです。ただし、検索結果を一件だけ取り出すのではありません。関連の強さに応じて、複数の場所の情報を混ぜ合わせます。

そのために、各トークンの表現から三つのベクトルを作ります。Query(Q)は今探している情報、Key(K)は照合の手がかり、Value(V)は照合した先から受け取る情報です。検索に向いた特徴と、取り出したい内容を分けている、と考えると整理できます。[3]

Q・K・Vの役割を、一段ずつ確かめる

「A社の納期は当初4週間。その後、6週間に訂正された。現在の納期は?」

Q · Query

いま、何を探しているか

K · Key

どの場所が関係しているか

V · Value

その場所から何を受け取るか

「次へ」で進みます。強調は説明用で、実モデルのAttentionを観測したものではありません。Q・K・Vは文章ではなく数値のベクトルです。

計算としては、照合して、重みをつけて、足し合わせる

まず今のQと各Kの内積を計算し、関連の強さを点数にします。次に、その点数を合計1になる重みに変えます。最後に、各Vをその重みで足し合わせます。たとえば重みが0.7の場所は、0.1の場所より強く結果へ反映されます。これは「その場所が70%の確率で正しい」という意味ではありません。

数式とMulti-Head Attention

Attention(Q,K,V) = softmax(QKᵀ / √d) V

Q・K・Vは、それぞれ学習済みの行列を使って作ります。Multi-Head Attentionは、この照合を異なる変換で複数並行して行うしくみです。それぞれのHeadは別の関係を捉えられますが、「このHeadは必ず文法担当」のように役割が固定されているわけではありません。

03共通知識

KVキャッシュは、計算済みの結果を使い回す

回答は一度で完成するのではなく、トークンを追加しながら伸びていきます。そのたびに過去の情報を参照しますが、すでに作ったKとVまで毎回作り直す必要はありません。これを保存しておくのがKVキャッシュです。

Causal Maskがあるため、同じモデルで同じ先頭部分を処理する限り、後ろに新しいトークンが増えても、過去のK/Vは変わりません。新しい位置の分だけ計算して、保存済みのK/Vに追加できます。

同じトークン列でも、「作り直した数」が違う

A → B → C → D → E → F の順に、説明用の6トークンを処理します。

+ 新しく計算 / ↻ 作り直す✓ 保存済みK/Vを使う

キャッシュなし

同じトークンも、次の行で再計算

KVキャッシュあり

過去の分を使い回し、新しい分だけ計算

各行は生成を一段進めたときの処理、各列はトークンA〜Fです。KとVの一組を作ることを1回と数えています。一層分の概念図であり、Attentionの照合回数や実測時間ではありません。

Qだけを保存しないのは、次の位置が別のQを使うから

Qは「その位置が、何を知りたいか」を表します。3番目のトークンを処理するときにはQ₃を使いますが、4番目へ進むと、4番目のために新しく作ったQ₄で過去を調べます。次の計算にQ₃をもう一度持ち込む場面はありません。

質問は入れ替わる。参照先は引き継がれる。
3番目を処理Q₃ → K₁, K₂, K₃ → V₁, V₂, V₃
4番目を処理Q₄ → K₁, K₂, K₃, K₄ → V₁, V₂, V₃, V₄

一方、K₁〜K₃とV₁〜V₃は、Q₄からも参照されます。だから保存する価値があります。図書館にたとえるなら、Qは今回の調べもの、KとVは次の調べものでも使う索引と資料です。過去のQが集めた情報はすでにその位置の処理に反映されていますが、Qそのものをキャッシュして読み直す必要はないのです。

キャッシュしても、過去を読む処理は残ります。 省けるのはK/Vを作り直す処理です。新しいQが保存済みKと照合し、Vを取り込むAttentionは、引き続き必要です。

モデルの知識・入力文脈・KVキャッシュの違い

モデルの重みは、学習で調整された数値です。入力文脈(context)は、今回与えた文章や会話です。KVキャッシュは、その文脈を繰り返し参照するための一時的な内部表現です。外部の文書を検索して入力に足すRAGとも、役割が異なります。

04共通知識

「保存する量」と「読む量」を分けて考える

キャッシュは便利ですが、会話が長くなるほど保存する量も増えます。しかも通常のTransformerでは、同じトークンでも層ごとに表現が違うため、各層がそれぞれのK/Vを持ちます

ここには二つの別の問題があります。一つは「どれだけ保存するか」。もう一つは「次のトークンを決めるために、どれだけの情報を読むか」です。書庫を小さくしても、毎回すべての本を調べていれば、検索の手間は残ります。

Head間の共有:MHA、MQA、GQA

Multi-Head Attention(MHA)は、複数のQで異なる見方をするしくみです。MHAでは各Headが専用のK/Vを持ちます。MQAはすべてのQ Headで一組のK/Vを共有し、GQAはQ Headをグループに分け、グループごとにK/Vを共有します。読む側の視点を複数残しつつ、保存する側の重複を減らす工夫です。[4][5]

保存量を数字で見る

容量 ≈ 同時処理数 × トークン数 × 層数 × 2(KとV)× KV Head数 × 次元数 × 1数値のバイト数

例として、32層・32 KV Head・Headあたり128次元・1数値2バイト・131,072トークンなら、MHAのKVは64 GiBになります。KV Headを8に減らせば16 GiB、1にすれば2 GiBです。これは同じ仮想モデルの保存形式だけを変えた計算で、品質や速度を保証する比較ではありません。

Sparse Attention:読む場所を絞る

Full Attentionは、参照できる過去の位置をすべて調べます。Sparse Attentionは、その一部を選んで読みます。そこで、重いAttentionの前に、軽いIndexer(候補を選ぶしくみ)を置く方法があります。ただし、候補を選ぶ作業自体にも計算が必要です。後半のCSA2は、この候補探しを層ごとに繰り返す負担にも対処します。

05共通知識

Decoder-onlyの利点と、読む・書くの違い

多くの生成モデルが採用してきたDecoder-onlyは、入力と回答を一本の列として扱います。質問、回答、コード、ツールの結果を後ろへつなぎ、「次のトークンを予測する」という同じ処理で進められます。

この統一性は、学習にも利用にも都合がよいものでした。文章を次のトークン予測に使え、会話の続きを足したときは過去のKVを再利用できます。Decoder-onlyが広まった理由は、読み取り能力だけの比較ではなく、こうした扱いやすさや実装基盤の蓄積からも考えられます。[7]

Encoderがあるかより、「未来を見るか」が重要

古典的なEncoder–Decoderでは、Encoderが入力文を前後から読み、Decoderが出力を生成します。一方、Causal Encoderは、名前にEncoderとあっても未来を参照しません。前半で文脈を処理し、その表現を後半で使うという役割の分担と、過去だけを見る制約は両立できます。

また、入力全体をまとめて処理する段階をPrefill、その後にトークンを一つずつ生成する段階をDecodeと呼びます。前者は長い列をまとめて処理でき、後者は直前の生成結果を待つ必要があります。同じモデルでも、二つの段階では計算の進み方が違います。

06共通知識

YOCO:層をまたいで記憶を共有する

2024年のYOCOは、「長い文脈のK/Vを、後半の各層で別々に持つ必要があるか」と問い直しました。名前はYou Only Cache Once。前半で作ったGlobal KVを、後半の層が共有する設計です。[7]

前半のSelf-Decoderが文脈を処理し、その最終表現から共有KVを作ります。後半のCross-Decoderは、この共有KVを参照します。長い入力の各位置について後半の隠れ状態を順番に作る必要がなくなり、Prefillの一部を省けます。生成時には前半と後半の両方が働きます。

このような層をまたいだ再利用(cross-layer reuse)には、何を共有するかによって複数の方向があります。K/Vそのもの、Attentionの重み、どの位置を見るかという選択結果は、区別して考える必要があります。

関連研究は、何を共有しているのか

CLAは隣接層のK/Vを共有します。LiSAは似たAttentionのパターンを対応づけ、差分を近似します。CLAAは複数層のトークン重要度を集約します。共通するのは、層を独立したものとして毎回すべて計算するのではなく、層同士の似ている部分を利用する点です。[12][13][14]

Ⅱ · V4.1 Flashの設計

このしくみを、DeepSeekはどう組み替えたか。

ここからはDeepSeek V4.1 Flashの具体的な構成を見ます。まず全体の流れを押さえ、入力処理、候補検索、記憶の圧縮へと進み、最後にブロック図を読みます。

07V4.1 Flashの設計

V4.1 Flashは、文脈の準備と回答の生成を分ける

V4.1 Flashの中心は、40層のTransformerを20層のCausal Encoderと、20層のDecoderに分けた構成です。Decoderが使う大域的な記憶は、Decoder各層の過去の状態ではなく、Encoderの最終状態から作ります。[1]

この構成をCausal Encoder–Decoder、略してCEDと呼びます。DeepSeekは技術報告でYOCOからの着想を示しています。共通する「前半で処理した文脈を後半で共有する」という発想に、疎な検索や低精度の保存を組み合わせています。[2][7]

V4.1 Flashの全体像
1入力

文章・コード・画像など

2Causal Encoder

前半20層で文脈を処理

3共有する文脈

Encoderの表現からGlobal KVへ

4Decoder

後半20層が共有KVを参照

5出力

次のトークンを決める

この図は役割の分担を示しています。入力の量で層数が変わるわけではありません。 長い入力を記憶へ変える段階と、その記憶を使って続きを決める段階で、使う経路が違います。次の章で、回答が一つずつ伸びる様子を追います。

まず、容量・計算・記憶を別々の数字として読む

552B
本体のパラメータは5,520億個

学習で調整する数値の総量です。毎回このすべてを使うわけではありません。

8B / 16B
一トークンあたりに使う部分は80億/160億

長い入力の準備では主に前半20層を使い、続きを決めるときは前半と後半の計40層を使います。トークン数に応じてExpertを6個から12個へ増やす、といった違いではありません。

1M
最大100万トークンの文脈

入力できる長さです。細部をすべて正しく思い出す保証ではありません。

890 B
Global KVは一トークンあたり1 KB未満

100万トークンで約890 MB。ただしモデル全体のメモリ使用量ではありません。

これらはDeepSeekの公表値です。小さいのは「一度に動かす部分」や「文脈の保存量」であり、モデル全体の容量そのものではありません。[1]

08V4.1 Flashの設計

長い入力は一度準備し、生成に使い回す

長い資料を読み込む段階と、その続きを一つずつ決める段階では、必要な仕事が違います。V4.1 Flashはこの違いを利用し、入力の準備には前半20層を、生成には前半と後半の計40層を使う経路を設けています。

入力を、あとで参照できる形に整える

たとえば、見積書を読み込んで納期を答える場面を考えます。まず必要なのは、書かれている納期や訂正の情報を、回答中に取り出せる形にすることです。これが入力を準備するPrefillの役割です。

前半のEncoderは、入力を文脈に応じた数値表現へ変換します。V4.1では、この表現から後半のDecoder用の共有記憶(Global KV)を作れます。後半はそこを参照できるため、長い入力のすべての位置について、後半20層の通常の処理を繰り返す必要が減ります。[1][7]

生成した語も、次の予測では「すでにある文脈」になる

回答を「6週間です」と書くとします。ここでは説明のため、[6][週間][です]を一つずつのトークンと考えます。[6]を出した後で[週間]を決めるには、モデルは「いままでの資料に加え、すでに[6]と書いた」ことも踏まえる必要があります。

直前に確定した[6]をEncoderへ通すと、それまでの文脈を踏まえた表現が作られ、共有記憶にも加わります。その表現をDecoderへ通し、過去の情報を参照しながら、次に来る[週間]の確率を計算します。書いた語を文脈に加え、それを踏まえて次の語を決める。生成中も両方の半分を使うのは、この流れを繰り返すためです。

入力の準備と生成で、経路を切り替える

通常の40層モデル

V4.1 Flash:20層+20層

マスは一層を表し、総数は常に40です。点線は長い入力全体に対して省ける主経路です。最初の回答を決めるための入力末尾の処理や、直近の記憶の準備・復元までゼロになるという意味ではありません。トークンの分け方は説明用です。

入力が長いほど、省ける処理も増える

この省略は、入力の各トークンに対して効きます。1,000トークンの入力では20層分の処理を1,000個分、10万トークンなら10万個分省ける、というのが大まかな考え方です。一方、生成では一歩ごとに40層を使います。多くの資料を読み、比較的短い答えを出す仕事ほど、入力側の処理を減らす利点が大きくなります。

DeepSeekが公表する「入力時8B・生成時16B」は、それぞれの経路で計算に参加するパラメータ数です。8Bは80億、16Bは160億を表します。前半だけを主に使うか、前半と後半を使うかという構造の違いが、この数字にも表れています。[1]

入力と出力の割合で、省ける処理を比べる
出力は1,000トークンに固定
Decoder-only
CED

一トークンが一層を通る処理を1回として、通常の40層モデルを 40 ×(入力+出力)、CEDを 20 × 入力+40 × 出力 と数えた概算です。入力側で省ける20層分が、全体のどれだけを占めるかを比べています。

実測時間や総演算量ではありません。Attentionの方式、最初の出力の準備、キャッシュの復元などは別途影響します。前半の状態を後半が参照できるように設計・学習されていることが、この省略の前提です。

09V4.1 Flashの設計

CSA2:一度絞った候補を、次の層へ渡す

長い文脈から情報を集めるには、まず参照する場所を選びます。これを毎層、最初からやり直すと、検索そのものが大きな負担になります。CSA2は、一度絞った範囲や選んだ位置を、後続の層へ引き継ぎます。

ここでいう「位置」は、文脈から作ったK/Vの保存場所です。軽い検索を担当するIndexerが参照先を絞り、主Attentionが、その場所のK/Vを使って情報を集めます。候補を探すことと、選んだ情報を取り込むことを分担しています。[1][10]

下の図では、24位置から10位置を候補プールに残し、その中の4位置を主Attentionで読みます。候補プールは「この中から選べる」という範囲です。Fullで範囲を作り、Reindexでその中から選び直し、Reuseで選択を引き継ぐ。同じトークンが後続の層へ進む様子を、順に見ていきます。

位置はそのまま。候補と選択を引き継ぐ。

同じ一つのトークンを処理する層の違いを示しています。間にある繰り返しの層は省略しています。位置・重み・Vの数値は説明用です。実際のVとAttention出力は数値の並びで、ここでの「中間結果」は最終的な回答文ではありません。

選ぶ位置は同じでも、情報の混ぜ方は変わる

最後の二段階では、読む位置は2・10・15・23のままです。一方、層が進むと、今の表現から作るQも変わります。そのQと選択済みのKを照合し直すので、各Vをどれだけ取り込むかという重みも変わり得ます。図では、参照先とVを保ったまま、重みと中間結果だけが変わります。

Reuseが引き継ぐのは、「どこから情報を集めるか」という選択です。その情報を今の層でどう使うかは、改めて計算します。検索を省きながら、層ごとの処理は続けられる。ここに、単なる結果のコピーとは違う工夫があります。[1][10]

公開設定の数字と、図で簡略化した部分

図は24位置→10候補→4選択という小さな例です。公開設定では、Decoderの候補プールは最大16,384位置、主Attentionが選ぶ大域的な位置は512です。候補の絞り込みは現在処理しているトークンに対するもので、同じ候補を後続の層が使います。直近を読むSWAの経路は別にあります。[10]

Full・Reindex・Reuseの配置は、モデルの設計で決まっています。図は三つの役割を比較するために途中の層を省略しています。「Full」は候補検索のモード名であり、主Attentionですべての位置を読むという意味ではありません。候補数・選択数は、実際に参照できる位置の数にも制限されます。

さらに読む:NSAと、計算を省くための実装

NSAは、文脈を粗く圧縮する処理、重要な細部を選ぶ処理、直近を読む局所Attentionを組み合わせた研究です。「全体の傾向」と「必要な細部」を分けて扱う点はCSA2の理解にも役立ちます。CSA2にはさらに、候補プールや層間での検索結果の再利用など、独自の構成があります。[11]

図の「候補だけを再採点する」という利点を得るには、計算も候補の範囲に限る必要があります。全位置を採点してから候補外を隠す実装では、全位置分の計算はすでに発生しています。公開の参照コードにはこのような経路があり、READMEも本番用の配信エンジンではないと説明しています。図は設計上省ける処理を示しています。[10]

10V4.1 Flashの設計

890バイトとは、何をどれだけ保存した量なのか

CSA2は「読む場所」を減らしました。では、その前提になる記憶を、どれだけ小さく保存できるでしょうか。890バイトは、Global KV全体の保存量を、入力一トークンあたりに換算した値です。文字そのもののサイズでも、モデル本体のサイズでもありません。[1]

バイトは、データの量を数える単位です。ここでは1 KBを1,000バイト、1 MBを100万バイトとして考えます。890バイトは1 KB弱ですが、100,000トークンなら約89 MB、100万トークンなら約890 MBになります。小さなメモも、大量に持てば無視できない量になります。

小さくする方法は、「メモのどこを減らすか」で分ける

一つ目は、書く数値の個数を減らすことです。MLAのような方法は、大きなK/V表現を、必要な特徴を残すよう学習した小さな表現にします。CSAの系列方向の圧縮では、隣り合う複数トークンを一つの記録へまとめます。前者は「一件の中身」、後者は「記録する件数」を減らす工夫です。[6][10]

二つ目は、一つの数値を表す細かさを抑えることです。これが量子化です。FP4は基本の値を4ビットで表します。16ビットで保存する場合より値の部分は小さくなりますが、表せる細かさも変わるので、単に桁を捨てればよいわけではありません。値の大きさを調整する補助データも使います。

三つ目は、同じ記憶のコピーを減らすことです。各層が別々の記憶を持つ代わりに、複数の層が同じ保存先を使います。数値の個数、数値の細かさ、コピーの数。別の部分を減らすので、これらは組み合わせられます。[1][7]

890バイトの計算を、「2トークン分」から追う

まず、保存する一組を356バイトとします。これは、実際に読む情報(主KV)288バイトと、候補の検索に使う情報(検索用Key)68バイトを合わせたものです。[10]

次に、入力が2トークン増えた場合を考えます。公開設定には、2トークンを一つの保存位置へまとめる系統が三つと、各トークンを一つずつ保存する系統が一つあります。

2トークン増えたときに、各保存系統へ足すデータ
保存系統増える保存位置増えるデータ量
2→1圧縮 · 系統11組356 B
2→1圧縮 · 系統21組356 B
2→1圧縮 · 系統31組356 B
1→1保存 · 系統42組712 B
2トークン分の合計5組1,780 B

1,780 ÷ 2 = 890バイト/トークン。元の式にある「1/2+1/2+1/2+1」は、各保存系統の量を一トークンあたりに割り直したものです。

288バイトと68バイトは、どう数えるのか

「512次元」とは、ここでは512個の数が並ぶという意味です。4ビットの数は、8ビット=1バイトに二つ入ります。そのため主KVは512 ÷ 2=256バイト。16個ごとに1バイトの尺度を持つので、32バイトを足して288バイトです。検索用Keyは128個の数で64バイト、32個ごとの尺度が4バイトで、合計68バイトになります。[1][10]

尺度は、保存した小さな数値を、どの大きさとして扱うかを調整するための補助情報です。356バイトには、この尺度の分も含めています。これは公開形式のデータ量を数えたもので、参照実装が実行中に確保するテンソルの量を測った数字ではありません。

実際のGPUには、この記憶だけでなく、モデルの重みや計算途中の作業領域も必要です。さらに、メモリは一定の区画で確保するため、余白や管理用データも増えます。「100万トークンで約890 MB」はGlobal KVの中身の量であって、必要なGPUメモリの総量ではありません。

遠くの記憶と、直近を読むためのメモは別に持つ

直前に書いた言葉のつながりを扱うため、SWAはすぐ近くの範囲を参照します。公開設定の範囲は128トークンです。遠い情報はGlobal KVから、直近の情報はこの局所的な経路から集めることで、二つの役割を分担しています。[1][10]

作業の再開などで直近用のKVが手元にない場合は、保持している大域的な状態と直近のトークン列を使い、必要な局所状態を作り直します。これがBounded Replayです。保存・読み戻しを減らす代わりに、短い範囲を再計算するという設計です。[1]

11V4.1 Flashの設計

残りの部品は、それぞれ何を担うのか

構成図には、まだ略語が残っています。ここからは、情報をどこから受け取り、どう加工し、どう出力するかに沿って、それぞれの役割を見ます。CEDやCSA2と同じ問題を解く部品ばかりではありません。

MoE:加工する担当を、毎回全員呼ばない

Attentionで集めた情報は、FFNというネットワークで加工します。MoEは、この加工部分に多数の小さなネットワークを用意し、いまのトークンに使う一部だけを選びます。選ぶしくみをRouter、選ばれるネットワークをExpertと呼びます。

V4.1では、各MoE層に選択式のExpertが384個あり、そのうち6個と、常時使う共有Expertが1個参加します。384個すべての重みを用意しつつ、毎回すべてを計算することは避けられます。数学担当や法律担当といった役割が、人間によって決められているわけではありません。図の各CSA2の後にあるMoEは、この情報を加工する部分です。[1]

Engram:よく現れる並びのために、学習済みの表を使う

たとえば「purchase order」のような短い並びが現れたとします。Engramは、その並びを手がかりに表の位置を計算し、対応する数値表現を取り出して、通常のネットワークの処理を補います。よく使う表現の材料を、毎回すべて作り直さずに参照する発想です。表に入っているのは、完成した回答文ではありません。

KVキャッシュが今回の文章を読んで作る一時メモなのに対し、Engramは学習で用意しておく表です。RAGのように外部の最新文書を検索するものでもありません。図では入力の近くにあるEngramから、処理の流れへ情報が加わります。大きな表でも、その都度必要な場所だけを参照します。[1][15]

Engramの規模と、名前にある「メモリ」の意味

V4.1の公表値は196B、つまり1,960億パラメータです。これは表を構成する学習済みの数値の量であり、1,960億件の事実が一対一で登録されているという意味ではありません。検索結果の正しさを保証するデータベースでもありません。[1]

Vision Encoder:画像も、同じ本体で扱える数値にする

モデルは画像のピクセルを、そのまま文章のトークンとして読めません。そこでDeepSeek-ViTが画像の特徴を数値へ変え、変換層が本体に渡せる形へ整えます。こうして、表の線や配置なども含む画像の情報が、文章の数値表現と同じ処理の流れへ入ります。文字だけを抜き出すOCRとは役割が違います。[1]

ここにはEncoderという名前が二度出てきます。Vision Encoderは画像の入口Causal Encoderは本体の前半20層です。別の部品なので、図でも画像側の入口と、本体の左側を分けて見てください。

mHC:加工しながらも、元の情報を引き継ぐ

何層も加工を重ねるとき、毎回元の状態を完全に上書きするより、元の状態に加工結果を足すほうが、情報を引き継ぎやすくなります。これが残差接続の基本です。mHCは、その通り道を複数に広げ、各層がどの経路を読み、どこへ結果を戻すかも学習します。

ただし、経路を自由に混ぜ続けると、信号が大きくなりすぎるなどの問題が起きます。mHCは混ぜ方に制約をかけ、情報が安定して流れるようにします。Single-Pass mHCは、この受け渡しに伴う実行上の負担も抑える設計です。図では、CSA2やMoEを縦につなぐ情報の通り道に関わります。[1][16]

DSpark:下書きをまとめて検証し、順番待ちを減らす

通常は、次のトークンを一つ決めないと、その次を決める計算へ進めません。DSparkは数トークン先の候補を下書きし、本体の検証を通った範囲をまとめて進めます。下書きに自信があるかどうかに応じて、検証する長さも調整します。[1][17]

たとえば「6」の後に「週間・以内・です」と下書きしても、必ず全部を採用するわけではありません。途中までしか検証を通らなければ、残りは見直します。省きたいのは、大きな本体を毎回一トークン分ずつ待つ回数です。図では出力付近のDSparkが、この生成の進め方を支えます。

12V4.1 Flashの設計

ブロック図を、下から上へ読む

ここまでの部品を一枚の図へ戻します。まず追うのは、入力 → 左側のEncoder → 共有記憶 → 右側のDecoder → 出力という大きな流れです。その後で、同じ箱が何度繰り返されるかを見ます。

左から右へ渡るGlobal KVは、後半が参照する文脈です。一方、生成中の最新トークンの表現は、EncoderからDecoderへ進みます。参照する記憶の経路と、今処理しているトークンの経路は、同じではありません。 下の図は技術報告を読みやすくまとめたもので、接続の詳細は公式Figure 2にあります。[2]

構造を一望したまま、部分ごとの役割を読む
DeepSeek V4.1 Flash architectureA twenty-layer causal encoder produces context states used by a twenty-layer decoder. The decoder shares candidate indices. Engram supplies learned memory and DSpark assists generation. Causal Encoder · 20 Final hidden states CSA2 (2, Full) + MoE5 × [Reuse + MoE]× 3 groups = 18 layers SWA + MoE× 2 layers Embedding Global KV+ indexer keysfrom encoder states Decoder · 20 CSA2 (1, Reindex)+ MoE3 × [Reuse + MoE]× 4 groups = 16 layers CSA2 (1, Full) + MoE3 × [Reuse + MoE]4 layers Candidate Poolshared selection space Text / Image → Embeddings new-token state (decode) EngramlookupMoE: routed computationmHC: residual paths DSparkText output
矢印を下から上へ追う

図を読み解く

図のCSA2は「情報を集める」部分、MoEは「集めた情報を加工する」部分です。そこを一組として見ると、複雑な図も基本ブロックの繰り返しに見えてきます。英語のラベルは、公式図を開いたときに対応づけられるように残しています。

括弧の数字と、20層の数え方

CSA2の括弧内の2は、2トークンを一つの大域KV位置へまとめる設定、1は一トークンごとに位置を持つ設定です。これはAttentionの回数や層の数ではありません。

左側は、最初の2層に「Full 1層+Reuse 5層」を3組足して、2+6×3=20層。右側は「Full 1層+Reuse 3層」の4層に、「Reindex 1層+Reuse 3層」を4組足して、4+4×4=20層です。入力を長くしても、この繰り返し回数は変わりません。

13V4.1 Flashの設計

高い能力は、構造と学習の両方で支えられる

効率のよい構造は、大きなモデルを動かすための土台です。その土台の上で、どのような知識や振る舞いを身につけるかを決めるのが学習です。V4.1 Flashの能力を見るには、構造と学習を合わせて考える必要があります。

構造が処理を支え、学習が振る舞いを育てる

DeepSeekが報告する45兆トークンは、学習全体で処理したデータの量です。一回の質問に入れられる100万トークンとは、数えているものが違います。まず大量の文章や画像から基本的な関係を学び、その後に、良い回答例や試行の成否を使って振る舞いを調整します。[1]

たとえばコード修正なら、完成した答えを読むだけでなく、ファイルを探し、変更し、テストし、失敗した箇所を直す流れを扱います。DeepSeekは、こうしたエージェント向けの課題と環境を大量に作る学習を重視しています。効率のよい構造と、課題に合った訓練の両方がある、というのがここでのポイントです。部品ごとの寄与を最終成績から切り分けられるわけではありません。

一つの順位ではなく、課題ごとの差を見る

コードの修正、端末の操作、科学の推論では、求められる力が違います。公表結果にも、その違いが表れています。V4.1が近い成績を出す課題がある一方、差が残る課題もあります。[1]

公表値の比較と、数字の読み方
DeepSeek公表値。高いほど良い指標の抜粋。
評価課題V4.1 FlashOpus 5GPT-5.6 Sol
DeepSWE v1.1コード修正74.274.073.0
Terminal-Bench 2.1端末操作90.689.188.8
GPQA Diamond科学の推論90.993.494.1
ProgramBenchプログラミング課題20.337.023.0

数値は同じ行の中で比べます。DeepSWEの74.2は課題を解決した割合、GPQAの90.9は一回の回答の正答率として報告されています。一方、ProgramBenchは別の指標(Almost@1)なので、単に「正答率20.3%」とは読めません。V4.1は最も強く考えさせる設定で評価されています。この表はDeepSeek自身の公表値で、第三者による統一条件の評価ではありません。

実用では、同じ仕事を安定して完了できるか、そのために何回やり直し、いくらかかったかまで見る必要があります。「クローズドモデルと競える」は、すべての課題で同じ能力という意味ではありません。

14V4.1 Flashの設計

構成図は「情報を作る場所と、使い回す場所」の地図

構成図に戻ったら、まず「いま処理しているトークンはどこを通るか」と「参照する過去はどこに保存されているか」を別々に追います。EncoderとDecoderを通る経路、Global KVを参照する経路が見分けられれば、全体像はつかめています。

次にCSA2を見ます。Fullは読む先を探し、Reindexは候補内で選び直し、Reuseは選ばれた先を引き継ぐ。それでも、その先をどう読むかというAttentionは各層で続く。その後でMoEが情報を加工します。

V4.1の工夫は、全部の計算を一律に軽くすることではありません。省ける準備、共有できる記憶、やり直さなくてよい検索を分け、その一方で、今の判断に必要な処理は残すことです。この区別が、構成図の矢印と略語を読む手がかりになります。

出典と読み方

DeepSeek固有の仕様は、2026年9月11日時点の公開資料に基づきます。図はしくみを伝えるために簡略化しています。関連研究を紹介していることと、そのすべてがV4.1に実装されていることは、同じではありません。

  1. 01
    DeepSeek-V4.1-Flash · model card

    モデルの構造、公表仕様、学習、評価。

    DeepSeek · 2026
  2. 02
    DeepSeek-V4.1-Flash · technical report

    Figure 2の構成、CEDとCSA2の詳細。

    DeepSeek · 2026
  3. 03
    Attention Is All You Need

    TransformerとQ・K・Vの基本。

    Vaswani et al. · 2017
  4. 04
    Fast Transformer Decoding: One Write-Head is All You Need

    Multi-Query Attention。

    Shazeer · 2019
  5. 05
    GQA: Training Generalized Multi-Query Transformer Models

    Grouped-Query Attention。

    Ainslie et al. · 2023
  6. 06
    DeepSeek-V2

    MLAによるKVの低次元表現。

    DeepSeek · 2024
  7. 07
    You Only Cache Once: Decoder-Decoder Architectures for Language Models

    共有Global KVとPrefillの早期終了。

    Sun et al. · 2024
  8. 08
    DeepSeek-V3.2-Exp

    DeepSeek Sparse Attention。

    DeepSeek · 2025
  9. 09
    DeepSeek-V4.1-Flash · release announcement

    モデル公開時の説明。

    DeepSeek · 2026
  10. 10
    Minimal inference reference

    公開設定、参照コード、本番用ではないことの注記。

    DeepSeek · 2026
  11. 11
    Native Sparse Attention

    圧縮・選択・局所Attentionの組み合わせ。

    Yuan et al. · 2025
  12. 12
    Reducing Transformer Key-Value Cache Size with Cross-Layer Attention

    CLAによる層間KV共有。

    Brandon et al. · 2024
  13. 13
    Cross-layer Attention Sharing for Large Language Models

    LiSAによるAttentionパターンの再利用。

    Mu et al. · 2024
  14. 14
    CLAA: Cross-Layer Attention Aggregation

    複数層の重要度の集約。

    McDanel et al. · 2026
  15. 15
    Conditional Memory via Scalable Lookup

    Engramの条件付きメモリ。

    Cheng et al. · 2026
  16. 16
    mHC: Manifold-Constrained Hyper-Connections

    複数の残差経路と、混合を安定させる制約。

    Xie et al. · 2025
  17. 17
    DSpark: Confidence-Scheduled Speculative Decoding

    下書き生成と、信頼度に応じた検証。

    Cheng et al. · 2026

この記事はAIの分析をもとに執筆しました。

構成図を拡大

細部が見づらい場合は横にスクロールできます。Escでも閉じられます。