Apa yang Sebenarnya Dihitung Neural Network
Sebuah neuron hanyalah jumlah berbobot ditambah satu fungsi yang membengkokkan. Tumpuk beberapa, dan garis lurus berubah menjadi batas apa pun yang Anda butuhkan.
Yang akan Anda bisa
- Menuliskan apa yang dihitung satu neuron
- Menjelaskan kenapa tanpa aktivasi nonlinear, kedalaman tidak ada gunanya
- Membaca efek learning rate pada gradient descent
Kata "neural" membuat banyak orang membayangkan otak. Lupakan itu sebentar. Satu neuron buatan melakukan tiga hal: mengalikan setiap masukan dengan sebuah bobot, menjumlahkannya bersama sebuah bias, lalu melewatkan hasilnya ke sebuah fungsi yang disebut aktivasi.
- x
- vektor masukan
- w
- bobot — yang dipelajari
- b
- bias — juga dipelajari
- φ
- fungsi aktivasi, mis. ReLU: φ(z) = max(0, z)
Kalau φ adalah sigmoid, satu neuron ini persis regresi logistik. Batas keputusannya adalah tempat w · x + b = 0 — dan itu selalu garis lurus (atau bidang datar, di dimensi lebih tinggi).
Kenapa nonlinearitas adalah intinya#
Satu lapisan adalah banyak neuron yang membaca masukan yang sama. Jaringan "dalam" adalah lapisan yang ditumpuk: keluaran satu lapisan menjadi masukan lapisan berikutnya. Godaannya adalah berpikir bahwa menumpuk lebih banyak lapisan otomatis memberi model yang lebih kuat. Tanpa φ, itu salah.
Lapisan membengkokkan ruang#
Dengan dua masukan, setiap neuron di lapisan tersembunyi pertama menggambar satu garis di bidang. ReLU "mematikan" satu sisi garis itu. Lapisan berikutnya menggabungkan potongan-potongan itu, jadi batas akhirnya tersusun dari segmen lurus — dan dengan cukup banyak segmen, bentuknya bisa melengkung sejauh yang dibutuhkan datanya.
Dengan 2 neuron ReLU, XOR bisa diselesaikan, tapi pelatihan sering tersangkut tergantung bobot awalnya. Menambah neuron jarang dibutuhkan untuk representasinya — tapi sangat membantu optimasinya. Itu pola yang akan Anda lihat berulang kali di deep learning: jaringan yang lebih besar dari yang "seharusnya" perlu justru lebih mudah dilatih.
Bagaimana bobotnya belajar#
Pelatihan berarti mencari bobot yang membuat loss — ukuran seberapa salah prediksinya — sekecil mungkin. Gradient descent melakukannya dengan langkah kecil berulang: hitung arah di mana loss naik paling cepat (gradien), lalu melangkah ke arah sebaliknya.
- L
- loss pada batch saat ini
- ∂L/∂w
- gradien loss terhadap bobot
- η
- learning rate — besar langkahnya
Neural network nyata punya jutaan bobot, bukan dua, tapi aturannya sama. Yang membuatnya mungkin adalah backpropagation: cara menghitung gradien untuk setiap bobot sekaligus dengan aturan rantai, dengan biaya kira-kira sebesar satu forward pass tambahan. Itu topik pelajaran berikutnya.
Hal yang sama, di PyTorch#
import torchfrom torch import nn model = nn.Sequential( nn.Linear(2, 8), # 2 masukan -> 8 neuron tersembunyi nn.ReLU(), # tanpa ini, model tetap linear nn.Linear(8, 1), # 8 -> 1 logit) loss_fn = nn.BCEWithLogitsLoss()optimizer = torch.optim.SGD(model.parameters(), lr=0.1) for X_batch, y_batch in loader: optimizer.zero_grad() # buang gradien langkah sebelumnya loss = loss_fn(model(X_batch), y_batch) loss.backward() # backpropagation optimizer.step() # w <- w - lr * gradSebuah jaringan punya 10 lapisan Linear tanpa fungsi aktivasi di antaranya. Apa yang bisa ia pelajari?
Loss Anda naik dan menjadi NaN setelah beberapa langkah. Apa tersangka pertama?