Demo propagasi mundur
$$ \definecolor{input}{RGB}{66, 133, 244} \definecolor{output}{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.

Scroll ke bawah...

Jaringan neural sederhana

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

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

Fungsi aktivasi

Setiap node memiliki total input \(\color{input}x\), fungsi aktivasi \(f(\color{input}x\color{black})\), dan output \(\color{output}y\color{black}=f(\color{input}x\color{black})\). \(f(\color{input}x\color{black})\) harus berupa fungsi non-linear, jika tidak, jaringan neural hanya akan dapat mempelajari model linear.

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

Fungsi kesalahan

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

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

Propagasi maju

Kita mulai dengan mengambil contoh input \((\color{input}x_{input}\color{black},\color{output}y_{target}\color{black})\) dan memperbarui lapisan input jaringan.

Untuk menjaga konsistensi, kami menganggap input sama seperti node lainnya, tetapi tanpa fungsi aktivasi, sehingga output-nya sama dengan input-nya, yaitu \( \color{output}y_1 \color{black} = \color{input} x_{input} \).

Propagasi maju

Sekarang, kita memperbarui lapisan tersembunyi pertama. Kita mengambil output \(\color{output}y\) dari node di lapisan sebelumnya dan menggunakan bobot untuk menghitung input \(\color{input}x\) dari node di lapisan berikutnya.
$$ \color{input} x_j \color{black} = $$$$ \sum_{i\in in(j)} w_{ij}\color{output} y_i\color{black} +b_j$$

Propagasi maju

Kemudian, kita memperbarui output node di lapisan tersembunyi pertama. Untuk itu, kita menggunakan fungsi aktivasi, \( f(x) \).
$$ \color{output} y \color{black} = f(\color{input} x \color{black})$$

Propagasi maju

Dengan menggunakan 2 formula ini, kita lakukan penyebaran ke seluruh jaringan dan mendapatkan output akhir jaringan.
$$ \color{output} y \color{black} = f(\color{input} x \color{black})$$
$$ \color{input} x_j \color{black} = $$$$ \sum_{i\in in(j)} w_{ij}\color{output} y_i \color{black} + b_j$$

Turunan error

Algoritme propagasi mundur memutuskan berapa banyak yang akan diperbarui setiap bobot jaringan setelah membandingkan output yang diprediksi dengan output yang diinginkan untuk contoh tertentu. Untuk itu, kita perlu menghitung perubahan error sehubungan 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}}$$
dengan \(\alpha\) adalah konstanta positif, yang disebut sebagai kecepatan pembelajaran, yang perlu disesuaikan secara empiris.

[Catatan] Aturan pembaruan sangat sederhana: jika error menurun saat bobot meningkat (\(\color{dweight}\frac{dE}{dw_{ij}}\color{black} < 0\)), tingkatkan bobot, sebaliknya jika error meningkat saat bobot meningkat (\(\color{dweight}\frac{dE}{dw_{ij}} \color{black} > 0\)), turunkan bobot.

Turunan tambahan

Untuk membantu menghitung \(\color{dweight}\frac{dE}{dw_{ij}}\), kita juga menyimpan dua turunan lagi untuk setiap node: bagaimana error berubah dengan:
  • total input node \(\color{dinput}\frac{dE}{dx}\) dan
  • output node \(\color{doutput}\frac{dE}{dy}\).

Propagasi mundur

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

Propagasi mundur

Sekarang setelah \(\color{doutput} \frac{dE}{dy}\) kita bisa \(\color{dinput}\frac{dE}{dx}\) menggunakan aturan berantai.
$$\color{dinput} \frac{\partial E}{\partial x} \color{black} = \frac{dy}{dx}\color{doutput}\frac{\partial E}{\partial y} \color{black} = \frac{d}{dx}f(\color{input}x\color{black})\color{doutput}\frac{\partial E}{\partial y}$$
dengan \(\frac{d}{dx}f(\color{input}x\color{black}) = f(\color{input}x\color{black})(1 - f(\color{input}x\color{black}))\) jika \(f(\color{input}x\color{black})\) adalah fungsi aktivasi Sigmoid.

Propagasi mundur

Segera setelah memiliki turunan error yang sesuai dengan total input node, kita dapat memperoleh turunan error sesuai dengan bobot yang dimasukkan ke node tersebut.
$$\color{dweight} \frac{\partial E}{\partial w_{ij}} \color{black} = \frac{\partial x_j}{\partial w_{ij}} \color{dinput}\frac{\partial E}{\partial x_j} \color{black} = \color{output}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 lingkaran penuh.
$$ \color{doutput} \frac{\partial E}{\partial y_i} \color{black} = \sum_{j\in out(i)} \frac{\partial x_j}{\partial y_i} \color{dinput} \frac{\partial E}{\partial x_j} \color{black} = \sum_{j\in out(i)} w_{ij} \color{dinput} \frac{\partial E}{\partial x_j}$$

Propagasi mundur

Kita hanya perlu mengulangi tiga formula sebelumnya sampai kita selesai menghitung semua turunan error.

Akhir.

Menghitung...