STEP 4 / 6

パラメータ初期化

期初の見積り・予算前提(最初は根拠の薄い当て推量)

学習する重みをすべてランダムな初期値で用意する工程。matrix の中身 random.gauss(0, 0.08) が、平均0・小さな分散の正規分布。

会計で言えば、実績のない期初の見積り・予算前提。最初は根拠が薄いまま、ゼロ近傍で少しずつ違う値を置く。全部同じ値にしないのは、後で実績との差で各々を別々に直せるようにするため(対称性の破れ)。

wte は文字の埋め込み、wpe は位置の埋め込み、lm_head は最後に次の文字を当てる層、attn_* はアテンション、mlp_* は中間処理。平らに並べると合計 4192 個。

実際のコード(microgpt.py L74-90)

この段が、Karpathy のオリジナル200行のどこに当たるか。

n_layer, n_embd, block_size, n_head = 1, 16, 16, 4
head_dim = n_embd // n_head
matrix = lambda nout, nin, std=0.08: [[Value(random.gauss(0, std))
            for _ in range(nin)] for _ in range(nout)]
state_dict = {'wte': matrix(vocab_size, n_embd),
              'wpe': matrix(block_size, n_embd),
              'lm_head': matrix(vocab_size, n_embd)}
for i in range(n_layer):
    state_dict[f'layer{i}.attn_wq'] = matrix(n_embd, n_embd)
    state_dict[f'layer{i}.attn_wk'] = matrix(n_embd, n_embd)
    state_dict[f'layer{i}.attn_wv'] = matrix(n_embd, n_embd)
    state_dict[f'layer{i}.attn_wo'] = matrix(n_embd, n_embd)
    state_dict[f'layer{i}.mlp_fc1'] = matrix(4 * n_embd, n_embd)
    state_dict[f'layer{i}.mlp_fc2'] = matrix(n_embd, 4 * n_embd)
params = [p for mat in state_dict.values() for row in mat for p in row]
print(f"num params: {len(params)}")   # → 4192

出典: karpathy / microgpt.py (本体は原文ベース、抜粋・コメントは日本語に補足)

この段の用語を1つずつ理解する

触って動かせるデモ+簿記アナロジー+該当コード付き。