Demo propagasi mundur
$$\definecolor{masukan}{RGB}{66, 133, 244}\definecolor{keluaran}{RGB}{219, 68, 55}\definecolor{dinput}{RGB}{244, 180, 0}\definecolor{doutput}{RGB}{15, 157, 88}\definecolor{dweight}{RGB}{102, 0, 255}$$

Algoritme propagasi mundur

Algoritme propagasi mundur sangatlah penting untuk melatih jaringan neural yang besar secara cepat. Artikel ini menjelaskan cara kerja algoritme propagasi mundur.

Harap scroll ke bawah...

Jaringan neural yang sederhana

Di sebelah kanan, Anda akan melihat jaringan neural dengan satu masukan, satu simpul keluaran, dan dua lapisan tersembunyi dari tiap simpul.

Simpul di lapisan yang bersebelahan dihubungkan dengan bobot \(w_{ij}\), yang merupakan parameter jaringan.

Fungsi aktivasi

Setiap simpul memiliki total masukan \(\color{masukan}x\), fungsi aktivasi \(f(\color{masukan}x\color{hitam})\), dan keluaran \(\color{keluaran}y\color{hitam}=f(\color{masukan}x\color{hitam})\). \(f(\color{masukan}x\color{hitam})\) harus berupa fungsi non-linear, jika bukan fungsi non-linear, jaringan neural hanya dapat mempelajari model linear.

Fungsi aktivasi yang umum digunakan adalah Fungsi sigmoid: \(f(\color{masukan}x\color{hitam}) = \frac{1}{1+e^{-\color{masukan}x}}\).

Fungsi error

Tujuannya adalah untuk mempelajari bobot jaringan dari data secara otomatis sehingga keluaran yang diprediksi \(\color{keluaran}y_{keluaran}\) mendekati target \(\color{keluaran}y_{target}\) untuk semua masukan \(\color{masukan}x_{masukan}\).

Untuk mengukur jarak kita dari tujuan, kita menggunakan fungsi error \(E\). Fungsi error yang umum digunakan adalah \(E(\color{keluaran}y_{keluaran}\color{hitam},\color{keluaran}y_{target}\color{hitam}) = \frac{1}{2}(\color{keluaran}y_{keluaran}\color{hitam} - \color{keluaran}y_{target}\color{hitam})^2 \).

Propagasi maju

Kita mulai dengan mengambil contoh masukan \((\color{masukan}x_{masukan}\color{hitam},\color{keluaran}y_{target}\color{hitam})\) dan memperbarui lapisan masukan jaringan.

Untuk konsistensi, kita pertimbangkan masukan akan sama seperti simpul lainnya, namun tanpa fungsi aktivasi, sehingga keluarannya sama dengan masukannya, misalnya, \( \color{keluaran}y_1 \color{hitam} = \color{masukan} x_{masukan} \).

Propagasi maju

Kini, kita telah memperbarui lapisan tersembunyi pertama. Kita mengambil keluaran \(\color{keluaran}y\) dari simpul di lapisan sebelumnya dan menggunakan bobot untuk menghitung masukan \(\color{masukan}x\) dari simpul di lapisan berikutnya.
$$ \color{masukan} x_j \color{hitam} = $$$$ \sum_{i\in in(j)} w_{ij}\color{keluaran} y_i\color{hitam} +b_j$$

Propagasi maju

Selanjutnya, kita perbarui keluaran simpul di lapisan tersembunyi pertama. Untuk ini, kita gunakan fungsi aktivasi, \( f(x) \).
$$ \color{keluaran} y \color{hitam} = f(\color{masukan} x \color{hitam})$$

Propagasi maju

Dengan menggunakan 2 formula ini, kita lakukan propagasi untuk sisa jaringan dan mendapatkan hasil akhir keluaran jaringan.
$$ \color{keluaran} y \color{hitam} = f(\color{masukan} x \color{hitam})$$
$$ \color{masukan} x_j \color{hitam} = $$$$ \sum_{i\in in(j)} w_{ij}\color{keluaran} y_i \color{hitam} + b_j$$

Turunan error

