Lensa ML

Cara Kerja Kalkulus Matriks

Langkah 1 dari 6: Turunan Parsial

Tahan satu variabel, turunkan yang lain

x1.50
y1.00
xy∂f/∂x∂f/∂y(1.5, 1.0)
∂f/∂x = 2x
3.00
∂f/∂y = 2y
2.00
f = x² + y²
3.25

Permukaan lebih curam ke arah x (∂f/∂x = 3.0) daripada ke arah y (∂f/∂y = 2.0). Bergerak sepanjang x mengubah f lebih cepat.

Gerakkan slider x dan y, lalu bandingkan kedua kartu turunan parsial. Bersama-sama, keduanya mendefinisikan aproksimasi linear terbaik dari f di dekat titik itu: f(x + Δx, y + Δy) ≈ f(x, y) + (∂f/∂x)Δx + (∂f/∂y)Δy. Kalkulus matriks menuliskannya sebagai f(x + Δx) ≈ f(x) + J·Δx, dengan J berupa baris 1×2 berisi turunan parsial. Untuk fungsi skalar, Jacobian adalah satu baris, dan gradient adalah baris itu yang ditulis sebagai kolom.

Langkah 2 dari 6: Vector Gradient

Gabungkan turunan parsial menjadi vector yang menunjuk ke arah menanjak

x2.00
y1.00
∇f
∇f_x = 2x
4.00
∇f_y = 2y
2.00
Besar |∇f|
4.47

Gradient-nya besar (|∇f| = 4.5), jadi permukaan di sini curam. Panah ∇f = [4.0, 2.0] menunjuk lurus menjauhi pusat.

Geser titiknya dan baca ∇f. Dalam notasi vector, mangkuk ini adalah f(x) = xᵀx, dan gradient-nya 2x, itulah sebabnya panah selalu dua kali vector posisi. Dua identitas mencakup sebagian besar penurunan rumus di ML: gradient aᵀx adalah a, dan gradient xᵀAx adalah (A + Aᵀ)x, atau 2Ax jika A simetris. Menyamakan gradient dari least-squares loss |Xw − y|² dengan nol lewat aturan ini menghasilkan persamaan normal XᵀXw = Xᵀy.

Langkah 3 dari 6: Gradient Menunjuk ke Arah Menanjak

Gradient selalu menunjuk ke arah kenaikan paling curam

x1.50
y-1.00
Arah
-34°
Besar
3.61
f(x,y)
3.25

Semua panah menunjuk menjauhi pusat, menanjak di paraboloid. Membalik tanda gradient menghasilkan arah turun paling curam, yaitu langkah yang diambil gradient descent.

Gerakkan slider x dan y untuk menempatkan panah terang, lalu bandingkan dengan grid. Seluruh medan ini sendiri adalah fungsi bernilai vector, yang memetakan tiap titik (x, y) ke vector (2x, 2y). Jacobian-nya adalah Hessian dari f, yaitu matriks turunan parsial kedua. Di sini nilainya 2I. Kelengkungannya sama di semua arah, jadi panah bertambah panjang dengan laju yang sama ke arah mana pun kamu bergerak.

Langkah 4 dari 6: Fungsi dengan Output Vector

Memetakan grid lewat transformasi linear

a1.00
b0.30
c-0.20
d1.00
J = [1.0, 0.3; -0.2, 1.0]
det(J)
1.06
Skala luas
1.06×
Orientasi
Tetap

det(J) = 1.06 > 1: pemetaan memperbesar luas. Setiap persegi satuan menjadi 1,06× lebih besar.

Atur keempat elemen a, b, c, d dan lihat grid 5×5 berubah bentuk. Pemetaan ini mengirim (x, y) ke (ax + by, cx + dy). Jacobian-nya adalah matriks [[a, b], [c, d]] itu sendiri. Nilainya tidak bergantung pada titik, jadi garis grid tetap lurus dan berjarak sama. Layer neural network y = Wx punya Jacobian W. Pemetaan non-linear, seperti aktivasi per elemen, punya Jacobian yang berubah dari titik ke titik. Untuk ReLU atau tanh, Jacobian-nya diagonal karena tiap output hanya bergantung pada satu input.

Langkah 5 dari 6: Matriks Jacobian

Cara sepetak kecil ruang diregangkan dan diputar

a1.30
b0.40
c-0.30
d1.10
inputoutput
det(J)
1.55
Rasio luas
1.55
Luas input
1
Luas output
1.55

Persegi satuan (luas = 1) dipetakan ke jajar genjang dengan luas |det(J)| = 1.55. Untuk pemetaan linear, faktor skala ini sama di semua titik.

Ubah keempat elemen dan bandingkan kartu luas input dan output. Untuk pemetaan non-linear, aturan yang sama berlaku secara lokal: petak kecil di sekitar suatu titik luasnya dikali |det J| di titik itu. Inilah rumus perubahan variabel di balik normalizing flow, dengan densitas sampel hasil transformasi sebesar p(x) / |det J|. Arsitektur flow seperti RealNVP merancang layer dengan Jacobian segitiga sehingga det J merupakan hasil kali elemen diagonal dan murah dihitung.

