Artificial Neural Network (ANN) — Intuisi Sederhana
The Neuron
Artificial Neural Network (ANN) — Konsep dan Intuisi Sederhana

The Neuron

Sumber: superdatascience.com
Gambar di atas, menunjukkan struktur dari neuron secara umum yang terdiri dari dendrit, axon, dan neuron itu sendiri. Dalam hal ini dendrit merupakan bagian yang bertugas untuk menerima sinyal dari neuron lain atau dari sumber lain di luar neuron itu sendiri. Kemudian axon bertugas untuk mengirimkan sinyal listrik dari neuron ke neuron lain dalam bentuk impuls listrik yang disebut potensial aksi. Sedangkan neuron atau badan sel neuron merupakan bagian yang menjadi pusat pengaturan metabolisme sel dan integrasi sinyal-sinyal yang diterima dari dendrit. Secara khusus, neuron ini adalah tempat di mana sinyal-sinyal yang diterima diproses dan kemudian diteruskan ke akson untuk dikirimkan ke neuron lain atau sel-sel efektor lainnya.
Pada dasarnya, satu neuron tidak begitu memiliki kekuatan atau kecanggihan yang kuat. Namun, jika satu neuron bertemu dengan neuron lain (katakanlah hingga milyaran neuron lain) lalu melakukan komunikasi, maka kekuatan atau kecanggihan dari neuron baru dapat terlihat atau dirasakan. Gambar berikut ini menunjukkan situasi komunikasi antara satu neuron dengan neuron lain.

Sumber: cannify.us
Pada gambar kecil di sudut kiri atas, dapat dilihat bahwa sebenarnya akson dari suatu neuron tidak bersentuhan langsung dengan dendrit dari neuron lain dalam proses interaksinya melainkan melalui sebuah mekanisme synapse yang pada kasus ini bisa kita identifikasi sebagai mekanisme yang menghubungkan akson dan dendrit dalam agar proses transfer sinyal bisa berjalan.
Dalam hal implementasinya pada mesin, struktur neuron dibuat sebagai berikut:

Sumber: superdatascience.com
Lingkaran berwarna kuning dapat kita sebut sebagai neuron input (posisinya sebagai dendrit), kemudian lingkaran berwarna merah (output signal) akan memegang posisi akson. Pada deep learning secara khusus, neuron input tersebut merupakan fitur-fitur (atau variabel) yang diterima dan akan dipelajar melalui mekanisme synapse agar nilai-nilai dari tiap fitur input tersebut bisa di-transfer ke neuron inti.
Kemudian yang perlu diketahui juga adalah bahwa setiap nilai dari fitur-fitur atau variabel-variabel yang berperan sebagai input terlebih dahulu akan dikenakan proses standardisasi atau normalisasi karena memang proses pembelajaran deep learning akan berjalan dengan baik ketika nilai-nilai dari variabel atau fiturnya dikenakan standardisasi atau normalisasi terlebih dahulu (penjelasan terkait standardisasi dan normalisasi dapat dikases **di sini**).

Sumber: superdatascience.com
Khusus untuk output value, hasil akhirnya dapat bervariasi, mulai dari nilai kontinu, nilai biner (ya/tidak), dan mungkin bersifat kategorikal.

Sumber: superdatascience.com
Ketika output value yang diharapkan bersifat kategorikal, maka yang perlu diketahui adalah bahwa output value kita dapat lebih dari satu yang mana masing-masing output value mewakili kategori yang berbeda seperti diilustrasikan pada gambar berikut ini:

Sumber: superdatascience.com
Untuk bagian synapse, pada deep learning kita merepresentasikannya sebagai weight atau bobot, dan konsep bobot pada deep learning benar-benar peting karena bobot inilah yang nantinya akan menentukan sinyal apa yang penting dan sinyal apa yang tidak penting dari neuron input atau sinyal apa yang perlu diteruskan ke inti neuraon dan sinyal apa yang tidak perlu diteruskan ke dalam inti neuron. Selain itu, ketika kita melatih sebuah model deep learning, pada dasarnya yang dilakukan adalah menyesuaikan bobot pada semua mekanisme synapse yang ada pada neuron atau jaringan yang terbentuk.

Sumber: superdatascience.com
Terakhir, pada inti neuron, yang sebenarnya terjadi adalah kita membentuk sebuah kombinasi linier dari nilai-nilai fitur atau variabel dan bobot yang digunakan pada synapse. Ilustrasinya adalah sebagai berikut:

Sumber: superdatascience.com
Perlu diingat, bahwa pembentukan kombinasi linier ini merupakan tahap pertama pada rangkaian proses di intin neuron, dan yang menjadi tahap kedua adalah penerapan fungsi aktivasi agar inti neuron dapat memahami dan memutuskan sinyal apa yang penting untuk diteruskan dan sinyal apa yang tidak perlu untuk diterukan ke akson atau output value.

