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:
xadalah tensor yang akan diturunkanyadalah hasil komputasi yang bergantung padax
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:Jika x = 2, maka:PyTorch 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
| Atribut | Fungsi |
|---|---|
requires_grad | Menentukan apakah gradien dilacak |
grad | Menyimpan nilai gradien |
grad_fn | Fungsi yang menghasilkan tensor tersebut |
is_leaf | Menunjukkan 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_graddanbackward() - 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
