Lensa ML

Vanishing dan Exploding Gradient

Langkah 1 dari 6: Gradient Flow

Forward pass dan backward pass di network sungguhan

Hidden layers3
inputh1h2h3output
avg |∂L/∂a|1e-4in9e-4h10.006h20.063h31.000out
Klik neuron untuk melihat hitungan forward dan backward-nya

Arsitektur

2–3–3–3–1

Rata-rata Grad Input

1.1e-4

Aktivasi Output

0.413

Dengan 3 hidden layer, besar gradient melemah ke arah input. Setiap sigmoid mengecilkannya 4 kali lipat atau lebih (σ' ≤ 0.25).

Geser slider hidden layer dari 1 ke 5, ganti bentuk, lalu ketuk node untuk melihat hitungannya. Dalam bentuk matriks, gradient yang sampai ke layer 1 adalah gradient output dikalikan satu Jacobian per layer, dan setiap Jacobian menggabungkan weight layer itu dengan turunan aktivasinya. Besar hasil kali ini kira-kira sama dengan hasil kali besar tiap Jacobian. Sepp Hochreiter menganalisis efek ini dalam tesis diplomanya pada 1991, dan Bengio, Simard, serta Frasconi (1994) menunjukkan bahwa efek ini membuat long-range dependency sulit dipelajari recurrent network dengan gradient descent.

Langkah 2 dari 6: Exploding Gradient

Network linear tempat gradient meledak saat mengalir ke belakang

Hidden layers3
Skala weight1.5
inputh1h2h3output
avg |∂L/∂a|0.3in0.4h10.4h20.5h31.0out
Klik neuron untuk melihat hitungan forward dan backward-nya

Arsitektur

2–3–3–3–1

Rata-rata Grad Input

0.35

Status

Ringan

Dengan skala weight 1.5× dan 3 hidden layer, gradient masih terkendali. Naikkan salah satunya dan gradient akan meledak.

Geser skala weight dari 0,5 ke 3 dan tambahkan hidden layer. Network ini tidak punya activation function, jadi Jacobian tiap layer hanyalah matriks weight-nya. Kalau satu layer biasanya mengalikan gradient sekitar 2, maka 6 layer mengalikannya 2⁶ = 64, dan 20 layer sekitar sejuta. Recurrent network sangat rentan karena matriks weight yang sama dipakai di setiap time step, sehingga urutan 100 token memangkatkannya 100 kali. Ketika singular value terbesarnya melebihi 1, gradient bisa meledak.

Langkah 3 dari 6: Sigmoid vs ReLU

Kenapa pilihan aktivasi menentukan nasib gradient

Input x0
Layers5
-4-2240.251.0
σ'(x), maks 0.25ReLU'(x), 0 atau 1
Gradient setelah 5 layer: (turunan)^5σ0.0010ReLU0.0

σ'(x)

0.250

ReLU'(x)

0

σ setelah 5L

0.0010

ReLU setelah 5L

0.0

Pada x=0, turunan sigmoid paling besar (0,25) dan ReLU tepat di titik patahnya. Bahkan di puncaknya, sigmoid mengecilkan gradient 4× per layer.

Geser input x dan slider layer dari 1 ke 10, lalu perhatikan dua kartu "setelah". Kartu-kartu itu mengalikan turunan yang sama sekali per layer, dan ini kasus terbaik untuk sigmoid. Meski begitu, 10 layer di titik puncak menyisakan 0,25¹⁰, sekitar sepersejuta gradient. Turunan ReLU tepat 1 atau 0, jadi rangkaian unit aktif meneruskan gradient tanpa perubahan. Leaky ReLU, ELU, dan GELU mempertahankan kemiringan kecil yang bukan nol untuk input negatif, sehingga unit yang bergeser ke negatif masih bisa pulih.

Langkah 4 dari 6: Dampak pada Training

Cara masalah gradient menghentikan training sungguhan

Kedalaman5
Learning rate1
0.50epoch (gradient descent sungguhan, network sigmoid 2–3–3–3–1, 4 sampel training)2L5LLoss macet: layer awal hampir tidak diperbaruiavg |Δw|5e-5h10.0003h20.0030h30.0701out

Loss Akhir (5L)

0.1327

Loss Akhir (2L)

0.0239

L1 avg |Δw|

5.2e-5

Dengan 5 layer sigmoid, loss macet di 0.133, sedangkan network 2 layer mencapai 0.024. Update hidden layer pertama hanya 5.2e-5, praktis beku. Vanishing gradient telah menghentikan training.

Geser kedalaman dari 2 ke 8 dan learning rate dari 0,1 ke 3, lalu bandingkan dua kartu loss akhir. Ada 4 target, yaitu 0,9, 0,1, 0,8, dan 0,2, jadi network yang mengeluarkan 0,5 untuk semua contoh sudah mendapat skor sekitar 0,125. Network sigmoid yang dalam di sini berhenti di dekat nilai itu, artinya mereka hampir tidak belajar apa-apa. Learning rate 3 menyelamatkan network 4 layer, tetapi learning rate yang lebih tinggi menskalakan update semua layer dengan faktor yang sama. Cara ini tidak bisa menutup selisih ratusan kali antara layer pertama dan terakhir.

Langkah 5 dari 6: Skip Connection

Cara jalur pintas identitas menyelamatkan aliran gradient

Hidden layers: 5(2–3–3–3–3–3–1)
inputh1h2h3h4h5output
avg |grad|tanpa skipskip4e-60.01in5e-50.08h14e-40.01h20.000.08h30.030.03h40.090.08h51.01.0out
Klik neuron untuk melihat hitungan forward dan backward-nya

Grad Input (tanpa skip)

3.9e-6

Grad Input (skip)

0.0121

Peningkatan

3e+3×

Tanpa skip connection, gradient harus melewati setiap sigmoid (σ' ≤ 0.25). Setelah 5 layer, gradient input bernilai 3.9e-6. Aktifkan "Skip Connections" untuk melihat cara residual block menyelamatkan aliran gradient.

Aktifkan atau matikan Skip Connections, lalu bandingkan gradient input dengan dan tanpa skip connection. Residual block menghitung y = x + F(x), jadi Jacobian-nya I + ∂F/∂x. Suku identitas meneruskan gradient tanpa perubahan walaupun ∂F/∂x sangat kecil. He dkk. (2015) memakai desain ini untuk melatih ResNet 152 layer, jauh lebih dalam daripada convolutional network sebelumnya. Setiap layer transformer memakai pola yang sama di sekitar sublayer attention dan feed-forward-nya. Cell state LSTM bekerja dengan cara yang sama sepanjang waktu: nilainya diperbarui dengan penjumlahan, bukan perkalian berulang.

Langkah 6 dari 6: Gradient Clipping

Jaring pengaman untuk exploding gradient

Max norm: 5.0
Sebelum3.2-7.15.5-2.88.3-6.0Sesudah1.1-2.51.9-1.02.9-2.1

‖g‖ Asli

14.27

Threshold

5.0

‖g‖ setelah clipping

5.00

Norm gradient 14.3 melebihi threshold 5.0. Semua komponen dikalikan 0.350 untuk menurunkan norm-nya, sehingga arahnya tetap sama tetapi besarnya dibatasi.

Geser slider max norm dari 0,5 ke 10 dan bandingkan batang sebelum dan sesudah. Vector gradient di sini punya norm √(3.2² + 7.1² + 5.5² + 2.8² + 8.3² + 6.0²) ≈ 14.3, jadi threshold 5 mengalikan setiap komponen sekitar 0,35. Itu clipping by norm, dari Pascanu dkk. (2012). Clipping by value membatasi tiap komponen secara terpisah, yang bisa mengubah arah gradient. Training large language model umumnya melakukan clipping pada global norm seluruh parameter di 1,0.

Apa itu vanishing gradient dan exploding gradient?

Vanishing gradient dan exploding gradient adalah dua kegagalan saat melatih deep network: gradient menyusut menuju nol atau membesar tanpa batas ketika backpropagation membawanya dari output kembali ke input. Pada vanishing gradient, layer awal nyaris tidak berubah dan network belajar lambat atau tidak belajar sama sekali. Pada exploding gradient, update menjadi sangat besar, loss melompat-lompat, dan weight bisa overflow menjadi NaN.

Kedua masalah ini punya penyebab yang sama: gradient di layer awal adalah hasil kali banyak faktor per layer, dan hasil kali panjang dari angka di bawah 1 akan menyusut, sedangkan yang di atas 1 akan membesar. Selama bertahun-tahun, keduanya menghambat feed-forward network yang dalam dan recurrent network. Solusi modernnya adalah aktivasi keluarga ReLU, inisialisasi weight yang hati-hati, normalization layer, residual connection, sel RNN ber-gate seperti LSTM, dan gradient clipping.

Ide utama

  • Gradient di layer awal adalah hasil kali satu faktor untuk tiap layer sesudahnya.
  • Faktor yang terus di bawah 1 membuat gradient lenyap, sedangkan faktor di atas 1 membuatnya meledak.
  • Vanishing gradient membuat layer awal nyaris tidak terlatih, sementara layer akhir terus belajar.
  • Exploding gradient menyebabkan loss tidak menentu, update yang sangat besar, dan nilai NaN.
  • Residual connection menambahkan jalur identitas yang membawa gradient melewati setiap blok.
  • Gradient clipping menskalakan ulang gradient yang terlalu besar sambil mempertahankan arahnya.

Ulasan singkat tentang topik ini

Pertanyaan umum

Bagaimana cara tahu network mengalami vanishing atau exploding gradient?

Catat norm gradient tiap layer selama training. Vanishing gradient terlihat dari norm di layer awal yang jauh lebih kecil, beberapa orde besaran, dibanding layer akhir, disertai loss yang cepat mendatar. Exploding gradient terlihat dari lonjakan mendadak pada loss atau norm gradient, atau dari nilai NaN.

Apakah vanishing gradient masih terjadi di network modern?

Jauh lebih jarang. Aktivasi keluarga ReLU, inisialisasi He atau Xavier, normalization layer, dan residual connection bersama-sama menjaga gradient tetap dalam rentang yang bisa dipakai, bahkan di network dengan ratusan layer. Recurrent network biasa pada urutan panjang tetap rentan, dan itu salah satu alasan transformer menggantikannya.

Kenapa RNN lebih parah daripada feed-forward network?

Backpropagation through time mengalikan dengan matriks weight recurrent yang sama sekali per time step. Selama 100 step, matriks yang singular value terbesarnya sedikit di bawah 1 menyusutkan gradient menuju nol, dan yang sedikit di atas 1 bisa membuatnya meledak. LSTM dan GRU menambahkan jalur aditif ber-gate untuk menghindari hal ini.

Nilai berapa yang sebaiknya dipakai untuk gradient clipping?

Max norm 1,0 adalah default yang umum untuk transformer dan RNN. Nilai yang baik berada sedikit di atas norm gradient pada training normal, sehingga clipping hanya aktif untuk outlier. Mencatat norm gradient selama beberapa ratus step akan menunjukkan posisinya.

Penjelasan terkait

Referensi

  1. Bengio, Simard & Frasconi (1994), "Learning long-term dependencies with gradient descent is difficult", IEEE Transactions on Neural Networks
  2. Glorot & Bengio (2010), "Understanding the difficulty of training deep feedforward neural networks", AISTATS
  3. Pascanu, Mikolov & Bengio (2012), "On the difficulty of training Recurrent Neural Networks"
  4. He et al. (2015), "Deep Residual Learning for Image Recognition"
  5. Zhang et al., "Dive into Deep Learning", section 5.4: Numerical Stability and Initialization

Terakhir diperbarui