# Artificial Neural Network

## Apa itu Artificial Neural Network (ANN)

Jika perceptron dianalogikan dengan neuron, maka pada ANN atau jaringan saraf tiruan (JST) dapat dianalogikan sebagai otak yang terdiri dari kumpulan neuron. Pada otak manusia terdiri dari milyaran neuron dengan triliunan sinapsis, pada ANN direpresentasikan dengan graf terarah dari neuron-neuron buatan. Edge dari graph diberi nilai bobot $$(w)$$ . Bobot tersebut merupakan parameter model yang harus dipelajari. Pada Gambar 1 merupakan pemetaan neural network dari otak manusia menjadi neural network yang ada pada machine learning. setiap neuron dinotasikan dengan node dan akson dinotasikan dengan edge.

<figure><img src="https://1812311909-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYHOv2XH8FJMJSMsnhwNa%2Fuploads%2FtPNmINq011DOpxTWF4sK%2Fimage.png?alt=media&#x26;token=7884d212-fa81-4bbf-ae83-b17654ad6f50" alt=""><figcaption><p>Gambar 1. Ilustrasi Neural Network</p></figcaption></figure>

## Multi Layer Perceptron (MLP)

Multi-layer perceptron(MLP) merupakan salah satu algoritma ANN yang memiliki beberapa layer dari neuron yang menyerupai perceptron. Pada MLP memiliki setidaknya 3 layer ataupun lebih dengan setiap layer akan terhubung dengan layer berikutnya. Layer minimal yang ada pada MLP adalah 3 layer yaitu input layer, satu buah hidden layer, dan output layer. Setiap lapisan atau layer memiliki banyak perceptron yang menerima input dari lapisan sebelumnya dan mengeluarkan output aktivasi untuk lapisan selanjutnya. Struktur MLP dengan satu hidden layer dapat dilihat pada Gambar 2.

<figure><img src="https://1812311909-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYHOv2XH8FJMJSMsnhwNa%2Fuploads%2Fb6HRHa6wADeKQvTskHSF%2Fimage.png?alt=media&#x26;token=ccad9d56-1e13-49d7-b782-c07b9c45382a" alt=""><figcaption><p>Gambar 2. Ilustrasi MLP 1 Hidden Layer<br>(Credit: <a href="https://www.researchgate.net/publication/303875065_ASSESSMENT_OF_ARTIFICIAL_NEURAL_NETWORK_FOR_BATHYMETRY_ESTIMATION_USING_HIGH_RESOLUTION_SATELLITE_IMAGERY_IN_SHALLOW_LAKES_CASE_STUDY_EL_BURULLUS_LAKE">Hassan Mohamed Hassan, 2015</a>)</p></figcaption></figure>

**Input Layer**

Lapisan ini adalah lapisan yang menerima input langsung dari data yang dimasukkan. Jumlah node input yang ada pada input layer tegantung pada banyaknya fitur yang digunakan untuk pelatihan. Output dari lapisan input ini akan menjadi input dari hidden layer.

**Hidden Layer**

Hidden Layer merepresentasikan variabel laten; layer ini adalah layer yang memproses input sebelum diteruskan ke layer output. Semakin hidden layer, umumnya akurasi dari ANN juga semakin bagus, namun hal ini juga dapat menyembabkan peningkatan biaya komputasi. Hidden layer pada lapisan terakhir akan terhubung dengan output. Selanjutnya, dalam arstektur ANN memungkinkan memiliki lebih dari 1 hidden layer. Gambar 3 merupakan arstitektur ANN kompleks yang memiliki lebih dari 1 hidden layer.

<figure><img src="https://1812311909-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYHOv2XH8FJMJSMsnhwNa%2Fuploads%2F6PFBBrkf58ANv8js0bg2%2Fimage.png?alt=media&#x26;token=590900a5-d228-4342-aa46-7240bdd47d66" alt=""><figcaption><p>Gambar 3. Ilustrasi ANN dengan Lebih dari 1 Hidden Layer<br>(Credit: <a href="https://www.researchgate.net/publication/334609713_A_Guide_for_Using_Deep_Learning_for_Complex_Trait_Genomic_Prediction">Laura Zingretti, 2019</a>)</p></figcaption></figure>

**Output Layer**

