Belajar konsep machine learning tidak terlepas dari gradient descent dengan penjabaran fungsi turunan/derivatif. Konsep turunan pernah kita pelajari setidaknya di SMA yaitu matematika kalkulus. Saya akan mencoba menjabarkan sedikit aturan mengenai turunan dari sebuah fungsi berikut . Oiya saya pakai octave untuk menulis kodenya biar ringkas, kalian bisa beli buku saya disini . Kalau belum paham pembahasan sebelumnya, bisa kalian pelajari disini mengenai konsep gradient descent.
Mulai dari persamaan kuadrat berikut
Contents
- 1 Mulai dari persamaan kuadrat berikut
- 2 Konsep Perhitungan Mean Square Error
- 3 Mencari turunan m
- 4 Mencari turunan b
- 5 Berdasarkan persamaan 14 dan 19, saya akan persingkat saja dari persamaan
- 6 sehingga persamaan 14 atau turunan dari m akan menjadi
- 7 sehingga persamaan 19 atau turunan dari b akan menjadi
- 8 Update Nilai m dan b
- 9 Menulis kode untuk
- 10 Menulis kode untuk turunan
- 11 Menulis kode untuk turunan
- 12 Saatnya melakukan iterasi untuk perbaikan dan berdasarkan nilai
- 13 Pada iterasi ke 1
- 14 Lanjut ke iterasi 500
- 15 Lanjut saja ke 100 ribu iterasi
- 16 Masih kurang paham?
Perhatikan persamaan kuadrat berikut, akan dicari turunan pertama /derivatif nya
Jika ditemui kasus tersebut, ingatlah aturan turunan dari
maka turunannya yaitu
Jadi turunan dari
yaitu
(1)
selanjutnya
(2)
Jadi kita kalikan menjadi
(3)
Kita coba selesaikan jika untuk melihat, apakah rumus diatas sudah betul? Yuk kita lanjutkan
(4)
artinya bahwa persamaan diatas akan mencapai titik minimalnya ketika , yuk lihat grafik berikut
Saya pakai Octave saja buat nulis kode diatas, bosan pakai Python… heee. heee, kalian beli saja buku saya mengenai octave disini
clc;clear all;close all; x = -10:0.1:5; y = (2*x+10).^2; figure, plot(x,y) ylim([-10,20]) xlim([-10,10]) grid on
Konsep Perhitungan Mean Square Error
Kalian tahu donk rumus untuk menghitung mean square error
(5)
dengan
- adalah jumlah data
- adalah nilai faktual atau nilai target
- adalah nilai aktual atau nilai prediksi
Kemudian saya akan jabarkan mengenai variabel yang merupakan rumus dari persamaan regresi linear
(6)
*kalau ditulisan ini dibuat rumus tapi intinya adalah sama! cuman beda penamaan variabel saja. Persamaan (6) akan dimasukan kedalam persamaan (5) menjadi berikut
(7)
Kemudian persamaan diatas ada 2 variabel penting yang perlu dicari yaitu dan sehingga saya perjelas sebagai berikut
(8)
Yuk kita cari turunan pada persamaan (7) diatas untuk dan
Mencari turunan m
Karena fokus terhadap variabel maka variabel yang lain dianggap konstanta!
(9)
Perhatikan bahwa persamaan (9) diatas akan diturunkan untuk variabel , ingat ya pembahasan diawal, kita perjelas lagi biar ringkas
(10)
turunan dari yaitu
(11)
turunan dari yaitu
(12)
Jadi kita kalikan menjadi
(13)
sehingga turunan dari
(14)
Mencari turunan b
Karena fokus terhadap variabel maka variabel yang lain dianggap konstanta!
(15)
Saya anggap kalian sudah paham mengenai cara turunan diatas, maka berikut turunan
turunan dari yaitu
(16)
turunan dari yaitu
(17)
Jadi kita kalikan menjadi
(18)
sehingga turunan dari
(19)
Berdasarkan persamaan 14 dan 19, saya akan persingkat saja dari persamaan
menjadi fungsi w yaitu
sehingga persamaan 14 atau turunan dari m akan menjadi
(20)
sehingga persamaan 19 atau turunan dari b akan menjadi
(21)
Update Nilai m dan b
Untuk melakukan update dan , kita butuh nilai atau disebut dengan learning rate
Nilai mempunyai kisaran nilai
Menulis kode untuk
Yuk kita tulis persamaan sebelumnya yaitu
kedalam kode Octave, saya sebut dengan fungsi_bobot
fungsi_bobot = @(x,y,m,b) y-(m*x+b);
Menulis kode untuk turunan
saya sebut dengan fungsi_m_gradient
fungsi_m_gradient = @(x,w,N) (1/N) * - 2*dot(x,w);
Menulis kode untuk turunan
saya sebut dengan fungsi_b_gradient
fungsi_b_gradient = @(w,N) (1/N) * - 2*sum(w(:));
Saatnya melakukan iterasi untuk perbaikan dan berdasarkan nilai
Iterasi dilakukan untuk perbaikan dan berdasarkan laju pembelajaran, lumayan ya rumus-rumusnya! Kalau kalian belum paham mengenai derivatif/turunan, silahkan saja baca-baca pelajaran/mata kuliah mengenai matematika kalkulus! Namun kalau ada yang belum paham mengenai bahasa pemrograman Octave, kalian jangan lupa beli buku nya disini
Sedangkan dataset yang digunakan disini
Yuk kita lanjutkan mengenai iterasi, Oiya karena kodenya makin banyak, saya buat khusus function yaitu step_gradient
function [m_new,b_new] = step_gradient(x,y,alpha,m_current,b_current) fungsi_bobot = @(x,y,m,b) y-(m*x+b); fungsi_m_gradient = @(x,w,N) (1/N) * - 2*dot(x,w); fungsi_b_gradient = @(w,N) (1/N) * - 2*sum(w(:)); b_gradient = 0; m_gradient = 0; N = size(x,1); w = fungsi_bobot(x,y,m_current,b_current); m_gradient = fungsi_m_gradient(x,w,N); b_gradient = fungsi_b_gradient(w,N); m_new = m_current - (alpha*m_gradient); b_new = b_current - (alpha*b_gradient); endfunction
Disitu kalian bisa melihat ada perbaikan dan dengan melibatkan nilai , adapun untuk memanggil function tersebut yaitu
m = 1; b = -10; alpha = 0.001; for iterasi=1:100000 [m,b] = step_gradient(x,y,alpha,m,b); endfor
Yup dibutuhkan sebuah initial value untuk dan , saya set nilai sangat kecil sekali dengan iterasi sebanyak 100 ribu kali. Mari kita lihat hasil iterasi melalui gambar berikut.
Pada iterasi ke 1
Kalian bisa melihat gambar dibawah ini, garis dari rumus masih jauh dari sempurna
Lanjut ke iterasi 500
Kita lanjutkan regresi linear dengan teknik gradient descent nya, pada iterasi ke 500. Hem… kurang OK nampaknya
Lanjut saja ke 100 ribu iterasi
Nah kalau sudah ke 100ribu kali, agak lama sih! namanya juga machine learning sehingga mesin kudu belajar dulu biar pinter, dan…..Wow menarik sekali. Ternyata machine nya benar-benar belajar dari kesalahan sebelumnya dan memperbaiki diri pada iterasi 100ribu kali!
Kalian penasaran bukan? yuk lihat saja grafik error untuk tiap iterasi yang tervisualisasi dengan baik pada plot dibawah ini, pantesan saja machine learning belajar setiap kali ada iterasi! ditandai dengan error nya yang semakin turun!
Masih kurang puas hasil diatas, lakukan iterasi saja sampai jutaan kali, Oiya sebagai informasi saja berikut hasil untuk dan setelah mencapai 100ribu iterasi.
- nilai
- nilai
Bisa kalian bandingkan pada artikel disini yang menyebutkan nilai tersebut yaitu
- nilai
- nilai
Mirip-mirip lah hasilnya kan! kurang dikit sekali, tinggal kalian iterasi sebanyak -banyaknya saja, tapi intinya adalah konsep gradient descent merupakan behind the scene of machine learning. Oiya asal kalian memahami algoritma diatas, maka bahasa apapun tidak akan menjadi kendala, itulah mengapa saya lebih suka menggunakan Octave biar simple. Ssstt jangan lupa beli buku nya yaaa, disini
Masih kurang paham?
Kalau kurang paham, ya kirim saja email kesini