Sumber: superdatascience.com
Activation Function (Fungsi Aktivasi)
Seperti yang telah dijelaskan sebelumnya, fungsi aktivasi berperan agar inti neuron dapat memahami dan memutuskan sinyal apa yang penting untuk diteruskan dan sinyal apa yang tidak perlu untuk diteruskan ke akson atau output value sekaligus menentukan bagaimana bentuk dari sinyal itu sendiri. Pada dasarnya dalam deep learning, ada sangat banyak fungsi aktivasi yang dapat digunakan untuk kasus-kasus tertentu. Namun, pada bahasan kali ini, kita akan mencoba membahas empat fungsi aktivasi utama yang banyak digunakan.
Threshold Function

Sumber: superdatascience.com
Pada threshold function ini, kita memiliki dua sumbu yaitu sumbu x dan sumbu y. Yang mana sumbu x merepresentasikan jumlah input tertimbang atau kombinasi linier antara nilai variabel input dan bobot yang digunakan, sedangkan sumbu y merepresentasikan nilai yang berkisar antara 0 dan 1. Cara kerjanya cukup sederhana, jika nilai input tertimbang yang diperoleh kurang dari nol, maka fungsi aktivasi ini akan menghasilkan nilai 0, kemudian jika nilai input tertimbang yang diperoleh lebih besar atau sama dengan 0, maka fungsi aktivasi ini akan menghasilkan nilai 1. Tentu, ini mirip seperti fungsi untuk menghasilkan keputusan ya atau tidak.
Sigmoid Function

Sumber: superdatascience.com
Pada sigmoid function ini, dapat dilihat bahwa sumbu x akan mewakili nilai input tertimbang sedangkan sumbu y akan mewakili nilai keluaran dari fungsi pemetaan yang digambarkan di atas. Pada dasarnya, fungsi ini cukup identik dengan fungsi yang digunakan pada regresi logistik yang akan sangat berguna jika dalam prosesnya kita ingin melakukan klasifikasi dengan prediksi probablitas menggunakan deep learning.
Rectified Linear Unit (ReLU)

Sumber: superdatascience.com
Secara sederhana, fungsi aktivasi ini mengubah nilai-nilai negatif menjadi nol dan membiarkan nilai-nilai positif tidak berubah. Ini berarti bahwa jika nilai input (x) — yang diperoleh dari nilai input tertimbang — positif, maka nilai outputnya akan sama dengan nilai input (x) itu sendiri, sedangkan jika nilai inputnya negatif, maka nilai outputnya akan menjadi nol.
Hyperbolic Tangent (tanh)

Sumber: superdatascience.com
Pada dasarnya, fungsi aktivasi ini cukup mirip dengan fungsi sigmoid, namun fungsi tanh secara khusus dapat memberikan keluaran berupa nilai negatif dengan rentang antara -1 dan 1.
Pada praktiknya, kita dapat melakukan menerapkan kombinasi pada penggunaan fungsi aktivasi ini. Misalnya, seperti pada gambar berikut ini:

Sumber: superdatascience.com
Pada gambar di atas, terlihat bahwa kita memiliki beberapa neuron input, satu hidden layer, dan satu output value. Pada kasus ini, kita dapat menerapkan fungsi aktivasi ReLU pada hidden layer dan menerapkan fungsi sigmoid pada output value untuk melakukan tugas klasifikasi dengan deep learning misalnya.
Bagaimana Cara Kerja Neural Network?

Sumber: webberstudio.com
Sebagai contoh aplikatif, misalnya kita akan coba melihat bagaimana nilai valuasi dari properti. Untuk itu, katakanlah kita memiliki empat variabel input, yaitu luas properti, jumlah kamar, jarak dari kota, dan usia properti. Pada bentuk neural network yang paling sederhana, kita hanya memliki input layer dan output layer seperti pada gambar berikut ini.

Sumber: superdatascience.com
Menariknya, dengan arsitektur seperti di atas, kita sudah dapat memperoleh nilai hasil prediksi untuk variabel dependen yang dalam hal ini merupakan nilai valuasi properti. Anggap model neural network ini telah dilatih sehingga diperoleh nilai bobot (w₁, w₂, …, w₄)** yang optimal. *Sehingga, kita cukup menjalankan mekanisme synapse dengan membuat kombinasi linier antara nilai input variabel dan bobot yang digunakan seperti yang dirumuskan pada gambar di atas. Namun, pada tingkatan yang lebih kompleks, sebelum output layer, kita dapat menambahkan satu atau banyak hidden layer. Gambar berikut ini menunjukkan arsitektur neural network dengan satu hidden layer*.