Langkah 6 dari 6: Jacobian dalam Backprop

Gradient mengalir mundur melewati rantai Jacobian

w₁ (weight layer 1)0.80
w₂ (weight layer 2)1.20
Sinyal majuGradient mundur×w₁×w₂1.000.800.96xw₁·xw₂·w₁·x×J₂=w₂×J₁=w₁0.961.201.00J_total = w₁ × w₂ = 0.96
w₁
0.80
w₂
1.20
J total (w₁×w₂)
0.96
Gradient
0.96

|w₁ × w₂| = 0.96 mendekati 1, jadi gradient lewat dengan ukuran kira-kira sama, tidak menghilang dan tidak meledak.

Atur w₁ dan w₂ dan perhatikan batang sinyal maju dan gradient mundur. Di sini tiap layer berupa skalar, jadi tiap Jacobian berukuran 1×1 dan rantainya berupa perkalian biasa. Di network sungguhan, Jacobian totalnya adalah J₃·J₂·J₁, satu matriks per layer. Backpropagation tidak pernah membentuknya. Ia mulai dari gradient loss, sebuah vector baris, lalu mengalikannya dengan satu Jacobian setiap kali dari kanan. Vector-Jacobian product ini biayanya kira-kira sama dengan forward pass.

Apa itu kalkulus matriks?

Kalkulus matriks adalah notasi dan aturan untuk menurunkan fungsi yang input atau output-nya berupa vector atau matriks. Fungsi skalar dari sebuah vector punya gradient. Fungsi bernilai vector punya Jacobian, yaitu matriks berisi turunan parsial setiap output terhadap setiap input. Aturan-aturan ini membuat turunan tersebut bisa ditulis dalam beberapa simbol, tanpa menuliskan turunan parsialnya satu per satu.

Deep learning ditulis dalam vector dan matriks, begitu juga turunannya. Layer y = Wx + b punya Jacobian terhadap x dan gradient terhadap W, dan backpropagation mengalikan Jacobian ini layer demi layer. Kalkulus matriks juga muncul di least squares, likelihood Gaussian, rumus perubahan variabel untuk normalizing flow, dan optimizer orde dua.

Ide utama

  • Jacobian dari f: ℝⁿ → ℝᵐ adalah matriks m×n berisi turunan parsial.
  • Untuk fungsi skalar, Jacobian berupa satu baris, yaitu transpos dari gradient.
  • Pemetaan linear x ↦ Ax punya Jacobian A di semua titik.
  • |det J| adalah faktor lokal yang dipakai suatu pemetaan untuk mengalikan luas atau volume.
  • Chain rule untuk fungsi vector mengalikan Jacobian: J_{f∘g} = J_f · J_g.
  • Backpropagation menghitung vector-Jacobian product, bukan matriks Jacobian penuh.

Pertanyaan umum

Apa itu numerator layout dan denominator layout?

Keduanya konvensi untuk menyusun turunan parsial yang sama. Numerator layout membuat ∂y/∂x menjadi matriks m×n dengan satu baris per output; denominator layout memakai transposnya. Buku teks dan paper mencampur keduanya, jadi banyak error tanda atau transpos yang tampak sebenarnya hanya ketidakcocokan layout. Cara tercepat mengujinya adalah memeriksa apakah bentuk matriksnya cocok.

Apa gradient loss terhadap matriks weight?

Untuk layer y = Wx dengan upstream gradient g = ∂L/∂y, gradient-nya adalah ∂L/∂W = g·xᵀ, sebuah outer product yang bentuknya sama dengan W. Pada satu batch, outer product ini dijumlahkan, itulah sebabnya gradient weight dihitung sebagai satu perkalian matriks antara upstream gradient dan input layer.

Apa hubungan Hessian dan Jacobian?

Hessian dari fungsi skalar adalah Jacobian dari gradient-nya. Untuk model dengan n parameter, Hessian punya n² elemen, sehingga hampir tidak pernah dibentuk di deep learning. Metode yang membutuhkan kelengkungan memakai Hessian-vector product, yang dihitung autodiff tanpa membangun matriksnya.

Kapan Jacobian penuh dibutuhkan?

Jarang saat training, karena loss skalar hanya butuh vector-Jacobian product. Jacobian penuh muncul di normalizing flow (untuk determinannya), analisis robustness, dan beberapa model fisika dan kontrol. Library seperti JAX menyediakan jacfwd dan jacrev, yang membangunnya kolom demi kolom atau baris demi baris.

Penjelasan terkait

Referensi

  1. Petersen & Pedersen, "The Matrix Cookbook"
  2. Parr & Howard (2018), "The Matrix Calculus You Need For Deep Learning"
  3. Deisenroth, Faisal & Ong, "Mathematics for Machine Learning", ch. 5 Vector Calculus
  4. Dinh, Sohl-Dickstein & Bengio (2016), "Density estimation using Real NVP"

Terakhir diperbarui