Googleによって作られたオンプレ向けLLM(gemma-4-26B-A4B)のアーキテクチャを解説します。アーキテクチャを解説する過程で、
- Attentionとは
- Transformerとは
- MoEとは
- マルチモーダルインプットの仕組み
- パラメータ数を示す「26B-A4B」の意味
についても解説します。計算ロジックに絞って、なるべく具体的に説明することを心掛けました。尚、解説を省略しているものは以下の通りです。
- 位置エンコーディング
シンプルなニューラルネットワークとLLMの違い
図1の左は、LeNetのような画像認識を行うニューラルネットワークです。入力は固定サイズのピクセル(例えば、$28\times28$)に限定されています。それ以外のサイズを入れることはできません。
図1の右は、gemma-4のようなLLMです。入力サイズが固定されていません。生成したtokenを次の入力に使うことで、次々に文章を生成していくことができます。
gemma-4-26B-A4B の全体アーキテクチャ
gemma-4-26B-A4Bでは、1tokenのデータを2816次元のベクトルとして扱います。アーキテクチャは下のようになっています。
図2: gemma-4-26B-A4B の全体アーキテクチャ
図2の上半分は「token1、token2を入力として、token3を生成する処理」、下半分は、「token1、token2、token3を入力として、token4を生成する処理」に着目したgemma-4-26B-A4Bの全体アーキテクチャです。
gemma-4-26B-A4Bは「Attention、MoEなどから構成されるTransformerという構造」が30層接続したネットワークです。図の中の1層内の、同じ色のブロックは、同じ重みパラメータを持つことを示しています。つまり、
- 上半分(token3を生成する処理)も下半分(token4を生成する処理)も同じ重みパラメータを使う
- 「token1の処理を行うMoE」と「token2の処理を行うMoE」と「token3の処理を行うMoE」は同じ重みパラメータを持つ
- その同じMoEブロックを、上半分、下半分共通で使う
- 16個のAttentionブロックはすべて異なる重みパラメータを持つ
- その16個のAttentionブロックを、上半分、下半分共通で使う
となります。16個並列に並んだAttentionのことを16-headのAttentionといいます。30層のTransformerの間で互いに同じ重みパラメータを共有することはありません。
Attention以外のブロックの入力サイズは固定であるのに対して、Attentionブロックの入力サイズは可変です。Attentionブロック以外はtoken毎に独立に処理する(入力は常に2816次元)のに対して、Attentionブロックではtoken間で相互作用があるからです。LLMの入力tokenのサイズが可変なのは、このAttentionによって実現されています。Attentionについては、次の章で詳しく説明します。
NormはNormalizationのことで、正規化処理を表しています。本資料では、重みパラメータの数が0または、とても少ないブロックを白色の箱で記載します。
Attentionブロック と KVキャッシュ
Attention(片方向Attention)は、ターゲットとなるtokenだけでなく、それよりも前のtokenの情報も含めて、どこに注意を向ければよいかを求めて、文脈を反映したベクトルへの変換を行うメカニズムです。gemma-4-26B-A4Bでは、full attention、sliding attentionという2種類のAttentionを併用しています。
| full attention | sliding attention | |
|---|---|---|
| 何token前まで見るか | 262144token前まで | 1024token前まで |
| 計算量 | 大きい | 小さい |
| Transformer何層目に登場するか | 6, 12, 18, 24, 30 | 1~5, 7~11, 13~17, 19~23, 25~29 |
full attentionとsliding attentionを併用することで、「計算コストの削減」と「長文の文脈理解」の両立を狙っています。6、12、18、24、30層目以外のTransformerに用いられるsliding attentionのアーキテクチャは下の通りです。full attentionも同じ構成ですが、「256」のところが「512」になります。