Sumber: superdatascience.com
Pada gambar di atas, dapat kita lihat bahwa semua variabel input akan mencoba untuk terhubung pada setiap neuron yang ada di hidden layer satu persatu mulai dari neuron teratas hingga neuron yang paling bawah. Tentu telah kita tahu bahwa proses keterhubungan ini masuk dalam mekanisme synapse yang berarti perlu ada bobot untuk setiap nilai dari variabel input. Yang menarik adalah, ternyata tidak semua keterhubungan ini memiliki bobot yang bukan nol. Kadangkala memang ada nilai dari variabel input yang mendapatkan bobot bernilai nol shingga perannya untuk neuron (di hidden layer) tersebut sebenarnya tidak signifikan. Misalnya seperti pada gambar berikut ini.

Sumber: superdatascience.com
Pada gambar di atas, ditunjukkan bahwa neuron teratas yang ada di hidden layer memberikan bobot dengan nilai 0 pada variabel umur properti (x₄) dan jumlah kamar (x₂). Dalam artian, khusus pada neuron tersebut, dia hanya fokus melihat valuasi properti berdasarkan luas area (x₁) dan jarak properti tersebut dari kota (x₃) — tentu ini didapatkan dari hasil training model neural network (dalam hal ini model neural network yang digunakan diasumsikan telah dilatih sebelumnya). Jadi neuron tersebut mungkin akan menilai bahwa semakin luas sebuah properti dan semakin dekat jaraknya dari kota, maka valuasi properti tersebut akan semakin tinggi.
Berikutnya, misalnya kita pindah untuk melihat neuron ketiga ada hidden layer melalui gambar berikut ini.

Sumber: superdatascience.com
Dari gambar di atas, terlihat bahwa neuron ketiga pada hidden layer hanya mempertimbagkan luasan properti (x₁), jumlah kamar pada sebuah properti (x₂), dan usia dari properti tersebut (x₄). Untuk fitur atau variabel yang lain neuron tersebut malah memberikan bobot dengan nilai 0. Secara intuitif, dapat dikatakan bahwa neuron tersebut akan menilai bahwa semakin luas sebuah properti, kemudian banyak jumlah kamarnya, dan semakin baru usianya maka valuasi properti tersebut akan semakin tinggi.
Berikutnya, kita akan coba lihat pada neuron terakhir dari hidden layer melalui gambar berikut ini.

Sumber: superdatascience.com
Dari gambar di atas, terlihat bahwa neuron terakhir pada hidden layer justru hanya mempertimbangkan satu variabel input, yaitu usia properti (x₄) dan untuk fitur lainnya, neuron ini memberikan bobot dengan nilai 0. Kembali secara intuitif dapat dikatakan bahwa neuron tersebut akan menilai bahwa semakin baru usia sebuah properti maka valuasi properti tersebut akan semakin tinggi. Juga mungkin saja jika usia sebuah properti melewati 100 tahun, maka valuasi dari properti tersebut juga menjadi semakin tinggi karena dianggap sebagai properti bersejarah dan orang-orang akan bangga memilikinya. Untuk kasus threshold 100 tahun tersebut, di sinilah fungsi aktivasi ReLU menjadi cocok untuk digunakan. Yang mana jika usianya di bawah 100 tahun, maka valuasi propertinya cenderung rendah sedangkan jika sudah mencapai usia 100 tahun ataul lebih, maka valuasinya akan semakin tinggi karena faktor sejarah.
Pada banyak kasus, neuron-neuron yang ada pada hidden layer mungkin akan menangkap atau mempertimbangkan kombinasi fitur yang tidak kita duga sebelumnya. Misalnya pada gambar berikut ini, yang mana neuron kedua dari hidden layer hanya mempertimbangkan jumlah kamar (x₂) dan jarak properti dari kota (x₃).

Sumber: superdatascience.com
Selain itu, bisa saja sebuah neuron justru mempertimbangkan sebuah fitur yang ada, seperti yang ditunjukkan pada gambar berikut ini melalui neuron keempat dari hidden layer.

Sumber: superdatascience.com
Semua keputusan neuron tersebut lahir dari hasil training model yang menhasilkan besaran nilai bobot yang terbentuk. Itulah kenapa mendapatkan nilai bobot terbaik dalam deep learning menjadi hal yang sangat krusial untuk dilakukan.
Setelah semua neuron yang ada pada hidden layer terkoneksi dengan nilai-nilai dari variabel input, barulah kemudian neuron-neuron tersebut mengirimkan sinyal ke output value secara bersama-sama untuk memprediksi valuasi dari sebuah properti.

Sumber: superdatascience.com
Bagaimana Neural Network Belajar?
Misalkan kita memiliki satu baris data berikut ini.

