|
|
||
|---|---|---|
| .. | ||
| lab | ||
| OwnFramework.ipynb | ||
| README.md | ||
README.md
Pengantar Jaringan Neural. Multi-Layered Perceptron
Pada bagian sebelumnya, Anda telah mempelajari model jaringan neural paling sederhana - perceptron satu lapis, sebuah model klasifikasi linear dua kelas.
Pada bagian ini, kita akan memperluas model tersebut ke dalam kerangka kerja yang lebih fleksibel, memungkinkan kita untuk:
- melakukan klasifikasi multi-kelas selain dua kelas
- menyelesaikan masalah regresi selain klasifikasi
- memisahkan kelas yang tidak dapat dipisahkan secara linear
Kita juga akan mengembangkan kerangka kerja modular kita sendiri dalam Python yang memungkinkan kita untuk membangun berbagai arsitektur jaringan neural.
Kuis sebelum pelajaran
Formalisasi Pembelajaran Mesin
Mari kita mulai dengan memformalkan masalah Pembelajaran Mesin. Misalkan kita memiliki dataset pelatihan X dengan label Y, dan kita perlu membangun model f yang akan memberikan prediksi paling akurat. Kualitas prediksi diukur dengan fungsi kerugian ℒ. Fungsi kerugian berikut sering digunakan:
- Untuk masalah regresi, ketika kita perlu memprediksi sebuah angka, kita dapat menggunakan absolute error ∑i|f(x(i))-y(i)|, atau squared error ∑i(f(x(i))-y(i))2
- Untuk klasifikasi, kita menggunakan 0-1 loss (yang pada dasarnya sama dengan akurasi model), atau logistic loss.
Untuk perceptron satu lapis, fungsi f didefinisikan sebagai fungsi linear f(x)=wx+b (di sini w adalah matriks bobot, x adalah vektor fitur input, dan b adalah vektor bias). Untuk berbagai arsitektur jaringan neural, fungsi ini dapat memiliki bentuk yang lebih kompleks.
Dalam kasus klasifikasi, sering kali diinginkan untuk mendapatkan probabilitas dari kelas-kelas yang sesuai sebagai output jaringan. Untuk mengubah angka sembarang menjadi probabilitas (misalnya untuk menormalisasi output), kita sering menggunakan fungsi softmax σ, dan fungsi f menjadi f(x)=σ(wx+b)
Dalam definisi f di atas, w dan b disebut parameter θ=⟨w,b⟩. Dengan dataset ⟨X,Y⟩, kita dapat menghitung keseluruhan kesalahan pada seluruh dataset sebagai fungsi dari parameter θ.
✅ Tujuan pelatihan jaringan neural adalah meminimalkan kesalahan dengan mengubah parameter θ
Optimasi Gradient Descent
Ada metode optimasi fungsi yang terkenal yang disebut gradient descent. Ide dasarnya adalah kita dapat menghitung turunan (dalam kasus multi-dimensi disebut gradien) dari fungsi kerugian terhadap parameter, dan mengubah parameter sedemikian rupa sehingga kesalahan akan berkurang. Ini dapat diformalkan sebagai berikut:
- Inisialisasi parameter dengan beberapa nilai acak w(0), b(0)
- Ulangi langkah berikut berkali-kali:
- w(i+1) = w(i)-η∂ℒ/∂w
- b(i+1) = b(i)-η∂ℒ/∂b
Selama pelatihan, langkah-langkah optimasi seharusnya dihitung dengan mempertimbangkan seluruh dataset (ingat bahwa kerugian dihitung sebagai jumlah dari semua sampel pelatihan). Namun, dalam praktiknya kita mengambil bagian kecil dari dataset yang disebut minibatches, dan menghitung gradien berdasarkan subset data. Karena subset diambil secara acak setiap kali, metode ini disebut stochastic gradient descent (SGD).
Multi-Layered Perceptrons dan Backpropagation
Jaringan satu lapis, seperti yang telah kita lihat di atas, mampu mengklasifikasikan kelas yang dapat dipisahkan secara linear. Untuk membangun model yang lebih kaya, kita dapat menggabungkan beberapa lapisan jaringan. Secara matematis, ini berarti fungsi f akan memiliki bentuk yang lebih kompleks, dan akan dihitung dalam beberapa langkah:
- z1=w1x+b1
- z2=w2α(z1)+b2
- f = σ(z2)
Di sini, α adalah fungsi aktivasi non-linear, σ adalah fungsi softmax, dan parameter θ=<w1,b1,w2,b2>.
Algoritma gradient descent tetap sama, tetapi akan lebih sulit untuk menghitung gradien. Berdasarkan aturan diferensiasi rantai, kita dapat menghitung turunan sebagai:
- ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2)
- ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1)
✅ Aturan diferensiasi rantai digunakan untuk menghitung turunan fungsi kerugian terhadap parameter.
Perhatikan bahwa bagian paling kiri dari semua ekspresi tersebut adalah sama, sehingga kita dapat secara efektif menghitung turunan mulai dari fungsi kerugian dan bergerak "mundur" melalui grafik komputasi. Oleh karena itu, metode pelatihan perceptron multi-lapis disebut backpropagation, atau 'backprop'.
TODO: sitasi gambar
✅ Kita akan membahas backprop secara lebih rinci dalam contoh notebook kita.
Kesimpulan
Dalam pelajaran ini, kita telah membangun pustaka jaringan neural kita sendiri, dan kita telah menggunakannya untuk tugas klasifikasi dua dimensi yang sederhana.
🚀 Tantangan
Dalam notebook yang menyertai, Anda akan mengimplementasikan kerangka kerja Anda sendiri untuk membangun dan melatih perceptron multi-lapis. Anda akan dapat melihat secara rinci bagaimana jaringan neural modern beroperasi.
Lanjutkan ke notebook OwnFramework dan kerjakan.
Kuis setelah pelajaran
Tinjauan & Studi Mandiri
Backpropagation adalah algoritma umum yang digunakan dalam AI dan ML, layak untuk dipelajari lebih lanjut
Tugas
Dalam lab ini, Anda diminta untuk menggunakan kerangka kerja yang Anda bangun dalam pelajaran ini untuk menyelesaikan klasifikasi digit tulisan tangan MNIST.