DeepSeek V4.1 Flash architecture: making a giant AI faster through reuse
AIが長い会話を扱うとき、負担になるのは新しい計算だけではありません。同じ文脈を層ごとに保存し、同じ参照先を何度も探すことにも手間がかかります。DeepSeek V4.1 Flashは、この重複を減らす設計を組み合わせています。
この記事はAIの分析をもとに執筆しました。
一度作った記憶を、どう使い回すか。 AttentionとKVキャッシュの基本から始め、文脈を共有し、検索結果まで引き継ぐしくみをたどります。最後には、DeepSeekの構成図が「情報の流れ」として見えてきます。

Transformerは、何をしているのか。
まず、モデルに共通するしくみを押さえます。AttentionとKVキャッシュがわかると、後半に出てくるDeepSeekの設計を「何の負担を減らしたのか」で読めるようになります。
文章を読むことを、二つの計算に分ける
言語モデルは、入力された文章を読み、その続きに来る小さな単位を一つずつ予測します。この単位をトークン(token)と呼びます。単語一つのこともあれば、単語の一部や記号のこともあります。
トークンは、そのままでは計算できません。まず数値の並び、つまりベクトルに変換します。そのベクトルを何層もの処理に通し、最後に次のトークンの候補へ点数をつけます。Transformerは、この処理を組み立てるための基本構造です。[3]
この基本ブロックを何層も重ねる
実際の層には、元の情報を足し戻す残差接続(Residual Connection)や、数値を整える正規化もあります。
Attentionは情報を集める処理、FFNはその情報を加工する処理です。層を重ねるたびに表現が更新され、文章の離れた場所にある関係も扱えるようになります。後で登場するMoEは、主にFFNを複数の小さなネットワークへ分けたしくみです。
未来を見ずに、続きを予測する
文章の続きを予測するなら、正解を先に見てはいけません。そこで、各位置から参照できるのはその位置と、それより前に限ります。この制約がCausal Maskです。すでに処理した位置に未来の情報が流れ込まないことが、後で説明するキャッシュの再利用につながります。
Attentionは、必要な情報を集めるしくみ
Attentionは、「いま必要な情報が、文章のどこにあるか」を調べるしくみです。ただし、検索結果を一件だけ取り出すのではありません。関連の強さに応じて、複数の場所の情報を混ぜ合わせます。
そのために、各トークンの表現から三つのベクトルを作ります。Query(Q)は今探している情報、Key(K)は照合の手がかり、Value(V)は照合した先から受け取る情報です。検索に向いた特徴と、取り出したい内容を分けている、と考えると整理できます。[3]
「A社の納期は当初4週間。その後、6週間に訂正された。現在の納期は?」
いま、何を探しているか
どの場所が関係しているか
その場所から何を受け取るか
「次へ」で進みます。強調は説明用で、実モデルの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は必ず文法担当」のように役割が固定されているわけではありません。
KVキャッシュは、計算済みの結果を使い回す
回答は一度で完成するのではなく、トークンを追加しながら伸びていきます。そのたびに過去の情報を参照しますが、すでに作ったKとVまで毎回作り直す必要はありません。これを保存しておくのがKVキャッシュです。
Causal Maskがあるため、同じモデルで同じ先頭部分を処理する限り、後ろに新しいトークンが増えても、過去のK/Vは変わりません。新しい位置の分だけ計算して、保存済みのK/Vに追加できます。
A → B → C → D → E → F の順に、説明用の6トークンを処理します。
キャッシュなし
同じトークンも、次の行で再計算
KVキャッシュあり
過去の分を使い回し、新しい分だけ計算
各行は生成を一段進めたときの処理、各列はトークンA〜Fです。KとVの一組を作ることを1回と数えています。一層分の概念図であり、Attentionの照合回数や実測時間ではありません。
Qだけを保存しないのは、次の位置が別のQを使うから
Qは「その位置が、何を知りたいか」を表します。3番目のトークンを処理するときにはQ₃を使いますが、4番目へ進むと、4番目のために新しく作ったQ₄で過去を調べます。次の計算にQ₃をもう一度持ち込む場面はありません。
Q₃ → K₁, K₂, K₃ → V₁, V₂, V₃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とも、役割が異なります。
「保存する量」と「読む量」を分けて考える
キャッシュは便利ですが、会話が長くなるほど保存する量も増えます。しかも通常の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は、この候補探しを層ごとに繰り返す負担にも対処します。
Decoder-onlyの利点と、読む・書くの違い
多くの生成モデルが採用してきたDecoder-onlyは、入力と回答を一本の列として扱います。質問、回答、コード、ツールの結果を後ろへつなぎ、「次のトークンを予測する」という同じ処理で進められます。
この統一性は、学習にも利用にも都合がよいものでした。文章を次のトークン予測に使え、会話の続きを足したときは過去のKVを再利用できます。Decoder-onlyが広まった理由は、読み取り能力だけの比較ではなく、こうした扱いやすさや実装基盤の蓄積からも考えられます。[7]
Encoderがあるかより、「未来を見るか」が重要
古典的なEncoder–Decoderでは、Encoderが入力文を前後から読み、Decoderが出力を生成します。一方、Causal Encoderは、名前にEncoderとあっても未来を参照しません。前半で文脈を処理し、その表現を後半で使うという役割の分担と、過去だけを見る制約は両立できます。
また、入力全体をまとめて処理する段階をPrefill、その後にトークンを一つずつ生成する段階をDecodeと呼びます。前者は長い列をまとめて処理でき、後者は直前の生成結果を待つ必要があります。同じモデルでも、二つの段階では計算の進み方が違います。
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の重み、どの位置を見るかという選択結果は、区別して考える必要があります。
このしくみを、DeepSeekはどう組み替えたか。
ここからはDeepSeek V4.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]
文章・コード・画像など
前半20層で文脈を処理
Encoderの表現からGlobal KVへ
後半20層が共有KVを参照
次のトークンを決める
この図は役割の分担を示しています。入力の量で層数が変わるわけではありません。 長い入力を記憶へ変える段階と、その記憶を使って続きを決める段階で、使う経路が違います。次の章で、回答が一つずつ伸びる様子を追います。
まず、容量・計算・記憶を別々の数字として読む
- 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]
長い入力は一度準備し、生成に使い回す
長い資料を読み込む段階と、その続きを一つずつ決める段階では、必要な仕事が違います。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回として、通常の40層モデルを 40 ×(入力+出力)、CEDを 20 × 入力+40 × 出力 と数えた概算です。入力側で省ける20層分が、全体のどれだけを占めるかを比べています。
実測時間や総演算量ではありません。Attentionの方式、最初の出力の準備、キャッシュの復元などは別途影響します。前半の状態を後半が参照できるように設計・学習されていることが、この省略の前提です。
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と、計算を省くための実装
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→1圧縮 · 系統1 | 1組 | 356 B |
| 2→1圧縮 · 系統2 | 1組 | 356 B |
| 2→1圧縮 · 系統3 | 1組 | 356 B |
| 1→1保存 · 系統4 | 2組 | 712 B |
| 2トークン分の合計 | 5組 | 1,780 B |
1,780 ÷ 2 = 890バイト/トークン。元の式にある「1/2+1/2+1/2+1」は、各保存系統の量を一トークンあたりに割り直したものです。
288バイトと68バイトは、どう数えるのか
実際のGPUには、この記憶だけでなく、モデルの重みや計算途中の作業領域も必要です。さらに、メモリは一定の区画で確保するため、余白や管理用データも増えます。「100万トークンで約890 MB」はGlobal KVの中身の量であって、必要なGPUメモリの総量ではありません。
遠くの記憶と、直近を読むためのメモは別に持つ
直前に書いた言葉のつながりを扱うため、SWAはすぐ近くの範囲を参照します。公開設定の範囲は128トークンです。遠い情報はGlobal KVから、直近の情報はこの局所的な経路から集めることで、二つの役割を分担しています。[1][10]
作業の再開などで直近用のKVが手元にない場合は、保持している大域的な状態と直近のトークン列を使い、必要な局所状態を作り直します。これがBounded Replayです。保存・読み戻しを減らす代わりに、短い範囲を再計算するという設計です。[1]
残りの部品は、それぞれ何を担うのか
構成図には、まだ略語が残っています。ここからは、情報をどこから受け取り、どう加工し、どう出力するかに沿って、それぞれの役割を見ます。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が、この生成の進め方を支えます。
ブロック図を、下から上へ読む
ここまでの部品を一枚の図へ戻します。まず追うのは、入力 → 左側のEncoder → 共有記憶 → 右側のDecoder → 出力という大きな流れです。その後で、同じ箱が何度繰り返されるかを見ます。
左から右へ渡るGlobal KVは、後半が参照する文脈です。一方、生成中の最新トークンの表現は、EncoderからDecoderへ進みます。参照する記憶の経路と、今処理しているトークンの経路は、同じではありません。 下の図は技術報告を読みやすくまとめたもので、接続の詳細は公式Figure 2にあります。[2]
図を読み解く
図の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層です。入力を長くしても、この繰り返し回数は変わりません。
高い能力は、構造と学習の両方で支えられる
効率のよい構造は、大きなモデルを動かすための土台です。その土台の上で、どのような知識や振る舞いを身につけるかを決めるのが学習です。V4.1 Flashの能力を見るには、構造と学習を合わせて考える必要があります。
構造が処理を支え、学習が振る舞いを育てる
DeepSeekが報告する45兆トークンは、学習全体で処理したデータの量です。一回の質問に入れられる100万トークンとは、数えているものが違います。まず大量の文章や画像から基本的な関係を学び、その後に、良い回答例や試行の成否を使って振る舞いを調整します。[1]
たとえばコード修正なら、完成した答えを読むだけでなく、ファイルを探し、変更し、テストし、失敗した箇所を直す流れを扱います。DeepSeekは、こうしたエージェント向けの課題と環境を大量に作る学習を重視しています。効率のよい構造と、課題に合った訓練の両方がある、というのがここでのポイントです。部品ごとの寄与を最終成績から切り分けられるわけではありません。
一つの順位ではなく、課題ごとの差を見る
コードの修正、端末の操作、科学の推論では、求められる力が違います。公表結果にも、その違いが表れています。V4.1が近い成績を出す課題がある一方、差が残る課題もあります。[1]
公表値の比較と、数字の読み方
| 評価課題 | V4.1 Flash | Opus 5 | GPT-5.6 Sol |
|---|---|---|---|
| DeepSWE v1.1コード修正 | 74.2 | 74.0 | 73.0 |
| Terminal-Bench 2.1端末操作 | 90.6 | 89.1 | 88.8 |
| GPQA Diamond科学の推論 | 90.9 | 93.4 | 94.1 |
| ProgramBenchプログラミング課題 | 20.3 | 37.0 | 23.0 |
数値は同じ行の中で比べます。DeepSWEの74.2は課題を解決した割合、GPQAの90.9は一回の回答の正答率として報告されています。一方、ProgramBenchは別の指標(Almost@1)なので、単に「正答率20.3%」とは読めません。V4.1は最も強く考えさせる設定で評価されています。この表はDeepSeek自身の公表値で、第三者による統一条件の評価ではありません。
実用では、同じ仕事を安定して完了できるか、そのために何回やり直し、いくらかかったかまで見る必要があります。「クローズドモデルと競える」は、すべての課題で同じ能力という意味ではありません。
構成図は「情報を作る場所と、使い回す場所」の地図
構成図に戻ったら、まず「いま処理しているトークンはどこを通るか」と「参照する過去はどこに保存されているか」を別々に追います。EncoderとDecoderを通る経路、Global KVを参照する経路が見分けられれば、全体像はつかめています。
次にCSA2を見ます。Fullは読む先を探し、Reindexは候補内で選び直し、Reuseは選ばれた先を引き継ぐ。それでも、その先をどう読むかというAttentionは各層で続く。その後でMoEが情報を加工します。
V4.1の工夫は、全部の計算を一律に軽くすることではありません。省ける準備、共有できる記憶、やり直さなくてよい検索を分け、その一方で、今の判断に必要な処理は残すことです。この区別が、構成図の矢印と略語を読む手がかりになります。
出典と読み方
DeepSeek固有の仕様は、2026年9月11日時点の公開資料に基づきます。図はしくみを伝えるために簡略化しています。関連研究を紹介していることと、そのすべてがV4.1に実装されていることは、同じではありません。
- 01DeepSeek-V4.1-Flash · model card
モデルの構造、公表仕様、学習、評価。
DeepSeek · 2026 - 02DeepSeek-V4.1-Flash · technical report
Figure 2の構成、CEDとCSA2の詳細。
DeepSeek · 2026 - 03Attention Is All You Need
TransformerとQ・K・Vの基本。
Vaswani et al. · 2017 - 04Fast Transformer Decoding: One Write-Head is All You Need
Multi-Query Attention。
Shazeer · 2019 - 05GQA: Training Generalized Multi-Query Transformer Models
Grouped-Query Attention。
Ainslie et al. · 2023 - 06DeepSeek-V2
MLAによるKVの低次元表現。
DeepSeek · 2024 - 07You Only Cache Once: Decoder-Decoder Architectures for Language Models
共有Global KVとPrefillの早期終了。
Sun et al. · 2024 - 08DeepSeek-V3.2-Exp
DeepSeek Sparse Attention。
DeepSeek · 2025 - 09DeepSeek-V4.1-Flash · release announcement
モデル公開時の説明。
DeepSeek · 2026 - 10Minimal inference reference
公開設定、参照コード、本番用ではないことの注記。
DeepSeek · 2026 - 11Native Sparse Attention
圧縮・選択・局所Attentionの組み合わせ。
Yuan et al. · 2025 - 12Reducing Transformer Key-Value Cache Size with Cross-Layer Attention
CLAによる層間KV共有。
Brandon et al. · 2024 - 13Cross-layer Attention Sharing for Large Language Models
LiSAによるAttentionパターンの再利用。
Mu et al. · 2024 - 14CLAA: Cross-Layer Attention Aggregation
複数層の重要度の集約。
McDanel et al. · 2026 - 15Conditional Memory via Scalable Lookup
Engramの条件付きメモリ。
Cheng et al. · 2026 - 16mHC: Manifold-Constrained Hyper-Connections
複数の残差経路と、混合を安定させる制約。
Xie et al. · 2025 - 17DSpark: Confidence-Scheduled Speculative Decoding
下書き生成と、信頼度に応じた検証。
Cheng et al. · 2026
この記事はAIの分析をもとに執筆しました。