図3: Attentionブロック(sliding attention)
図3の①~④の説明を行います。
- ①: token1、token2の情報を入力として、文脈を反映したtoken1、token2の情報を返すAttentionブロック
- ②: token1、token2、token3の情報を入力として、文脈を反映したtoken1、token2、token3の情報を返すAttentionブロック
- ③と④: ①と②の中身を詳しく書いたもの
ここでも、同じ色は同じ重みパラメータを持つブロックであることを示しています。つまり、図3には、「Q、K、Vと書かれた箱」が6個存在しますが、それらは同じ重みパラメータを持つということです。
ここで注目するポイントは、③と④の計算には多くの共通点がある点です。③の計算結果をキャッシュしておけば、④の計算は、token3の計算部分のみ(緑の部分)行えば良いことが分かります。そのキャッシュの仕組みがKVキャッシュと呼ばれます。
MoEブロック
次に、図2の中にあるMoEブロックについて解説します。MoEとは「Mixture of Experts」の略で、入力ごとに最適な「専門家(エキスパート)」のモデル部分だけを動かして処理を行う仕組みのことです。
図4: MoEブロック
図4の①②③の説明をします。
- ①: MoEブロック
- ②: MoEブロックの中身を詳しくしたもの
- ③: MoEブロックの中に存在する128のexpertの中で、一つのexpertに着目して詳しく説明したもの
③はゲート付きのニューラルネットワークです。②の中には、異なる重みパラメータを持つexpertブロック(③)が128個並列に並んでいます。オレンジ色のLinearブロックでは、128個のうち 8 experts を選ぶための計算を行っています。灰色でマスクしているexpertブロックは、推論の際に使われない、残りの 120 experts を示しています。
後で計算が出てくるのですが、Attentionブロックよりも、MoEの中のLinearブロックのサイズが非常に大きいです。よって、推論の際に使うexpertの数を8/128にすることで、全体としても、大きな推論速度向上効果が得られます。
前処理
gemma-4-26B-A4Bはマルチモーダル対応のモデルです。ここでは、「マルチモーダル対応がどのように実現されているか」を画像とテキストを入力したときの例で説明します。
gemma-4-26B-A4Bでは、前処理によって、すべての入力データを、その種別(テキスト、画像、動画)に関わらず、2816次元のベクトル$\times$token数に変換します。変換後のベクトルが、図2の左側の入力となります。
テキストのtoken化は、簡単な処理(Embeddingのための巨大なベクトルのうち1列を選択する)によって行われますが、画像のtoken化はメインの処理(図2)と同じように、Transformer(Attention)を使った仕組みで実現されています。
入力画像はまず、画像処理によって16pixel$\times$16pixel$\times$2520patchの単位でまとめられ、それらを入力として27層のTransformerを通ります。メインの処理とは異なり、MoEの仕組みは使われていません。また、重みパラメータの数は、メインの処理よりも小さいです。
このTransformerの中で使われるAttentionは、図3のような片方向のAttentionではなく、双方向のAttentionです。双方向のAttentionは、ターゲットとなるpatchと、その前のpatchだけでなく、前後のpatchの情報も含めて、どこに注意を向ければよいかを求めて、patch(ベクトル)を変換します。前だけでなく後ろのpatchの情報も使うことで、片方向のAttentionよりも、全体の文脈を考慮したベクトル変換が可能となりますが、KVキャッシュは使うことができません。
パラメータ数の計算
「メイン処理」と「前処理」に分けて、パラメータ数の概算を計算してみます。
「メイン処理」のパラメータ数の計算
-
1Transformerあたりのパラメータ数
-
Attention(sliding attention)
- Q生成行列: 2816(in) * 256(out) * 16(Attentionのhead数)
- K生成行列: 2816(in) * 256(out) * 8(Attentionのhead数/2)
- V生成行列: 2816(in) * 256(out) * 8(Attentionのhead数/2)
/2しているのは、2headが1つの重みを共有しているため。この仕組みは、GQA(Grouped Query Attention)と呼ばれます。パラメータ数の合計は23,068,672
-
Attention(full attention)
- Q生成行列: 2816(in) * 512(out) * 16(Attentionのhead数)
- K生成行列: 2816(in) * 512(out) * 2(Attentionのhead数/8)
- V生成行列: Kと重みが共有されている
/8しているのは、GOAによって8headが1つの重みを共有しているため。
パラメータ数の合計は25,952,256
-
Attention(sliding attention)の出口のLinear
- 4096(in) * 2816(out)
パラメータ数の合計は11,534,336
-
Attention(full attention)の出口のLinear
- 8192(in) * 2816(out)
パラメータ数の合計は23,068,672
-
MoEの中のrouterのLinear
- 2816(in) * 128(out)
パラメータ数の合計は360,448
-
MoEの中のdense
- 2816(in) * 2112(out) * 2
- 2112(in) * 2816(out)
パラメータ数の合計は17,842,176
-
MoEの中の全expert
- 2816(in) * 704(out) * 2 * 128(expert)
- 704(in) * 2816(out) * 128(expert)
パラメータ数の合計は761,266,176
-
MoEの中のアクティブになるexpert
- 2816(in) * 704(out) * 2 * 8(expert)
- 704(in) * 2816(out) * 8(expert)
パラメータ数の合計は47,579,136
-
-
30Transformersのパラメータ数
全パラメータ数は、
\begin{align} &(23,068,672 + 11,534,336 + 360,448 + 17,842,176 + 761,266,176) \times 25 \\ +& (25,952,256 + 23,068,672 + 360,448 + 17,842,176 + 761,266,176) \times 5 \\ = & 814,071,808 \times 25 + 828,489,728 \times 5\\ = & 24,494,243,840 = 24.49B \end{align}推論時にアクティブになるパラメータ数は、
\begin{align} &(23,068,672 + 11,534,336 + 360,448 + 17,842,176 + 47,579,136) \times 25 \\ +& (25,952,256 + 23,068,672 + 360,448 + 17,842,176 + 47,579,136) \times 5 \\ = & 100,384,768 \times 25 + 114,802,688 \times 5\\ = & 3,083,632,640 = 3.08B \end{align}
-
30Transformers通過後のLinearのパラメータ数
- 2816(in) * 262,144(out)
パラメータ数は$738,197,504 = 0.74B$
「前処理」のパラメータ数の計算
テキストのEmbeddingは、メイン処理の「30Transformers通過後のLinearのパラメータ」と重みを共有しているため、新たなカウントは0となります。また、動画の前処理のパラメータは、画像の前処理と共通化されています。よって、画像の前処理に絞ってカウントします。
-
1Transformerあたりのパラメータ数
-
Attention
- Q生成行列: 1152(in) * 72(out) * 16(head数)
- K生成行列: 1152(in) * 72(out) * 16(head数)
- V生成行列: 1152(in) * 72(out) * 16(head数)
パラメータ数の合計は3,981,312
-
Attentionの出口のLinear
- 1152(in) * 1152(out)
パラメータ数の合計は1,327,104
-
FFN
- 1152(in) * 4304(out) * 2
- 4304(in) * 1152(out)
パラメータの合計は14,874,624
-
-
27Transformersの全パラメータ数
$(3,981,312 + 1,327,104 + 14,874,624) \times 27 = 544,942,080 = 0.54B$。
-
27Transformers通過前のLinearのパラメータ数
- 768(in) * 1152(out)
パラメータ数は$884,736 = 0.0009B$
-
27Transformers通過後のLinearのパラメータ数
- 1152(in) * 2816(out)
パラメータ数は$3,244,032 = 0.003B$
まとめると下のようになります。
| 全ての重みパラメータの数 | アクティブのみの重みパラメータの数 | |
|---|---|---|
| 前処理 | 0.54B | 0.54B |
| メイン処理 | 25.23B | 3.82B |
| 合計 | 25.77B | 4.36B |
全ての重みパラメータの数が約26B、推論時にアクティブになる重みパラメータの数が約4Bとなり、モデル名「gemma-4-26B-A4B」と一致します。また、https://huggingface.co/google/gemma-4-26B-A4B にも下の記載があり、これは、上表の「メイン処理部」の値と一致します。
Property 26B A4B MoE
Total Parameters 25.2B
Active Parameters 3.8B
なお、サイズが小さいため計算を省略した重みパラメータがあります。
まとめ
gemma-4-26B-A4Bは、Attentionによる可変長token処理、sliding/full attentionの使い分けとKVキャッシュによる計算効率化、MoEによる疎な推論(128 expertから8個のみ活性化)、双方向Attentionを使った前処理によるマルチモーダル対応、という仕組みを組み合わせたモデルです。
パラメータ数は全体で約26B、推論時にアクティブになるのは約4Bであり、モデル名「26B-A4B」の由来と一致することを確認しました。
参考
https://huggingface.co/google/gemma-4-26B-A4B
(特に、https://huggingface.co/google/gemma-4-26B-A4B/blob/main/config.json)