Sumber: superdatascience.com
Berdasarkan data di atas, kita memiliki tiga variabel input yaitu study hours, sleep hours, dan quiz. Kemudian kita juga memiliki satu variabel dependen atau variabel target yaitu exam yang merepresentasikan nilai ujian yang diperoleh.
Pada neural network, kita akan memasukkan nilai-nilai variabel input tersebut ke dalam input layer kemudian nilai-nilai tersebut akan diproses sedemikian rupa menggunakan nilai bobot tertentu dan fungsi aktivasi tertentu untuk mendapatkan sebuah nilai output yang merupakan hasil prediksi. Ilustrasinya disajikan pada gambar berikut ini.

Sumber: superdatascience.com
Kemudian karena kita telah mengetahui nilai aktual dari variabel dependennya, maka kita bisa melakukan perbandingan (seperti pada bar chart ujung kanan atas dari gambar di atas) dan evaluasi dari hasil prediksi model neural network yang kita gunakan menggunakan fungsi cost tertentu. Ada banyak fungsi cost yang bisa diterapkan, namun fungsi cost yang paling umum digunakan adalah sebagai berikut:

Tentu, tujuan kita adalah untuk mendapatkan nilai cost yang seminimum mungkin karena nilai cost yang minimum menandakan bahwa model neural network mampu melakukan prediksi dengan akurat karena selisih atau perbedaan antara hasil prediksi dan nilai aktualnya kecil. Misalnya, untuk percobaan pertama kita memasukkan nilai-nilai variabel input yang kita ketahui ke dalam model neural network kita dan melakukan evaluasi terhadap hasil prediksi yang diperoleh seperti yang ditunjukkan pada gambar berikut ini:

Sumber: superdatascience.com
Panah kuning dari gambar di atas menunjukkan proses forward yang diawali dengan masuknya nilai variabel input yang telah dikalikan dengan bobotnya masing-masing dan dijumlahkan (untuk membentuk kombinasi linier) ke dalam neuron atau perceptron yang ditunjukkan oleh lingkaran berwarna hijau. Kemudian pada perceptron tersebut, kita menerapkan sebuah fungsi aktivasi tertentu yang hasilnya akan diteruskan ke output value sehingga diperoleh sebuah nilai prediksi tertentu. Setelah nilai prediksi diperoleh, selanjutnya kita membandingkan nilai hasil prediksi (bar biru) dan nilai aktual (bar hijau) lalu melakukan penghitungan nilai cost sesuai dengan fungsi cost yang digunakan. Berdasarkan penghitungan nilai cost tersebut, terlihat bahwa nilai cost yang diperoleh pada percobaan pertama ini masih relatif tinggi. Untuk itu, dilakukan proses backward yang ditunjukkan oleh panah ungu pada gambar di atas. Dalam proses backward tersebut, nilai cost yang diperoleh sebelumnya akan dibawa menuju perceptron agar bobot awal yang digunakan bisa disesuaikan kembali untuk mendapat bobot baru. Setelah bobot baru diperoleh, maka proses input nilai variabel independen dilakukan lagi untuk mengecek nilai cost setelah dilakukan penyesuaian bobot. Yang perlu digarisbawahi adalah bahwa proses ini dilakukan secara iteratif atau secara berulang hingga diperoleh nilai cost seminimum mungkin atau sejumlah perulangan tertentu yang diinginkan.
Nilai cost untuk percobaan kedua adalah sebagai berikut:

Sumber: superdatascience.com
Terlihat bahwa nilai cost yang diperoleh justru lebih tinggi jika dibandingkan dengan nilai cost sebelumnya. Lalu, dilakukan lagi percobaan ketiga dengan mengulang prosedur yang sama seperti yang dijelaskan di atas sehingga diperoleh nilai cost sebagai berikut:

Sumber: superdatascience.com
Pada percobaan ketiga, nilai cost yang diperoleh sudah cenderung kecil. Kemudian kita lakukan lagi percobaan keempat dengan hasil sebagai berikut:

Sumber: superdatascience.com
Pada percobaan keempat, terlihat bahwa nilai cost yang diperoleh mengalami peningkatan. Kemudian dilakukan lagi percobaan kelima dengan hasil sebagai berikut:

Sumber: superdatascience.com
Pada percobaan kelima, nilai cost yang diperoleh kembali mengecil. Kemudian dilakukan lagi percobaan keenam dengan hasil sebagai berikut:

Sumber: superdatascience.com
Barulah pada percobaan keenam ini, diperoleh nilai cost yang sangat kecil yaitu 0 yang berarti bahwa nilai hasil prediksi yang diperoleh sama persis dengan nilai aktual. Maka dari itu, proses iterasi atau percobaan untuk menyesuaikan bobot dihentikan sampai di sini.
Secara umum, seperti itulah proses learning atau proses belajar dari neural network.
Namun, pada contoh sebelumya kita hanya bekerja untuk satu baris data atau satu observasi data. Sekarang bayangkan jika kita memiliki lebih banyak observasi (dan seharusnya memang begitu). Untuk kasus ini, kita akan coba menggunakan 8 observasi demi kemudahan dalam pembahasan sebagai berikut.