Algoritme propagasi mundur memutuskan berapa banyak yang akan diperbarui setiap bobot jaringan setelah membandingkan keluaran yang diprediksi dengan keluaran yang diinginkan untuk contoh tertentu. Untuk ini, kita perlu menghitung bagaimana error diubah sesuai dengan setiap bobot \(\color{dweight}\frac{dE}{dw_{ij}}\).
Setelah memiliki turunan error, kita dapat memperbarui bobot menggunakan aturan pembaruan sederhana:
$$w_{ij} = w_{ij} - \alpha \color{dweight}\frac{dE}{dw_{ij}}$$
yang mana \(\alpha\) adalah konstanta positif, disebut sebagai kecepatan pemelajaran, yang perlu kita sempurnakan secara empiris.

[Catatan] Aturan pembaruan sangat sederhana: jika jumlah error menurun saat bobot meningkat (\(\color{dweight}\frac{dE}{dw_{ij}}\color{hitam} < 0\)), tingkatkan bobotnya. Sebaliknya, jika error meningkat saat bobot meningkat (\(\color{dweight}\frac{dE}{dw_{ij}} \color{hitam} > 0\)), kurangi bobotnya.

Turunan tambahan

Untuk membantu menghitung \(\color{dweight}\frac{dE}{dw_{ij}}\), kita simpan dua turunan tambahan untuk setiap simpul: perubahan error dengan:
  • total masukan simpul \(\color{dinput}\frac{dE}{dx}\) dan
  • keluaran simpul \(\color{doutput}\frac{dE}{dy}\).

Propagasi mundur

Mari mulai propagasi mundur turunan error. Karena kita telah memiliki prediksi keluaran dari contoh masukan ini, kita dapat menghitung perubahan error dengan keluaran tersebut. Mengingat fungsi error \(E = \frac{1}{2}(\color{keluaran}y_{keluaran}\color{hitam} - \color{keluaran}y_{target}\color{hitam})^2\) kita memiliki:
$$ \color{doutput} \frac{\partial E}{\partial y_{keluaran}} \color{hitam} = \color{keluaran} y_{keluaran} \color{hitam} - \color{keluaran} y_{target}$$

Propagasi mundur

Sekarang, karena kita telah memiliki \(\color{doutput} \frac{dE}{dy}\) kita bisa mendapatkan \(\color{dinput}\frac{dE}{dx}\) menggunakan aturan berantai.
$$\color{dinput} \frac{\partial E}{\partial x} \color{hitam} = \frac{dy}{dx}\color{doutput}\frac{\partial E}{\partial y} \color{hitam} = \frac{d}{dx}f(\color{masukan}x\color{hitam})\color{doutput}\frac{\partial E}{\partial y}$$
yang mana \(\frac{d}{dx}f(\color{masukan}x\color{hitam}) = f(\color{masukan}x\color{black})(1 - f(\color{masukan}x\color{hitam}))\) jika \(f(\color{masukan}x\color{hitam})\) adalah fungsi aktivasi Sigmoid.

Propagasi mundur

Segera setelah memiliki turunan error yang sesuai dengan total masukan simpul, kita bisa mendapatkan turunan error sesuai dengan bobot yang dimasukkan ke dalam simpul tersebut.
$$\color{dweight} \frac{\partial E}{\partial w_{ij}} \color{hitam} = \frac{\partial x_j}{\partial w_{ij}} \color{dinput}\frac{\partial E}{\partial x_j} \color{hitam} = \color{keluaran}y_i \color{dinput} \frac{\partial E}{\partial x_j}$$

Propagasi mundur

Dan dengan menggunakan aturan berantai, kita juga bisa mendapatkan \(\frac{dE}{dy}\) dari lapisan sebelumnya. Kita telah membuat satu lingkaran penuh.
$$ \color{doutput} \frac{\partial E}{\partial y_i} \color{hitam} = \sum_{j\in out(i)} \frac{\partial x_j}{\partial y_i} \color{dinput} \frac{\partial E}{\partial x_j} \color{hitam} = \sum_{j\in out(i)} w_{ij} \color{dinput} \frac{\partial E}{\partial x_j}$$

Propagasi mundur

Kita tinggal mengulangi ketiga formula sebelumnya sampai kita selesai menghitung semua turunan error.

Selesai.

Menghitung...