学習する重みをすべてランダムな初期値で用意する工程。matrix の中身 random.gauss(0, 0.08) が、平均0・小さな分散の正規分布。
会計で言えば、実績のない期初の見積り・予算前提。最初は根拠が薄いまま、ゼロ近傍で少しずつ違う値を置く。全部同じ値にしないのは、後で実績との差で各々を別々に直せるようにするため(対称性の破れ)。
wte は文字の埋め込み、wpe は位置の埋め込み、lm_head は最後に次の文字を当てる層、attn_* はアテンション、mlp_* は中間処理。平らに並べると合計 4192 個。
この段が、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 (本体は原文ベース、抜粋・コメントは日本語に補足)
触って動かせるデモ+簿記アナロジー+該当コード付き。