Sumber: superdatascience.com
Untuk kasus data dengan banyak observasi ini, proses yang dilakukan sebenarnya tidak jauh berbeda dengan proses dengan satu baris sebelumnya. Ilustrasinya adalah sebagai berikut:

Sumber: superdatascience.com
Pada gambar di atas, seolah-olah terdapat 8 arsitektur neural network yang berbeda. Namun sebenarnya kedelapan arsitektur neural network adalah sama (tidak berbeda sama sekali). Hanya saja digambarkan menjadi 8 agar proses pembahasannya menjadi lebih mudah. Dalam prosesnya, tiap baris data akan dimasukkan satu per satu ke dalam arsitektur neural network tersebut — tentu dengan proses synapse (dengan bobot tertentu) dan penerapan fungsi aktivasi tertentu — untuk mendapatkan nilai prediksi untuk setiap baris yang dimasukkan. Dalam artian pada setiap iterasi, kedelapan data yang diketahui dimasukkan menggunakan bobot yang sama hingga diperoleh nilai prediksi untuk masing-masing observasi. Pada konsep ini, iterasi tersebut disebut sebagai epoch (proses memasukkan seluruh observasi ke dalam arsitektur neural network disebut sebagai satu epoch). Visualisasi bar chart pada pojok kanan bawah dari gambar di atas merupakan perbandingan antara hasil prediksi dan nilai aktual dari tiap baris yang ada secara berturut-turut mulai dari observasi pertama hingga observasi kedelapan untuk sebuah iterasi atau percobaan. Kemudian bar terakhir di ujung bar chart tersebut merepresentasikan total nilai cost yang diperoleh pada percobaan tersebut.
Persis seperti proses backward pada contoh satu observasi sebelumnya, nilai cost yang diperoleh dari setiap iterasi atau setiap percobaan yang dilakukan akan dikembalikan ke perceptron agar bobot sebelumnya bisa disesuaikan kembali sehingga hasil prediksi yang diperoleh semakin akurat dengan nilai cost seminimum mungkin. Namun, nilai cost yang digunakan pada proses backward merupakan penjumlahan dari nilai cost semua observasi. Karena pada kasus ini terdapat 8 observasi, maka akan diperoleh 8 nilai cost untuk setiap epoch, dan untuk mendapatkan nilai cost yang akan digunakan dalam proses backward, maka kedelapan nilai cost tersebut dijumlahkan. Proses yang sama kemudian bisa diterapkan lebih jauh untuk data dengan 100 observasi, 1000 observasi, 10000 observasi, dan seterusnya. Tentu proses backward akan terus dilakukan hingga diperoleh nilai cost yang diperoleh dapat menjadi seminimum mungkin.
Gradient Descent
Secara konseptual, gradient descent akan berbicara mengenai mekanisme penyesuaian bobot yang dilakukan pada saat proses backward terjadi. Pada dasarnya, gradient descent adalah algoritma optimisasi yang digunakan untuk meminimalkan fungsi kerugian (loss function) dalam neural network yang tentu dalam prosesnya melibatkan penyesuaian bobot-bobot jaringan neural dengan tujuan mengurangi kesalahan antara prediksi model dan nilai sebenarnya.
Namun, sebenarnya ada cara yang cukup sederhana yang bisa dilakukan dalam rangka memilih bobot optimal untuk meminimalkan cost function atau loss function. Cara tersebut dikenal dengan nama brute-force. Cara kerja dari brute-force ini adalah dengan mencoba banyak (atau bahkan semua) kemungkinan nilai bobot yang berbeda untuk melihat bobot mana yang berhasil memberikan nilai loss function seminimum mungkin. Misalnya, kita mengambil 40 nilai bobot yang berbeda untuk diuji coba. Kemudian hasil uji coba tersebut kita visualisasikan dalam grafik dua dimensi sebagai berikut:

Sumber: superdatascience.com
Pada gambar di atas, sumbu horizontal menunjukkan nilai prediksi yang diperoleh dengan nilai bobot tertentu sedangkan sumbu vertikal menunjukkan nilai loss function yang diperoleh berdasarkan nilai prediksi yang bersesuaian. Untuk bisa melakukan visualisasi seperti di atas, tentu kita perlu menentukan format dari loss function yang akan kita gunakan, dalam hal ini loss function yang digunakan adalah loss function yang digunakan pada contoh sebelumnya seperti yang tercantum pada gambar di atas. Akhirnya, dengan menggunakan loss function tersebut, didapati bahwa bobot terbaik adalah bobot yang menghasilkan nilai prediksi yang ada di tengah-tengah sumbu horizontal sebab dengan nilai prediksi tersebut berhasil diperoleh nilai loss function yang paling minimum.
Namun, dalam praktiknya mekanisme brute-force ini akan memakan waktu yang sangat banyak dan sangat tidak efisien. Misalnya, kita memiliki arsitektur neural network sebagai berikut:

