Skip to main content

9. Neural Network (Deep Learning).html


Neural Network (Deep Learning)

Pendahuluan

Hai stupenss kita bertemu kembali, apakah kalian pernah mendengar istilah deep learning? Apa sih Deep Learning itu? Deep Learning adalah salah satu cabang Machine Learning(ML) yang menggunakan Neural Network untuk menyelesaikan permasalahan pada domain ML. Jadi pada materi ini kita akan belajar neural network, mulai dari konsep neural network dan deep learning, kemudian arsitektur dari neural network serta mencoba membuat fungsi neural network dengan Multilayer Perceptron, jadi mari kita mulai belajar!

Neural Network

Neural network adalah model yang terinspirasi oleh bagaimana neuron dalam otak manusia bekerja. Tiap neuron pada otak manusia saling berhubungan dan informasi mengalir dari setiap neuron tersebut. Gambar di bawah adalah ilustrasi neuron dengan model matematisnya.

Biological Neuron VS Artificial Neuron Network

Setiap neuron menerima input dan melakukan operasi perkalian titik (dot product) dengan bobot tertentu, kemudian menjumlahkannya (weighted sum) dan menambahkan nilai bias. Hasil dari operasi ini akan digunakan sebagai argumen untuk fungsi aktivasi, yang kemudian menghasilkan output dari neuron tersebut.

Neural Network Architectures

Arsitektur Multi Layer Perceptron (MLP) atau Fully-Connected Layer. Pada arsitektur ini, terdapat tiga lapisan yaitu Input Layer dengan 3 neuron, Hidden Layer dengan 4 neuron, dan Output Layer dengan 2 neuron. MLP atau Fully-Connected Layer menghubungkan setiap neuron di lapisan sebelumnya dengan setiap neuron di lapisan berikutnya. Pada arsitektur ini, Input Layer memiliki tiga neuron yang menerima input awal, sedangkan Output Layer terdiri dari dua neuron yang menghasilkan output akhir.

Multi Layer Perceptron

Diantara Input Layer dan Output Layer, terdapat Hidden Layer yang memiliki 4 neuron, berfungsi untuk memproses informasi secara bertahap dan mempelajari representasi yang lebih kompleks dari input. Dengan adanya Hidden Layer, MLP dapat memodelkan hubungan yang lebih kompleks dan melakukan tugas yang lebih rumit.

Weight and Bias

Jika kamu lihat pada tiap neuron dalam MLP saling terhubung melalui panah pada gambar yang disediakan. Setiap koneksi antara neuron memiliki bobot (weight) yang nilainya dapat bervariasi. Weight (Bobot) adalah parameter yang digunakan dalam Neural Network untuk mengatur sejauh mana pengaruh input pada setiap neuron. Setiap koneksi antara neuron memiliki bobot yang menggambarkan kekuatan dan arah pengaruh input tersebut terhadap neuron tujuan. Bobot inilah yang diubah selama proses pelatihan Neural Network untuk mengoptimalkan kinerja jaringan. Dalam arsitektur jaringan yang lebih kompleks, seperti MLP, terdapat berbagai bobot yang menghubungkan setiap neuron antara lapisan-lapisan.

 

Sedangkan pada hidden layer dan output layer juga memiliki penambahan "input" yang dikenal sebagai bias (Tidak terlihat pada gambar yang diberikan). Bias adalah nilai tambahan yang ditambahkan ke input dari setiap neuron dalam Neural Network sebelum diaktifkan oleh fungsi aktivasi. Bias memberikan neuron kemampuan untuk belajar dan menghasilkan output yang tidak hanya bergantung pada input masukan saja. Bias memungkinkan Neural Network untuk memodelkan hubungan yang lebih fleksibel dan memperbaiki kesalahan yang terjadi dalam data. Bias dianggap sebagai parameter yang dapat diatur selama pelatihan Neural Network.

 

Oleh karena itu, dalam arsitektur pertama terdapat 3x4 bobot + 4 bias dan 4x2 bobot + 2 bias. Jumlah totalnya adalah 26 parameter yang akan mengalami perubahan selama proses pelatihan untuk mencapai hasil yang optimal. Sedangkan dalam arsitektur kedua, terdapat 41 parameter.

