Dari Mana Lonjakan Gradien Berasal
Mini-Batch yang Tenang & yang Mengejutkan
Sebagian besar mini-batch menghasilkan gradien dengan magnitudo yang wajar. Kerugian cross-entropy untuk model yang sudah secara kasar cocok dengan data tetap dalam rentang sempit; backprop membawa sinyal tersebut kembali sebagai gradien dengan ukuran serupa.
Beberapa mini-batch tidak. Tiga sumber lonjakan gradien:
1. Contoh outlier. Satu urutan dengan kombinasi token yang sangat langka menghasilkan loss jauh dari rata-rata & gradien jauh dari rata-rata.
2. Kasus tepi numerik. Penyebut softmax mendekati nol, layernorm yang menghasilkan NaN, overflow FP16. Masing-masing dapat menghasilkan gradien yang magnitudes lebih besar daripada biasanya.
3. Perubahan distribusi. Beralih sumber data selama satu sesi pelatihan mengejutkan model dengan distribusi baru. Bandit ANDREA mengacak ulang bobot sumber setiap 7 hingga 42 langkah. Setiap pergantian adalah perubahan distribusi kecil.
ANDREA-120M v1: Kaskade Spike
v1 tidak memiliki clipping gradien. Transisi sumber setiap 7 hingga 42 langkah dari bandit memberi model ledakan singkat repo-docs (berstruktur daftar), kemudian gutenberg (prosa panjang), kemudian hermes3-general (T&A). Setiap transisi menghasilkan spike gradien: setiap spike mendorong bobot ke atraktor degeneratif pada skala 120M.
Fakta empiris kunci. ANDREA-12M bertahan dari bandit yang sama tanpa clipping. Matriks bobot yang lebih kecil tetap tangguh terhadap guncangan gradien; satu batch buruk tidak dapat mendorong 12M parameter ke dalam atraktor yang lari tak terkendali seperti halnya pada 120M. Clipping lebih penting saat model diskalakan.
Global L2 Norm Clipping
Dua Pilihan: Per-Tensor atau Global
Dua cara untuk membatasi magnitudo gradien:
Per-tensor clipping. Clip setiap tensor gradien secara independen. Gradien embedding di-clip ke normanya sendiri; gradien attention di-clip ke normanya sendiri. Sederhana, tapi mendistorsi skala relatif: lonjakan kecil di satu tensor (kini gradien nol) dipasangkan dengan gradien besar di tensor lain (tidak tersentuh).
Global L2 norm clipping. Perlakukan semua gradien sebagai satu vektor besar. Hitung total norm L2 di seluruh parameter. Jika norm melebihi max_norm, skala setiap gradien dengan faktor yang sama. Mempertahankan magnitudo relatif antar tensor.
ANDREA menggunakan global. Pascanu et al. (2013) menunjukkan secara empiris bahwa global clipping lebih unggul daripada per-tensor untuk pelatihan transformer.
Matematika
Hitung norma L2 global:
norm = sqrt(sum over all params of g_i^2)
Jika norm <= max_norm, gradien dilewatkan tanpa perubahan. Jika norm > max_norm, skala setiap gradien dengan max_norm / norm:
g_i_clipped = g_i * (max_norm / norm)
Setelah penskalaan, norm baru sama persis dengan max_norm. ANDREA menggunakan max_norm = 1.0.
Menghitung Faktor Skala
Mengapa Komputasi Norma Gradien Membutuhkan Tiga Kernel
Algoritma Naif Tidak Dapat Berjalan di GPU
Pseudocode untuk komputasi norma L2 global:
total = 0
untuk setiap parameter p:
untuk setiap elemen g dalam p.grad:
total += g * g
norm = sqrt(total)
Pada GPU, loop naif ini gagal karena dua alasan:
1. Akumulasi berurutan. Sebuah akumulator total tunggal memaksa setiap thread untuk menunggu thread lainnya, mengalahkan paralelisme GPU.
2. Tensor heterogen. ANDREA-120M memiliki tensor dengan bentuk yang sangat berbeda: embedding (8449 x 768), attention QKV (768 x 768), layernorm (768). Satu kernel tidak dapat mengiterasi semua bentuk secara efisien.
Pipeline Tiga Kernel ANDREA
Pecah pekerjaan menjadi tiga CUDA kernel di microgpt_cuda.cu:
Kernel 1: k_grad_norm_partial. Untuk setiap tensor parameter, hitung jumlah kuadrat parsial. Setiap blok thread mereduksi potongan tensor; hasil ditulis ke buffer kecil sementara. Paralelisme: satu blok per potongan, ratusan blok di seluruh tensor.
Kernel 2: k_grad_norm_final. Kurangi buffer sementara menjadi satu skalar. Ambil akar kuadratnya. Satu kernel kecil, berjalan dalam mikrodetik.
Kernel 3: k_grad_scale. Jika norm > max_norm, hitung scale = max_norm / norm & kalikan setiap elemen gradien dengan scale. Satu putaran atas setiap tensor gradien, paralel sepenuhnya.
Urutan Penting: Pre-Adam
Pipeline pemotongan ini berjalan SEBELUM pembaruan AdamW pada m, v, atau parameter apa pun. Mengapa?
Gradien yang dipotong memasuki rata-rata bergerak eksponensial AdamW. Jika lonjakan diizinkan mengalir ke m & v, itu akan merusak rata-rata berjalan tersebut & memperlambat pemulihan selama banyak langkah setelah lonjakan. Pemotongan sebelum Adam menjaga efek lonjakan terbatas pada satu langkah buruk tersebut.
Mengapa Tiga Kernel, Bukan Satu?
Bagaimana No-Clipping Membunuh v1
Transisi Sumber Bandit Setiap 7 hingga 42 Langkah
Bandit ANDREA beroperasi dalam fase-fase. Setiap fase berlangsung 7, 14, 21, 28, atau 42 langkah (dipilih secara acak). Pada setiap batas fase, bobot sumber bergeser: mungkin repo-docs melonjak dari 0.1 ke 0.6, gutenberg turun dari 0.4 ke 0.1, hermes3-general naik dari 0.5 ke 0.7.
Setiap transisi adalah guncangan distribusi bagi model. Loss melonjak sebentar. Gradien melonjak bersamanya: model yang sedang meminimalkan loss terhadap prosa berlatih gutenberg kini melihat struktur daftar berlatih repo-docs, & gradien membawa sinyal korektif yang bisa 10x atau 100x magnitudo tipikal.
Mode Kegagalan v1
Tanpa clipping, lonjakan gradien 10-100x tersebut mengalir ke rata-rata m & v AdamW. Penyamaan AdamW berarti efek lonjakan bertahan selama banyak langkah setelah batch buruk yang sebenarnya. Dikombinasikan dengan tidak adanya weight decay (vanilla Adam di v1), pembaruan bobot yang didorong lonjakan bertambah selama fase-fase hingga bobot melayang ke atraktor degeneratif: logit satu token mendominasi softmax, output yang disampling adalah token itu, konteks pelatihan berisi token itu, gradien memperkuat token itu. Penguncian pengulangan.
Stabilitas v2
v2 menambahkan clipping dengan max_norm = 1.0, bersama dengan AdamW & pemanasan LR. Efek lonjakan pada m & v dibatasi; bobot tidak bisa melayang lebih cepat dari lr max_norm = 0.0003 1.0 = 0.0003 per parameter per langkah pada puncak. Transisi fase masih menghasilkan lonjakan, tapi lonjakan tersebut dibatasi sebelum mencapai optimizer.
Hasil: v2 (setelah filter data v2.5 & polesan v3) mencapai ingatan faktual, koherensi multi-paragraf, & nilai eksternal 9.5/10 pada sampel biologi & pemrosesan sinyal.
Kopling Kapasitas-Kerapuhan
Bandit yang sama. Data yang sama. Hyperparameter yang sama kecuali clipping. Mengapa 12M bertahan tanpa clipping sementara 120M runtuh?
Dua faktor kumulatif:
1. Matriks bobot yang lebih besar menyimpan lebih banyak atraktor. Proyeksi perhatian 768x768 memiliki 590K parameter; bahkan pergeseran per-parameter yang kecil menghasilkan perubahan bermakna dalam perilaku perhatian. Proyeksi perhatian 384x384 memiliki 147K parameter & tetap berada di subruang yang lebih terbatas.
2. Lebih banyak lapisan berarti lebih banyak interaksi multiplikatif. v3 memiliki 12 lapisan transformer (vs 6 untuk 12M). Lonjakan merambat melalui 12 lapisan nonlinieritas kumulatif; setiap lapisan dapat memperkuat pergeseran lapisan sebelumnya.
Kerapuhan bertambah dengan kapasitas. Clipping menjadi wajib di atas ambang batas skala tertentu; ANDREA menempatkan ambang batas itu di suatu tempat antara 12M & 120M parameter.
Mendiagnosis Kaskade v1
Di Mana Lagi Clipping Diterapkan?
Aktivitas Terkait
Tiga saudara terkait dengan clipping:
- Activity 10: AdamW. Clipping melindungi m & v milik AdamW dari kontaminasi lonjakan. Tanpa clipping, satu batch buruk merusak status optimizer selama 50+ langkah.
- Activity 11: LR warmup. Warmup meredam lr; clipping meredam g. Bersama-sama: pada langkah 1, pembaruan parameter terburuk adalah lr_after_warmup max_norm = 1.5e-7 1.0 = 1.5e-7, vs 0.0003 * 50 = 0.015 tanpa salah satu pengaman. Pengurangan 100.000x pada besar pembaruan awal terburuk.
- Aktivitas 14: Multi-armed bandits. Panjang fase bandit (7 hingga 42 langkah) dibuat pendek secara khusus untuk mencegah satu sumber mendominasi; clipping adalah yang membuat transisi sering tersebut aman.
Clipping adalah kemenangan stabilitas termurah dalam pelatihan transformer: 3 kernel CUDA kecil, mikrodetes per langkah, dampak penentu apakah model 120M+ konvergen atau runtuh.