Sumber: superdatascience.com
Berdasarkan arsitektur di atas, diketahui bahwa kita memiliki 25 bobot yang perlu disesuaikan karena ada 25 proses synapse yang berjalan dan masing-masing synapse tersebut memerlukan bobot. Kemudian dengan menganggap bahwa jumlah bobot yang akan kita uji coba dengan mekanisme brute-force misalnya sebanyak 1000, maka kita akan memiliki kombinasi bobot sebanyak berikut ini.

Sumber: superdatascience.com
Dengan jumlah kombinasi bobot sebanyak itu, bahkan salah satu super komputer tercepat di dunia yaitu Sunway TaihuLight bahkan butuh waktu sekitar 3,42 × 10⁵⁰ tahun. Tentu ini akan sangat tidak efisien terlebih jika arsitektur dari neural network yang kita punya memiliki lebih dari satu hidden layer karena proses synapse-nya juga akan semakin banyak dan berdampak pada jumlah bobot yang semakin banyak pula. Nah, berangkat dari sini, gradient descent kemudian muncul sebagai solusi.
Pada gradient descent ini, komputasi paling utama yang dilakukan adalah menghitung gradien dari loss function terhadap setiap bobot. Gradien ini menunjukkan arah dan besarnya perubahan yang diperlukan pada setiap bobot untuk mengurangi loss. Ilustrasinya (dengan loss function yang sama seperti sebelumnya) adalah sebagai berikut:

Sumber: superdatascience.com
Pada contoh ini, loss function yang digunakan merupakan fungsi kuadrat sehingga bentuk kurvanya akan seperti pada ambar di atas. Lingkaran berwarna merah di atas merupakan titik awal yang menjadi perhatian kita untuk menghitung gradien. Tentu, titik tersebut muncul dari sebuah nilai bobot tertentu, sebuah nilai prediksi tertentu, dan sebuah nilai cost atau loss tertentu. Pada titik awal tersebut diperoleh gradien yang negatif (ditunjukkan oleh garis biru), dari situ kita mengetahui bahwa ada kemungkinan nilai bobot lain yang lebih besar yang dapat memberikan nilai loss lebih kecil. Sehingga, kita kemudian memperbarui nilai bobot tersebut. Dalam hal ini bobot diperbarui dengan mengurangkan gradien yang telah dihitung dikalikan dengan suatu nilai yang disebut learning rate. Learning rate sendiri adalah parameter yang menentukan seberapa besar langkah yang diambil dalam proses pembaruan bobot:

Setelah melakukan kalkulasi bobot yang baru, maka dihasilkan titik kedua (ditunjukkan oleh lingkaran merah putus-putus) pada ilustrasi sebelumnya. Pada titik baru tersebut, selanjutnya dihitung lagi gradien-nya, dan pada ilustrasi di atas diperoleh gradien positif yang berarti masih terdapat nilai bobot lain yang lebih kecil yang mampu memberikan nilai loss yang lebih kecil. Oleh karena itu, bobot kembali diperbarui dan diperoleh titik ketiga (lihat kembali ilustrasi di atas). Pada titik ketiga tersebut, gradien kembali dihitung dan didapati bahwa gradien yang diperoleh merupakan gradien negatif yang berarti bahwa masih terdapat kemungkinan bobot lain yang lebih besar yang dapat memberikan nilai loss yang lebih kecil. Maka dari itu, pembaruan bobot kembali dilakukan hingga diperoleh gradien = 0 atau paling tidak mendekati nol dan nilai loss yang minimum dari nilai-nilai loss sebelumnya. Dua kondisi tersebut perlu dicek, karena nilai gradien = 0 menunjukkan titik minimum atau titik maksimum dari sebuah kurva. Namun, tentu yang menjadi target kita adalah titik minimum dari kurva tersebut karena titik minimum dalam hal ini akan merepresentasikan nilai loss yang paling minimum. Jika, misalnya diperoleh nilai gradien pada titik tertentu = 0 namun nilai loss yang diberikan lebih besar dari nilai-nilai loss sebelumnya, maka bisa jadi titik tersebut merupakan titik maksimum kurva sehingga perlu dilakukan pembaruan nilai bobot kembali hingga didapatkan nilai loss yang paling minimum.
Catatan:
Jika gradien positif:
Ini berarti fungsi kerugian meningkat jika kita meningkatkan bobot. Jadi, untuk mengurangi kerugian, kita perlu mengurangi bobot tersebut.
Jika gradien negatif:
Ini berarti fungsi kerugian meningkat jika kita mengurangi bobot. Jadi, untuk mengurangi kerugian, kita perlu meningkatkan bobot tersebut.
Tentu, jika diperhatikan lebih jauh, mekanisme gradient descent yang menggunakan bantuan gradien untuk menentukan arah perubahan bobot dan learning rate untuk menentukan berapa besar bobot akan bergeser untuk mendapatkan nilai loss paling minimum lebih efisien jika dibandingkan dengan mekanisme brute-force yang harus mencoba banyak atau bahkan semua kemungkinan nilai bobot yang dapat digunakan. Sebab dengan bantuan gradien dan learning rate pada gradient descent, kita cukup mencoba nilai bobot yang sesuai dengan kriteria yang disinyalkan oleh gradien dan learning rate tersebut tanpa perlu mencoba semua kemungkinan nilai bobot yang mungkin.
Stochastic Gradient Descent
Sampai di sini, kita telah tahu bahwa gradient descent menjadi solusi dalam upaya meminimalkan nilai dari loss function dengan efisien. Namun, yang menjadi permasalahan adalah mekanisme gradient descent tersebut mengharuskan penggunaan loss function yang berbentuk kurva cembung sehingga hanya memiliki satu titik minimum yang sekaligus menjadi titik minimum global seperti pada gambar berikut ini.