Activation Function

Apa itu activation function, dan mengapa hal itu penting?. Activation function, sesuai dengan namanya, adalah suatu fungsi untuk menentukan apakah suatu neuron harus "aktif" atau tidak berdasarkan hasil penjumlahan bobot input. Secara umum, terdapat dua jenis activation function, yaitu linear dan non-linear activation function.

Neuron pada input layer tidak memiliki activation function, sedangkan neuron pada hidden layer dan output layer memiliki activation function yang kadang berbeda tergantung daripada data atau problem yang kita miliki.

Linear Function

Linear Function; f(x)

Linear Function merupakan activation function bawaan dari suatu neuron. Linear function ini mempertahankan hubungan linear antara input dan output tanpa mengenalkan non-linearitas ke dalam jaringan. Secara matematis didefinisikan sebagai f(x) = ax + b, di mana a dan b adalah konstanta. Fungsi ini mengambil input x dan mengalikannya dengan koefisien a, kemudian menambahkan konstanta b. Output dari fungsi linear ini adalah nilai yang linear tergantung pada inputnya.

Sigmoid and Tanh Function (Non-Linear)

Sigmoid & tan Function

Sigmoid function adalah fungsi matematis dengan bentuk kurva S. Fungsi ini mengambil input apa pun dan menghasilkan output antara 0 dan 1. Secara matematis, sigmoid function didefinisikan sebagai f(x) = 1 / (1 + exp(-x)). Fungsi ini memiliki sifat bahwa semakin besar inputnya, semakin mendekati 1 outputnya, dan semakin kecil inputnya, semakin mendekati 0 outputnya.

Tanh function adalah fungsi matematis yang memiliki bentuk kurva mirip dengan sigmoid function, tetapi dengan rentang nilai dari -1 hingga 1. Secara matematis, tanh function didefinisikan sebagai f(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x)). Fungsi ini memiliki sifat bahwa semakin besar inputnya, semakin mendekati 1 outputnya, dan semakin kecil inputnya, semakin mendekati -1 outputnya.

ReLU (Non-Linear)

ReLU Function

ReLU (Rectified Linear Unit) adalah jenis activation function non-linear yang sangat populer dalam Neural Network. Fungsi ini menggantikan nilai negatif dengan nol dan mempertahankan nilai positif tanpa mengubahnya. Fungsi ReLU secara matematis didefinisikan sebagai f(x) = max(0, x), di mana x adalah input dari neuron. Jadi, jika nilai input x adalah positif, outputnya akan sama dengan nilai inputnya. Namun, jika nilai input x adalah negatif, outputnya akan menjadi nol.

 

Sebenarnya masih banyak jenis activation function, namun untuk fungsi diatas memang yang paling umum digunakan. untuk mengetahui lebih banyak tentang activation function kamu dapat membacanya di sini.

Training a Neural Network

Contoh pada Supervised Learning menggunakan Neural Network, terdapat dua tahap penting, yaitu training dan evaluation. Training merupakan tahap di mana bobot (weight) dan bias pada setiap neuron diperbarui secara berulang hingga output yang dihasilkan sesuai dengan harapan atau target yang diinginkan. Tahap ini melibatkan proses iteratif di mana setiap iterasi melibatkan evaluasi yang digunakan untuk menentukan kapan harus menghentikan proses training (stopping point). Pada proses training terdiri dari 2 tahap namun disini akan dijelaskan garis besarnya saja.

Forward Pass

Forward pass atau forward propagation adalah langkah dalam Neural Network di mana data input diteruskan melalui setiap neuron pada hidden layer hingga mencapai output layer yang nanti akan dihitung errornya. Pada tahap ini, setiap neuron melakukan operasi pengolahan terhadap input yang diterimanya, seperti perkalian dengan bobot (weight), penjumlahan (weighted sum), dan penerapan fungsi aktivasi. Data input mengalir maju melalui jaringan, melewati setiap layer, dan output akhir dihasilkan.

 

Pada contoh forward pass pada arsitektur pertama (sesuai gambar di atas), terdapat persamaan yang menunjukkan bagaimana data mengalir melalui jaringan. Dalam persamaan tersebut, i merupakan node pada layer input (3 node input), j merupakan node pada hidden layer, dan h merupakan output dari node pada hidden layer. Activation function yang digunakan dalam contoh ini adalah ReLU.

