Gradient norm clipping mengubah update optimizer hanya ketika norm gradient yang diukur melampaui threshold yang dipilih. Operasinya terdengar lokal, tetapi perilakunya bergantung pada pilihan implementasi yang lebih luas: gradient mana yang ikut dihitung dalam norm. Dua training loop dapat menggunakan threshold dan optimizer yang sama tetapi menghasilkan update berbeda karena keduanya melakukan clipping pada kelompok parameter berbeda atau pada titik berbeda dalam siklus update.
Hal ini membuat cakupan clipping menjadi bagian dari definisi optimisasi, bukan sekadar pengaman terhadap gradient yang sangat besar.
Global norm clipping mempertahankan arah gradient
Anggap gradient untuk parameter yang dipilih sebagai satu vektor g. Untuk threshold c, global norm clipping menerapkan scale factor seperti:
scale = min(1, c / (||g|| + epsilon))
g_clipped = scale * gKetika ||g|| sama dengan atau di bawah c, gradient tidak berubah. Ketika nilainya melampaui c, setiap komponen yang disertakan menerima faktor perkalian yang sama. Vektor hasil tetap mengarah ke arah yang sama dengan vektor asli, terlepas dari efek numerik, sementara norm-nya dikurangi hingga kira-kira sama dengan threshold.
Ini berbeda dari clipping setiap elemen gradient ke dalam interval numerik tetap. Element-wise clipping dapat mengubah arah karena komponen besar dapat dipotong sementara komponen yang lebih kecil tetap utuh. Aturan global norm sebaliknya menskalakan semua komponen yang disertakan secara bersamaan.
Perbedaan ini penting ketika konfigurasi training hanya menyatakan bahwa gradient “di-clip”. Aturan clipping juga harus menentukan norm, threshold, dan cakupan agar update yang dihasilkan dapat direproduksi.
Kumpulan parameter menentukan norm yang diukur
Misalkan model memiliki dua kelompok parameter dengan vektor gradient g_a dan g_b. Melakukan clipping keduanya bersama-sama menggunakan norm gabungan:
||g|| = sqrt(||g_a||^2 + ||g_b||^2)Jika norm gabungan tersebut melampaui threshold, kedua kelompok menerima scale factor yang sama. Norm besar pada g_a karena itu dapat mengurangi update yang diterapkan pada g_b, meskipun g_b sendiri masih berada di bawah threshold.
Melakukan clipping pada kelompok secara terpisah menghasilkan aturan berbeda:
scale_a = min(1, c_a / (||g_a|| + epsilon))
scale_b = min(1, c_b / (||g_b|| + epsilon))Kini setiap kelompok dapat diskalakan secara independen. Besaran relatif antar-kelompok dapat berubah karena satu kelompok mungkin di-clip sementara kelompok lain dibiarkan tetap.
Tidak ada satu cakupan yang selalu lebih baik. Satu global norm konsisten ketika parameter yang dipilih memang dimaksudkan membentuk satu vektor update. Norm terpisah dapat disengaja ketika kelompok parameter memiliki peran optimisasi yang berbeda. Properti implementasi yang penting adalah bahwa cakupan mengubah update, bahkan jika semua kelompok menggunakan threshold numerik yang sama.
Clipping berinteraksi dengan gradient accumulation
Gradient accumulation membangun update efektif dari beberapa backward pass sebelum optimizer menerapkan perubahan parameter. Melakukan clipping pada gradient setiap microbatch sebelum accumulation tidak setara dengan melakukan accumulation terlebih dahulu lalu clipping sekali pada gradient hasilnya.
Pertimbangkan dua gradient microbatch yang mengarah hampir berlawanan. Jika masing-masing di-clip secara independen, besarannya dapat berkurang sebelum cancellation terjadi. Jika keduanya diakumulasikan terlebih dahulu, cancellation terjadi sebelum norm diukur, dan gradient gabungan mungkin tidak memerlukan clipping sama sekali.
Pola sebaliknya juga dapat terjadi. Beberapa gradient moderat yang mengarah ke arah serupa dapat menghasilkan gradient terakumulasi yang norm-nya melewati threshold meskipun tidak ada microbatch individual yang melampauinya.
Untuk update yang didefinisikan pada accumulated batch, clipping setelah accumulation membuat threshold berlaku pada gradient yang benar-benar akan digunakan optimizer. Clipping lebih awal mendefinisikan prosedur optimisasi yang berbeda.
Mixed-precision scaling mengubah urutan operasi
Mixed-precision training dapat mengalikan loss dengan scale factor sebelum backpropagation agar nilai gradient kecil direpresentasikan dengan lebih aman pada presisi yang lebih rendah. Gradient yang tersimpan kemudian merupakan versi terskala dari gradient yang dimaksudkan untuk optimizer.
Menerapkan threshold clipping pada nilai yang masih terskala membuat threshold tersebut memiliki arti berbeda. Gradient harus di-unscale sebelum threshold yang dinyatakan dalam unit gradient biasa diterapkan.
Pada automatic mixed precision PyTorch, urutan yang didokumentasikan adalah melakukan unscale pada gradient optimizer sebelum gradient clipping, kemudian menjalankan optimizer step melalui scaler. Urutan ini juga penting ketika menggunakan accumulation: unscaling dilakukan setelah gradient untuk update efektif selesai diakumulasikan.
Prinsip yang lebih luas tidak bergantung pada framework tertentu. Transformasi apa pun yang mengubah besar gradient sebelum clipping akan mengubah nilai yang dibandingkan dengan threshold. Aturan clipping sebaiknya beroperasi pada skala tempat threshold-nya didefinisikan.
Threshold tidak memperbaiki gradient non-finite
Norm clipping sering ditempatkan dekat pemeriksaan instabilitas numerik, tetapi finite clipping dan deteksi non-finite menyelesaikan masalah yang berbeda. Jika gradient sudah mengandung NaN atau nilai infinite, menskalakannya ulang tidak menghasilkan update finite yang bermakna.
Kode training harus menentukan secara eksplisit cara menangani gradient non-finite. Mixed-precision scaler dapat melewati optimizer step setelah mendeteksi nilai non-finite. Training loop lain dapat memunculkan error, mencatat diagnostik, atau menolak batch sesuai kebijakannya.
Memperlakukan clipping sebagai pengganti deteksi non-finite dapat mengaburkan batas antara gradient yang besar tetapi finite dan state numerik yang tidak valid. Kedua kasus tersebut membutuhkan observability terpisah karena penyebab dan responsnya berbeda.
Norm sebelum clipping berguna sebagai data diagnostik
Fungsi clipping sering menghitung norm sebelum menerapkan rescaling. Mencatat nilai tersebut menunjukkan seberapa sering threshold aktif dan seberapa jauh update mentah melampauinya.
Norm setelah clipping membawa lebih sedikit informasi. Setelah clipping aktif, banyak gradient mentah yang berbeda dapat berakhir pada norm sekitar threshold yang sama. Norm mentah 1.1c dan norm mentah 100c dapat sama-sama terlihat sekitar c setelah clipping, meskipun keduanya menggambarkan perilaku training yang sangat berbeda.
Monitoring yang berguna karena itu dapat memisahkan norm mentah, scale factor yang diterapkan, dan apakah update dilewati akibat kondisi non-finite. Sinyal tersebut menggambarkan intervensi, bukan sekadar mengonfirmasi bahwa sebuah threshold telah dikonfigurasi.
Clipping mengubah besaran, bukan sumber instabilitas
Threshold norm membatasi besar vektor gradient yang dipilih pada titik tempat clipping diterapkan. Threshold tidak mengidentifikasi operasi yang menghasilkan gradient besar dan tidak membuat objective yang tidak stabil menjadi well-conditioned.
Clipping berulang dapat menjadi bagian yang disengaja dari sebuah training recipe. Kondisi itu juga dapat menunjukkan bahwa distribusi update tanpa clipping berbeda secara substansial dari asumsi konfigurasi optimizer lainnya. Perbedaannya tidak dapat ditentukan hanya dari threshold.
Agar training dapat direproduksi, gradient norm clipping membutuhkan ketelitian yang sama seperti semantik optimizer lain: jenis norm, threshold, cakupan parameter, batas accumulation, urutan mixed-precision, dan kebijakan non-finite. Setelah pilihan tersebut eksplisit, threshold clipping menjadi transformasi update yang terdefinisi, bukan safety switch yang ambigu.