Блоки повторяются, веса не разделяются автоматически
Стек применяет Ldecoder blocks последовательно. Hidden shape[n,d] сохраняется, а представления меняются. «Одинаковый тип блока» не означает shared weights между слоями. После стека выполняется final LayerNorm перед выходным head.
В нашей конфигурации E[V,d], независимый head U[d,V] и bias[V], finalLN содержит2dпараметров. Каждый ReLU-block:4d²attention,4d для двухLN,4d²+3dFFN. Итого:
Для SwiGLU-block получается10d²+4d, потому что FFN безbias содержит6d². ПриV256,d4,L1 значения2468и2488 соответственно. Heads меняют разбиение проекций, но при фиксированномdне увеличивают число элементов четырёх dense matrices.
Эксперимент. Измените depth1→2→3, d4→8 и heads. Сверьте формулу с actual count массивов. Параметры позиции не добавляются для sinusoidal/RoPE; изменение vocabulary после BPE меняет E и head.
Граница. Эта программа реализует настоящий decoder forward, но не pretraining. Нет dropout, encoder/cross-attention, KV-cache и оптимизированного GPU выполнения. Число параметров — не расход всей памяти: snapshots, activations и n²attention matrices хранятся отдельно ради обучения механизму.