Layer ini adalah layer yang akan menjadi luaran dari MLP yang dibuat. Perceptron pada lapisan ini menerima input dari hidden layer. **Jumlah perceptron dari lapisan ini bergantung pada alternatif output yang diinginkan, diubah dalam bentuk biner**. Misal jika hanya prediksi benar salah, maka hanya diperlukan satu perceptron pada lapisan output yang menghasilkan luaran 0 dan 1.

## Pelatihan Pada ANN

Setelah membuat struktur dari ANN baik berupa perceptron maupun Multi-layer Perceptron, proses selanjutnya yang dilakukan adalah melakukan pelatihan. ANN perlu dilatih agar dapat menghasilkan output yang diinginkan. Proses pelatihan ini ada dua tahap yang dilakukan secara berulang-ulang sampai menghasilkan ANN yang diinginkan. **Dua tahapan ini adalah forward propagation (propagasi maju) dan backward propagation (propagasi mundur)**. Ilustrasi proses pelatihan JST bisa dilihat pada Gambar 4.

<figure><img src="https://1812311909-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYHOv2XH8FJMJSMsnhwNa%2Fuploads%2FqS8PyD5op1ptlOgDwRL4%2Fimage.png?alt=media&#x26;token=6826a484-9519-435b-9902-23f42f5d6097" alt=""><figcaption><p>Gambar 4. Ilustrasi Pembelajaran ANN<br>(Credit: <a href="https://www.analyticsvidhya.com/blog/2021/09/introduction-to-artificial-neural-networks/">Analytics Vidhya</a>)</p></figcaption></figure>

ANN yang saat ini banyak digunakan adalah gabungan dari forward propagation dan backward propagation hal ini didasari karena jika hanya menggunakan forward propagation akan sangat bergantung pada inisialisasi awal pemberian nilai pada bobot. Permasalahan biasanya muncul Ketika data training yang mempunyai banyak fitur yang artinyya node input juga banyak hal ini akan membuat banyanya bobot yang harus di inisialisai. Sehingga pada prakteknya saat ini banyak digunakan gabungan gabungan iterasi berulang dari forward propagation dan backward propagation yang biasa disebut dengan backpropragation. Backpropagation biasanya digunakan bersamaan dengan algoritma optimasi seperti gradient descent.

### Ilustrasi Backpropagation

Untuk mengambarkan bagaimana backpropagation digunakan struktur MLP dengan 3 layer seperti pada Gambar 5.

<figure><img src="https://1812311909-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYHOv2XH8FJMJSMsnhwNa%2Fuploads%2FgKIn7MjVGtMUi1XdyRkz%2Fimage.png?alt=media&#x26;token=d98059cc-9b3d-411f-a0cc-309f2fe8821e" alt=""><figcaption><p>Gambar 5. Contoh Arsitektur MLP dengan 3 Layer</p></figcaption></figure>

Setiap edge yang menghubungkan baik input ke hidden layer ataupun hidden layer ke output memiliki bobotnya masing-masing. Ilustrasi bobot,

<figure><img src="https://1812311909-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYHOv2XH8FJMJSMsnhwNa%2Fuploads%2FfFBYsOpVZ3Mv0LjpmJVT%2Fimage.png?alt=media&#x26;token=cdf09a50-e421-4442-b99c-34ccd3a30887" alt=""><figcaption></figcaption></figure>

Pada Gambar 5 dapat dilihat bahwa data inputan memiliki dua buah fitur yaitu $$x\_1$$, dan $$x\_2$$.

#### Proses Forward Propagation

Gambar dibawah ini merupakan ilustrasi bagaimana proses maju dari input ke output melalui network, Simbol $$w\_{x\_m}n$$ mewakili bobot koneksi antara input jaringan $$x\_m$$ dan neuron $$n$$ pada lapisan input. Simbol $$y\_n$$ merepresentasikan sinyal keluaran neuron $$n$$.

**Ilustrasi Pada Hidden Layer 1,**

<figure><img src="https://1812311909-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYHOv2XH8FJMJSMsnhwNa%2Fuploads%2FCVtlGMaWtfGW90p40Ws7%2Fimage.png?alt=media&#x26;token=8dfa34f9-bf4c-48be-b8d8-59fd458a494c" alt=""><figcaption></figcaption></figure>