Sumber: superdatascience.com
Sekarang, bagaimana jika loss function yang kita gunakan ternyata bukan merupakan kurva cembung? Misalnya seperti pada gambar berikut ini.

Sumber: superdatascience.com
Hal ini dapat terjadi jika dalam prosesnya kita memang tidak menggunakan loss function yang merupakan fungsi kuadrat. Atau meskipun loss function yang kita gunakan merupakan fungsi kuadrat, namun jika kita bekerja pada ruang multidimensional representasi visual dari fungsi kuadrat tersebut tidak lagi akan menjadi kurva cembung. Kemudian jika kita tetap memaksakan untuk menggunakan mekanisme gradient descent sebagai mekanisme untuk mengoptimalkan nilai dari loss function, maka kemungkinan besar kita akan berakhir pada titik minimum lokal (disimbolkan dengan lingkaran merah pada gambar di atas) yang juga berarti kita tidak berhasil menemukan nilai bobot paling optimal untuk membuat nilai loss menjadi paling minimum. Padahal sebenarnya terdapat titik minimum global yang merepresentasikan titik dengan nilai loss yang benar-benar paling minimum (ditunjukkan dengan titik BEST pada gambar di atas).
Berangkat dari permasalahan tersebutlah stochastic gradient descent muncul sebagai solusi. Pada dasarnya prinsip kerja dari gradient descent dan stochastic gradient descent hampir mirip, hanya saja dalam proses penyesuaian bobotnya, stochastic gradient descent akan bekerja setiap satu amatan atau satu observasi diproses pada arsitektur neural network yang dibuat.

Sumber: superdatascience.com
Gambar di atas menunjukkan alur kerja dari gradient descent yang mana penyesuaian bobot dilakukan setelah semua observasi diproses pada arsitektur neural network yang dimiliki.
Sedangkan pada stochastic gradient descent penyesuaian bobot dilakukan setiap sebuah observasi atau amatan diproses pada arsitektur neural network yang dimiliki. Dalam artian, penyesuaian bobot pada stochastic gradient descent tidak akan menunggu semua observasi untuk dimasukkan pada arsitektur neural network, melainkan akan dilakukan untuk setiap observasi yang masuk. Ilustrasinya adalah sebagai berikut:

Sumber: superdatascience.com
Dari gambar di atas, dapat dilihat bahwa observasi pertama dimasukkan terelebih dahulu ke dalam arsitektur neural network yang digunakan. Setelah prosesnya selesai dilakukan penyseuaian bobot yang pertama. Kemudian, observasi yang kedua juga dimasukkan ke dalam arsitektur neural network, lalu penyesuaian bobot yang kedua dilakukan. Selanjutnya, giliran observasi yang ketiga yang dimasukkan ke dalam arsitektur neural network, dan penyesuaian bobot yang ketiga pun dilakukan. Proses ini terus diulang sampai observasi terakhir dalam data dimasukkan ke dalam arsitektur neural network untuk diproses.
Gambar berikut ini menunjukkan ilustrasi perbandingan alur kerja dari gradient descent dan stochastic gradient descent.

