Blok transformer adalah unit yang diulang untuk membangun model penuh, dan isinya empat komponen yang bekerja berpasangan, yaitu multi-head attention sebagai komunikasi antar posisi, jaringan umpan-maju sebagai pemrosesan per posisi, sambungan sisa sebagai jalur gradien, dan normalisasi layer sebagai pengendali skala. Topik ini memeragakan aliran data di dalam satu blok, membahas dua susunan pre-norm dan post-norm, dan menghitung parameternya. Setelah selesai, pembacaan kode model transformer apa pun cukup mengenali ulangan blok yang sama.
Aliran data di dalam satu blok#
Diagram berikut memperlihatkan dua sublayer yang berurutan, masing-masing dengan sambungan sisa dan normalisasi, sehingga dua jalur yang menyilang terlihat jelas.
Sublayer pertama mengurus komunikasi. Setiap posisi mengumpulkan informasi dari posisi lain lewat multi-head attention, dan keluarannya dicampur kembali dengan masukannya lewat sambungan sisa sebelum dinormalisasi. Sublayer kedua mengurus pemrosesan. Jaringan umpan-maju, yaitu dua layer linier dengan aktivasi di tengah, diterapkan pada setiap posisi secara terpisah dan identik, sehingga ia memperkaya representasi tanpa menambah pemahaman antar posisi. Pemisahan peran ini menjelaskan mengapa keduanya diperlukan, karena attention sendirian hanya mencampur, dan FFN sendirian tidak pernah melihat posisi lain.
Persamaan dua sublayer versi post-norm, yaitu susunan makalah aslinya, ditulis:
Sambungan sisa yang sama diperlajari pada jaringan visi dengan nama ResNet, dan alasannya identik, yaitu gradien memiliki jalur langsung yang tidak melewati layer sehingga kedalaman ekstrem tetap dapat dilatih. Perbedaan transformer adalah normalisasi layer yang menemani setiap sambungan, dan kedudukan normalisasi itulah yang menjadi keputusan desain berikutnya.
Pre-norm dan post-norm#
Dua susunan normalisasi membedakan generasi transformer. Post-norm meletakkan LayerNorm setelah penjumlahan sisa sesuai persamaan di atas, sedangkan pre-norm meletakkannya sebelum sublayer sehingga jalur sisanya bersih tanpa normalisasi:
Konsekuensi praktisnya terukur. Post-norm menghasilkan kualitas akhir yang sedikit lebih baik pada pelatihan yang ditangani hati-hati, tetapi pelatihan kedalamannya membutuhkan warmup yang disiplin, sedangkan pre-norm jauh lebih stabil sejak langkah pertama dan menjadi bawaan pada hampir semua transformer modern, termasuk keluarga model bahasa besar. Perbedaan ini kembali ke jalur gradien, karena jalur sisa yang bersih pada pre-norm membuat sinyal mundur tidak tersaring normalisasi mana pun sepanjang kedalaman.
PyTorch memuat kedua susunan pada nn.TransformerEncoderLayer lewat parameter norm_first, dan contoh berikut membangun keduanya lalu membandingkan parameternya, yang ternyata identik karena yang berpindah hanya urutan operasi.
import torch
import torch.nn as nn
d_model = 64
post = nn.TransformerEncoderLayer(d_model, nhead=4, dim_feedforward=128,
batch_first=True, norm_first=False)
pre = nn.TransformerEncoderLayer(d_model, nhead=4, dim_feedforward=128,
batch_first=True, norm_first=True)
x = torch.randn(2, 10, d_model)
with torch.no_grad():
y = pre(x)
n = sum(p.numel() for p in post.parameters())
print("parameter per blok:", n)
print("bentuk keluaran :", tuple(y.shape))parameter per blok: 33472
bentuk keluaran : (2, 10, 64)Menghitung parameter satu blok#
Empat komponen menyumbang parameter dengan rumus yang sederhana. Multi-head attention menyumbang sebagaimana dihitung pada topik Multi-head attention, FFN dengan dimensi tersembunyi menyumbang dua matriks yaitu , dan dua LayerNorm menyumbang yang nyaris tak terhitung. Totalnya mendekati per blok, dan angka ini menjadi alat cepat memperkirakan ukuran model bahasa, karena GPT-2 kecil dengan 12 blok dan menghabiskan hampir seluruh 124 juta parameternya pada blok-blok ini ditambah embedding.
Rasio pembagian FFN yang lazim adalah empat kali dimensi model, dan nilainya dipilih sebagai kompromi antara kapasitas pemrosesan per posisi dan biaya komputasi. Ketika blok diulang kali, parameternya berlipat persis karena blok-blok itu tidak berbagi bobot, Penulisan model penuh tinggal loop di atas blok yang sama, ditambah embedding dan kepala keluarannya, dan keduanya berlanjut pada modul Transfer learning dan LLM.
Ringkasan#
- Blok transformer memasangkan attention yang mengurus komunikasi antar posisi dengan FFN yang mengurus pemrosesan per posisi, dan keduanya ditemani sambungan sisa serta normalisasi layer.
- Sambungan sisa memberi jalur gradien langsung, dan pre-norm menjaga jalur itu bersih sehingga lebih stabil daripada post-norm pada kedalaman besar.
- Parameter per blok mendekati , dengan FFN berdimensi empat kali model sebagai konvensi yang dipertahankan.
- Model penuh adalah ulangan blok yang sama sebanyak kali di atas embedding dan di bawah kepala keluaran.
Referensi#
- Attention Is All You Need — arXiv — Makalah asli yang menetapkan struktur blok dan susunan post-norm.
- On Layer Normalization in the Transformer Architecture — PMLR — Makalah Xiong dkk. yang menganalisis pre-norm dan kestabilannya.
- torch.nn.TransformerEncoderLayer — PyTorch
— Dokumentasi blok encoder beserta parameter
norm_first.