Backward Pass

Backward pass, juga dikenal sebagai backpropagation, adalah tahap penting dalam proses training Neural Network. Pada tahap ini, error yang dihasilkan dari perbandingan output yang diprediksi dengan target yang sebenarnya dikembalikan ke seluruh jaringan secara terbalik (dari layer output ke layer input). Hal ini dilakukan untuk menghitung gradien atau turunan parsial kesalahan terhadap setiap bobot (weight) dan bias dalam jaringan.

 

Kedua proses tersebut, yaitu forward pass dan pembaharuan bobot dan bias, akan dilakukan secara berulang-ulang. Tujuannya adalah untuk mencapai nilai bobot dan bias yang menghasilkan error seminimal mungkin pada output layer saat melakukan forward pass.

Lets Code

Nah kita akan coba mengimplementasikan model forward pass sederhana menggunakan python dan library numpy agar prosesnya dapat dimengerti. Untuk contoh studi kasus kali ini adalah melakukan regresi untuk data yang berupa fungsi linear:

f(x) = 3x + 2

lalu kita akan memakai 1 node pada input layer dan 1 node pada output layer,

1.    Forward Propagation

Method forward Pass di bawah ini sangat simple sekali, operasi dot akan dilakukan pada setiap elemen pada input dan tiap weight yang terhubung dengan input dan ditambahkan dengan bias. Hasil dari operasi ini akan dimasukkan ke dalam activation function.

 

def forwardPass(inputs, weight, bias):

w_sum = np.dot(inputs, weight) + bias

 

# Linear Activation f(x) = x

act = w_sum

 

return act

2.    Pre-Trained Weight

Untuk weight dan bias yang akan kita coba, nilai keduanya sudah didapatkan pada proses training yang telah saya lakukan sebelumnya. Bagaimana cara mendapatkan kedua nilai tersebut akan dijelaskan pada part-part berikutnya.

 

Pre-Trained Weights & Biases after Training

 

W = np.array([[2.99999928]])

b = np.array([1.99999976])

 

Kalau dilihat dari weight dan bias diatas, nilai keduanya identik dengan fungsi linear kita tadi :

f(x) = 3x + 2 ≈ f(x) = 2.99999928x + 1.99999976

3.    Complete Code

import numpy as np

def forwardPass(inputs, weight, bias):
w_sum = np.dot(inputs, weight) + bias

# Linear Activation f(x) = x
act = w_sum

return act

# Pre-Trained Weights & Biases after Training
W = np.array([[
2.99999928]])
b = np.array([
1.99999976])

# Initialize Input Data
inputs = np.array([[
7], [8], [9], [10]])

# Output of Output Layer
o_out = forwardPass(inputs, W, b)

print(
'Output Layer Output (Linear)')
print(
'================================')
print(o_out,
"\n")

 

Output :

Output Layer Output (Linear)
================================
[[22.99999472]
[25.999994 ]
[28.99999328]
[31.99999256]]



** Process exited - Return Code: 0 **

 

Pada percobaan kali ini kita akan melakukan prediksi nilai dari 7, 8, 9 dan 10. Output yang dihasilkan seharusnya adalah 23, 26, 29, 32 dan hasil prediksi adalah 22.99999472, 25.999994, 28.99999328 dan 31.99999256. Jika dilihat dari hasil prediksi, masih terdapat error tapi dengan nilai yang sangat kecil.

Referensi

https://www.ibm.com/topics/neural-networks

https://en.wikipedia.org/wiki/Artificial_neural_network

https://algorit.ma/blog/neural-network-adalah-2022/

https://purnasaigudikandula.medium.com/a-beginner-intro-to-neural-networks-543267bda3c8

https://medium.datadriveninvestor.com/what-is-a-neural-network-9ca88b29f7cb

https://towardsdatascience.com/introducing-deep-learning-and-neural-networks-deep-learning-for-rookies-1-bd68f9cf5883

https://medium.com/@samuelsena/pengenalan-deep-learning-part-2-multilayer-perceptron-e8f98d625b09

 

Last modified: Monday, 30 October 2023, 2:17 PM