**Ilustrasi Pada Hidden Layer 2,**

<figure><img src="https://1812311909-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYHOv2XH8FJMJSMsnhwNa%2Fuploads%2FBo8I29pQ0mmYf3rFkhvT%2Fimage.png?alt=media&#x26;token=237845c6-f90f-43e2-b9c9-4824405ed5c7" alt=""><figcaption></figcaption></figure>

**Ilustrasi Pada Output Layer,**

<figure><img src="https://1812311909-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYHOv2XH8FJMJSMsnhwNa%2Fuploads%2FYBnohG5BPJTIItXCSArP%2Fimage.png?alt=media&#x26;token=1c36096f-2ea9-46d0-b7fd-e098a32967b0" alt=""><figcaption></figcaption></figure>

#### Proses Backward Propagation

Gambar dibawah ini merupakan ilustrasi bagaimana proses mundur dari output menuju ke input melalui network.

<figure><img src="https://1812311909-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYHOv2XH8FJMJSMsnhwNa%2Fuploads%2FkQCD3pFp62mBe6HvMr7K%2Fimage.png?alt=media&#x26;token=8a6be9d0-10be-4772-a87b-1123d4b44f8a" alt=""><figcaption></figcaption></figure>

Pada langkah algoritma berikutnya, keluaran jaringan y dibandingkan dengan nilai aktual yang diinginkan (target), nilai target didapatkan dari kumpulan data training. Perbedaan antara tagert dengan output tersebut disebut error (𝛿) dari neuron lapisan output. Error juga dapat dicari dengan menggunakan squared error cost function (𝛿) dengan persamaan,

$$
E=\frac{1}{2}\sum\_{i=1}^{n}(y\_i-\hat{y}\_i)^2
$$

Nilai bobot yang digunakn untuk menghitung setiap node pada hidden layer memiliki nilai yang sama pada saat forward propagation, yang membedakan hanyalah arah perhitungannya dari output menjuju input dan juga bobot yang pada forward propagation dikalikan dengan nilai node setiap layer, pada backward propagation bobot dikalikan dengan error.

**Ilustrasi Backpro Pada Hidden Layer 2,**

<figure><img src="https://1812311909-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYHOv2XH8FJMJSMsnhwNa%2Fuploads%2FE1mIXEM7JhEvlB4tYRAS%2Fimage.png?alt=media&#x26;token=3bae7efa-134a-4cca-9518-0f2b3ec3f97a" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1812311909-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYHOv2XH8FJMJSMsnhwNa%2Fuploads%2FpLLYbZu3HeYzbU8F0rUr%2Fimage.png?alt=media&#x26;token=8ac4c5f4-8bf8-481a-ae97-a758902de6d2" alt=""><figcaption></figcaption></figure>

**Ilustrasi Backpro Pada Hidden Layer 1,**

<figure><img src="https://1812311909-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYHOv2XH8FJMJSMsnhwNa%2Fuploads%2FdpZjnqZ9VhQskgxg2GHQ%2Fimage.png?alt=media&#x26;token=00281bc5-cf5f-4990-b620-1b955a6ed877" alt=""><figcaption></figcaption></figure>

**Update Bobot,**

Ketika error untuk setiap neuron/node telah dihitung, maka bobot dari setiap input node dapat dilakukan modifikasi/perubahan. Dengan menggunakan persamaan,

$$
w'*{x\_i}=w*{x\_i}+\alpha\delta\_i\frac{df(e)}{de}x\_i
$$

Dengan,\
$$w'*{x\_i}$$ --> bobot baru\
$$w*{x\_i}$$ --> bobot lama\
$$x\_i$$ --> nilai input pada node $$x$$\
$$\frac{df(e)}{de}$$ --> Derivative activation function yang dapat dicari dengan persamaan berikut,\
$$\frac{d}{dx}f(x)=f(x)(1-f(x))$$

<figure><img src="https://1812311909-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYHOv2XH8FJMJSMsnhwNa%2Fuploads%2Ff2jp0OAmVta6zbzTzE3W%2Fimage.png?alt=media&#x26;token=257d19f4-b277-498f-ab18-af598f6ec686" alt=""><figcaption></figcaption></figure>
