今メインで使っている 512x8 ネットワークの構造
現在のメイン会話モデルは checkpoints/dazai-friend-peers-512x8-v1/best.pt を優先して使う構成で、
実体は decoder-only Transformer です。ここでは
512x8 が何を意味するか、1 ブロックの中で何が起きているか、入出力の形がどう流れるかを、
実装とチェックポイントのメタ情報に沿って整理します。
1. まず 512x8 の意味
このリポジトリでの 512x8 は、基本的に
幅 512 の表現を、8 段の Transformer Block で処理する という意味です。
つまり 512 は各 token が内部で持つベクトルの太さ、x8 はその処理ブロックの段数です。
512 = 幅
1 token は埋め込み後に 512 次元のベクトルになります。
Attention でも FFN でも、基本の通り道はこの 512 次元です。
x8 = 深さ
同じ形の Transformer Block を 8 回 連続で通します。
深くするほど表現力は上がりますが、そのぶん計算量も増えます。
x8 は「8 heads」ではありません。
このモデルは結果として n_head=8 でもありますが、名前の主眼は
d_model=512 と n_layer=8 にあります。
2. 全体フロー
入力は文字 tokenizer で token ID 列に変換されます。そこに token embedding と position embedding を足し、 8 層の block を通し、最後に各位置ごとの次 token 候補を出します。
3. 1 ブロックの中で何が起きるか
8 層とも中身は同じです。違うのは重みだけで、処理の型は共通です。
A. Causal Self-Attention
- 入力:
[B, T, 512] qkv_projで[B, T, 1536]を作るQ / K / Vに 3 分割し、さらに8 headsに分ける- 各 head の次元は
64 = 512 / 8 - 未来 token を見ないように causal mask をかける
- 最後に head を結合して
[B, T, 512]に戻す
B. Feed Forward Network
- 入力:
[B, T, 512] - まず
512 → 2048に拡張 GELUで非線形変換- 次に
2048 → 512に圧縮 - 最後に dropout 0.1
4. 形を数で見る
| 項目 | 値 | 意味 |
|---|---|---|
vocab_size |
4265 | 文字 tokenizer の語彙数 |
context_length |
256 | 一度に見られる最大 token 数 |
d_model |
512 | 各 token の内部表現の幅 |
n_layer |
8 | Transformer Block の段数 |
n_head |
8 | Attention の分割数 |
head_dim |
64 | 各 head の次元。512 / 8 |
ffn_hidden |
2048 | FFN の中間幅。4 x d_model |
dropout |
0.1 | 学習時の過学習抑制 |
5. パラメータ数の内訳
このモデルの総パラメータ数は 27,534,848 です。 大部分は 8 個の Transformer Block に入っています。
| 部品 | 個数 | 備考 |
|---|---|---|
| Token Embedding | 2,183,680 | 4265 x 512 |
| Position Embedding | 131,072 | 256 x 512 |
| 1 block あたり | 3,152,384 | Attention + FFN + 2 つの LayerNorm |
| 8 blocks 合計 | 25,219,072 | 全体の大半を占める |
| Final LayerNorm | 1,024 | 出力直前の正規化 |
| LM Head | 追加なし | token embedding と重み共有 |
lm_head.weight = token_embedding.weight なので、
出力層のために別の巨大な語彙行列をもう 1 枚持っていません。
6. このモデルが今のメインである理由
CLI 側では会話用の既定チェックポイントとして
dazai-friend-peers-512x8* を最優先で探すようになっています。
つまり「今メインで使っているモデル」は、運用上もこの 512x8 系です。
なお dazai-friend-peers-512x8-v1 は
dazai-peers-512x8-base-mix/best.pt から resume して会話向けに微調整されていますが、
ネットワーク構造そのものは同じ 512x8 のまま です。
7. 実装上の根拠
src/original_llm/model.py: decoder-only Transformer 本体src/original_llm/config.py:ModelConfigの定義src/original_llm/cli.py: 会話用既定 checkpoint の優先順checkpoints/dazai-friend-peers-512x8-v1/best.pt: 実際のmodel_config
このページの数値は、上の実装と checkpoint metadata を読み取って整理したものです。