English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

tamu
1 / ?
kembali ke pelajaran

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

Misalkan selama satu langkah pelatihan, norm L2 global dari semua gradien dihitung menjadi `3.5`. `max_norm` ANDREA = `1.0`. Hitung (a) faktor skala yang diterapkan, (b) norm L2 global baru setelah penskalaan, & (c) apa yang terjadi jika norm yang tidak di-clip adalah `0.4` bukan `3.5`. Tunjukkan perhitungan Anda.

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.


Gradient Clipping with 3 CUDA Kernels

Mengapa Tiga Kernel, Bukan Satu?

Misalkan seseorang mengusulkan menggabungkan `k_grad_norm_partial` & `k_grad_norm_final` menjadi satu kernel yang menghitung seluruh norma global dalam satu operasi. Berikan satu alasan spesifik mengapa penggabungan ini akan gagal atau berkinerja lebih buruk pada GPU. Referensikan bagaimana blok thread GPU berbagi memori & menyinkronkan.

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

Misalkan pada langkah 50.000 pelatihan v1, satu mini-batch menghasilkan gradien dengan norma L2 global 50.0 (batch tipikal menghasilkan ~0.5). Lacak apa yang terjadi pada momen pertama AdamW `m` selama 10 langkah berikutnya jika batch selanjutnya kembali ke magnitudo gradien tipikal. Pertimbangkan bagaimana `m = beta1 * m + (1 - beta1) * g` dengan beta1=0.9 menyebarkan lonjakan tersebut.

Di Mana Lagi Clipping Diterapkan?

Selain kurikulum berbasis bandit ANDREA, sebutkan SATU skenario pelatihan LAIN di mana clipping gradien L2 global akan sama pentingnya, & berikan SATU mekanisme yang membuatnya demikian.

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.