Autograd: Automatic Differentiation di PyTorch

Pendahuluan

Salah satu keunggulan utama PyTorch dibandingkan banyak framework lain adalah sistem automatic differentiation yang fleksibel dan intuitif, yang dikenal dengan Autograd.
Autograd memungkinkan kita menghitung turunan (gradien) secara otomatis terhadap tensor-tensor yang terlibat dalam suatu komputasi.

Konsep ini sangat krusial dalam deep learning, karena proses training model pada dasarnya adalah proses optimisasi, yang membutuhkan gradien dari fungsi loss terhadap parameter model.

Pada bab ini, kita akan membahas:

  • Konsep dasar automatic differentiation
  • Cara kerja Autograd di PyTorch
  • Penggunaan requires_grad
  • Backpropagation dengan backward()
  • Computational graph
  • Mengelola gradien (zeroing, detach, no_grad)

Apa itu Automatic Differentiation?

Automatic differentiation (AD) adalah teknik untuk menghitung turunan fungsi secara eksak dan efisien, tanpa menggunakan:

  • pendekatan numerik (finite difference), atau
  • simbolik murni (symbolic differentiation)

PyTorch menggunakan reverse-mode automatic differentiation, yang sangat efisien untuk model dengan banyak parameter (seperti neural network).

Tensor dan requires_grad

Agar PyTorch melacak operasi matematika terhadap sebuah tensor, tensor tersebut harus diset dengan:

requires_grad=True

Contoh Dasar

import torch

x = torch.tensor(2.0, requires_grad=True)
y = x ** 2 + 3 * x + 1

Pada contoh ini:

  • x adalah tensor yang akan diturunkan
  • y adalah hasil komputasi yang bergantung pada x

PyTorch secara otomatis membangun computational graph dari operasi tersebut.

Menghitung Gradien dengan backward()

Untuk menghitung gradien, kita memanggil metode:

y.backward()

Gradien hasil turunan disimpan di atribut .grad:

print(x.grad)

Secara matematis:y=x2+3x+1dydx=2x+3y = x^2 + 3x + 1 \Rightarrow \frac{dy}{dx} = 2x + 3Jika x = 2, maka:dydx=7\frac{dy}{dx} = 7PyTorch akan menghasilkan nilai yang sama.

Computational Graph di PyTorch

Setiap operasi tensor dengan requires_grad=True akan membentuk graf komputasi dinamis (dynamic computational graph).

Karakteristik penting PyTorch:

  • Graph dibuat saat runtime
  • Graph dihapus setelah backward() dipanggil
  • Sangat fleksibel untuk model dengan struktur dinamis (misalnya RNN)

Ilustrasi Konsep

x ──> (*) ──> (+) ──> y

Setiap node menyimpan informasi bagaimana gradien harus dihitung saat backpropagation.

Gradien pada Tensor Vektor dan Matriks

Jika output bukan skalar, PyTorch membutuhkan gradien awal (gradient seed).

x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x ** 2

y.backward(torch.ones_like(x))
print(x.grad)

Hal ini umum terjadi pada:

  • loss per batch
  • operasi tensor berdimensi tinggi

Akumulasi Gradien

Secara default, PyTorch mengakumulasi gradien, bukan menimpanya.

x = torch.tensor(2.0, requires_grad=True)

y1 = x ** 2
y1.backward()

y2 = x ** 3
y2.backward()

print(x.grad)

Untuk training neural network, gradien harus direset setiap iterasi:

optimizer.zero_grad()

atau

x.grad.zero_()

Menghentikan Tracking Gradien

1. torch.no_grad()

Digunakan saat inference atau evaluasi model.

with torch.no_grad():
    y = x * 2

Keuntungan:

  • Lebih hemat memori
  • Lebih cepat

2. detach()

Memisahkan tensor dari computational graph.

y = x.detach()

Tensor hasil:

  • Tidak melacak gradien
  • Berbagi data yang sama dengan tensor asli

Atribut Penting pada Tensor Autograd

AtributFungsi
requires_gradMenentukan apakah gradien dilacak
gradMenyimpan nilai gradien
grad_fnFungsi yang menghasilkan tensor tersebut
is_leafMenunjukkan apakah tensor adalah leaf node

Contoh:

print(y.grad_fn)

Contoh Mini: Backpropagation Manual

w = torch.tensor(0.5, requires_grad=True)
x = torch.tensor(2.0)
y_true = torch.tensor(4.0)

y_pred = w * x
loss = (y_pred - y_true) ** 2

loss.backward()

print(w.grad)

Contoh ini mencerminkan:

  • forward pass
  • loss computation
  • backward pass

Struktur ini akan menjadi dasar training neural network di bab berikutnya.

Ringkasan

Pada bab ini, kita telah mempelajari:

  • Konsep automatic differentiation
  • Cara kerja Autograd di PyTorch
  • Penggunaan requires_grad dan backward()
  • Computational graph dinamis
  • Pengelolaan gradien (zero_grad, detach, no_grad)

Pemahaman Autograd adalah fondasi utama sebelum masuk ke:

  • pembuatan neural network
  • training loop
  • optimisasi model