Sumber: superdatascience.com
Alur kerja gradient descent yang sebelumnya dijelasakan juga biasanya disebut dengan batch gradient descent karena memang proses updating bobotnya dilakukan per batch (dalam hal ini satu batch bisa disamakan dengan satu epoch). Dari gamabr di atas, yang perlu diingat adalah bahwa alur kerja updating bobot dari stochastic gradient descent dilakukan setiap observasi diproses dengan arsitektur neural network yang digunakan. Dengan alur kerja seperti ini, stochastic gradient descent dapat membantu kita untuk terhindar dari jebakan titik minimum lokal. Selain itu, jika ditinjau dari sisi komputasi updating bobot, stochastic gradient descent cenderung lebih cepat jika dibandingkan dengan gradient descent secara umum karena dalam prosesnya stochastic gradient descent hanya memproses data per observasi yang tentu cost komputasinya lebih kecil jika dibandingkan dengan gradient descent yang memproses seluruh observasi dalam satu batch untuk melakukan updating bobot.
Bacaan tambahan terkait stochastic gradient descent dengan bisa diakses **di sini.**
Backpropagation

Sumber: superdatascience.com
Backpropagation ini sebenarnya telah banyak kita singgung di bagian-bagian sebelumnya, namun khusus pada bagian ini kita akan coba menekankan kembali apa yang dimaksud dengan backpropagation sebenarnya. Jadi, backpropagation merupakan mekanisme pelatihan pada neural network untuk mengoptimalkan bobot-bobot yang digunakan pada proses synapse dengan menghitung gradien loss function terhadap bobot tersebut. Proses ini dimulai dengan forward propagation, yang mana data input diproses melalui jaringan neural network untuk menghasilkan output prediksi. Setelah itu, nilai loss dihitung berdasarkan selisih antara prediksi dan nilai sebenarnya. Nilai loss inilah yang nantinya akan dijadikan sebagai acuan dalam proses backpropagation dengan target meminimalkan nilai dari loss tersebut. Selama backpropagation berlangsung, gradien dari loss function dihitung dari output layer kembali ke input layer menggunakan aturan rantai. Gradien ini menunjukkan arah perubahan bobot yang diperlukan untuk mengurangi nilai loss. Bobot kemudian diperbarui dengan mengurangkan gradien yang telah dikalikan dengan learning rate. Dengan backpropagation, jaringan neural dapat belajar dari data dan mengurangi kesalahan prediksi secara efisien.
Rangkuman
Berikut ini adalah rangkuman tahap demi tahap untuk melakukan training model Artificial Neural Network (ANN) dengan stochastic gradient descent:
- Inisialisasi bobot secara acak ke angka kecil yang mendekati 0 tetapi bukan 0.
- Masukkan observasi pertama dari dataset yang dimiliki pada input layer, dalam hal ini setiap fitur direpresentasikan dalam satu node input.
- Froward propagation: dari kiri ke kanan, neuron-neuron diaktifkan sedemikian rupa sehingga dampak aktivasi setiap neuron dibatasi oleh bobot. Perbanyak aktivasi hingga mendapatkan hasil prediksi dari y (variabel target).
- Bandingkan nilai aktual dan nilai prediksi dari variabel target dengan mengukur selisih dari keduanya sebagai representasi nilai loss. Semakin kecil nilai loss, maka model artificial neural network yang dibangun semakin baik.
- Back propagation: dari kanan ke kiri, nilai loss dirambatkan ke belakang. Kemudian bobot diperbarui sesuai dengan seberapa besar bobot tersebut bertanggung jawab atas kesalahan tersebut. Dalam hal ini digunakan learning rate untuk menentukan seberapa banyak atau seberapa besar kita memperbarui bobot.
- Ulangi tahap 1 sampai 5 dan update bobot untuk setiap observasi yang diproses (reinforcement learning — stochastic gradient descent) Atau: Ulangi tahap 1 sampai 5 namun proses update bobot dilakukan per batch (batch learning).
- Ketika seluruh set atau observasi dari data pelatihan telah diproses pada arsitektut ANN yang digunkan (satu epoch), ulangi lagi proses epoch tersebut karena semakin banyak epoch, maka semakin banyak kesempatan model ANN untuk belajar dari data training yang dimiliki yang akan berdampak pada meningkatnya akurasi prediksi.
Sumber: Super Data Science, “Machine Learning A-Z”
메타데이터
- post_id
- 4e819f1e55e4
- slug
- artificial-neural-network-ann-intuisi-sederhana-4e819f1e55e4
- url
- https://medium.com/@faarh.nn/artificial-neural-network-ann-intuisi-sederhana-4e819f1e55e4
- canonical_url
- https://medium.com/@faarh.nn/artificial-neural-network-ann-intuisi-sederhana-4e819f1e55e4
- author_url
- https://medium.com/@faarh.nn
- status
- ok
- fetched_at
- 2026-07-23 19:20:31