Tidak kusangka, persamaan diferensial ternyata punya pengaruh juga dengan statistik. Statistik ternyata tidak hanya bermain-main di aljabar biasa. Sepertinya memang benar kata dosen saya dulu,
"terkadang hal-hal yang tidak ada hubungannya, jika dilihat secara matematis bisa jadi itu berhubungan erat".
Keterkejutan ini maklum saya alami karena saya tidak punya basic statistik sama sekali. Ini semua saya pelajari secara otodidak dalam rangka mempelajari deep learning. Pertama kali saya membaca panduan dari deeplearning.net saya benar-benar tidak mengerti sama sekali apa-apa saja istilah dalam buku itu. The struggle is real, tapi saya sudah pernah mempelajari subjek yang lebih sulit daripada ini sebelumnya dan itulah yang kujadikan salah satu motivasi. Perlahan, saya belajar dan akhirnya sudah mulai paham dengan isi panduan itu.
Kali ini, kita akan membahas salah satu varian dalam menentukan regresi linear. Regresi linear ini adalah salah satu metode machine learning. Ordinary gradient descent ini merupakan cara lain dalam menentukan regresi linear (cara yang biasa saya tidak tahu sebutannya apa). Pertama-tama kita akan bahas terlebih dahulu istilah-istilah yang mungkin asing bagi kita untuk mempermudah memahami ordinary gradient descent ini.
Kali ini, kita akan membahas salah satu varian dalam menentukan regresi linear. Regresi linear ini adalah salah satu metode machine learning. Ordinary gradient descent ini merupakan cara lain dalam menentukan regresi linear (cara yang biasa saya tidak tahu sebutannya apa). Pertama-tama kita akan bahas terlebih dahulu istilah-istilah yang mungkin asing bagi kita untuk mempermudah memahami ordinary gradient descent ini.
Tidak tahu apa itu regresi linear? Ok, jadi regresi linear itu singkatnya adalah suatu cara untuk melihat pola dari data scatterplot di grafik. Jadi, kita tahu bahwa apa-apa yang ada di dunia ini saling berhubungan. Hubungan ini kita coba gambarkan dengan serangkaian koefisien dan konstanta dan dari hubungan koefisien dan konstanta inilah kita jadi bisa memprediksi kejadian selanjutnya berdasarkan input yang ada. Lebih lengkapnya silahkan searching saja, konsepnya cukup sederhana.
Kemudian ada persamaan diferensial, apa itu? Di blog ini sudah sering kita bahas. Singkatnya, persamaan diferensial adalah tentang bagaimana perubahan yang akan terjadi jika parameter dari suatu kejadian itu di ubah. Di sini, kita akan memanfaatkan sifat khas dari persamaan diferensial, yaitu slope atau kemiringan dari hasil persamaan yang diturunkan akan menunjuk ke arah tercepat untuk naik/turun dan dari banyak parameter itu jika kita cari semua turunannya secara parsial kita akan dapatkan yang namanya gradient.
Yang agak asing mungkin di telinga kita, loss function. Apa itu loss function? loss function adalah suatu fungsi yang menunjukkan sebearapa buruk prediksi kita. Dalam machine learning, kita berusaha untuk menimalisir nilai dari loss function ini.
Pada regresi linear, loss function yang umum digunakan adalah error rata-rata kuadrat (mean square error atau MSE) dan inilah yang akan kita pakai. Di sini turunan dari loss function akan menjadi 'kompas' kita dalam menentukan nilai koefisien dan konstanta (nilai-nilai yang dicari dalam regresi linear).
Pada regresi linear, loss function yang umum digunakan adalah error rata-rata kuadrat (mean square error atau MSE) dan inilah yang akan kita pakai. Di sini turunan dari loss function akan menjadi 'kompas' kita dalam menentukan nilai koefisien dan konstanta (nilai-nilai yang dicari dalam regresi linear).
Dimana:
n = banyaknya sampel
yi = variabel terikat ke-i dari sampel
m = koefisien (yang dicari)
xi = variabel bebas ke-i dari sampel
b = konstanta (yang dicari)
Dan kemudian apa itu ordinary gradient descent? Ini adalah algoritma sederhana dimana kita mencari regresi linear dengan koefisien dan konstanta asumsi awal yang kemudian akan di perbaiki berdasarkan 'arahan' dari turunan loss function. Seberapa besar kita 'melangkah' dalam mengikuti 'arahan' ini ditentukan oleh suatu koefisien learning rate.
Kita akan terus mengupdate koefisien dan konstanta dengan mengurangi nilai turunan parsial loss function terhadap masing-masing koefisien dan konstanta. Oleh karena itu, kita akan mencari turunan parsial loss function terhadap koefisien dan terhadap konstanta yang kita cari.
Untuk turunan parsial loss function terhadap koefisien dan
untuk turunan loss fucntion terhadap konstanta. Sehingga rumusan sederhananya dalam 'mengupdate' nilai koefisien dan konstanta adalah
dan
dimana α disitu adalah koefisien learning rate. Kegiatan 'update' ini akan terus dilakukan sampai kondisi yang diinginkan terpenuhi atau sampai beberapa kali iterasi yang dibutuhkan.
Seperti biasa, source code untuk praktek ini sudah di sediakan sekalian dengan contoh datanya. Source code bisa didapatkan di sini dan data di sini. Data yang kita pakai adalah data banyaknya penjualan mobil per minggunya. Kita jalankan dan kita dapatkan hasilnya seperti ini untuk regresi linearnya
dengan grafik perkembangan erronya pada tiap iterasi
Terlihat error menurun drastis di antara iterasi ke-0 dan 200 kemudian dari situ penurunan error tidak signifikan. Dari grafik ini, jika kita ingin mengurangi kerja komputer dengan mengurangi sedikit saja keakuratannya, kita bisa mensetting iterasinya menjadi sekitar 150 kali saja. Sesungguhnya, salah satu faktor yang paling menentukan dalam ordinary gradient descent ini adalah penentuan nilai koefisein learning rate. Di sini kita memakai learning rate 0.0001 (sangat kecil). Dari intuisi kita, sepertinya semakin kecil learning rate semakin baik dengan didukung iterasi yang banyak tapi ternyata tidak. Seandainya learning ratenya kita perbesar menjadi 0.005, maka grafiknya menjadi
dan errornya
Ini merupakan hasil yang lebih baik. Ini membuktikan learning rate yang kecil tidak selalu lebih baik. Learning rate yang paling baik adalah learning rate yang tidak terlalu besar dan tidak terlalu kecil. Cara mencari learning rate yang proporsional seperti ini masih belum saya ketahui. Jika kita perbesar lagi learning ratenya, hasilnya akan tidak beraturan. Silahkan coba sendiri.
Itu tadi sedikit tentang ordinary gradient descent. Sebenarnya algoritma ini bisa dikembangkan lebih baik lagi untuk mengurangi kerja komputer tapi itu tidak dibahas kali ini. Mohon maaf jika ada kekurang dan mohon krisaranya, sekian.
referensi:untuk turunan loss fucntion terhadap konstanta. Sehingga rumusan sederhananya dalam 'mengupdate' nilai koefisien dan konstanta adalah
dan
dimana α disitu adalah koefisien learning rate. Kegiatan 'update' ini akan terus dilakukan sampai kondisi yang diinginkan terpenuhi atau sampai beberapa kali iterasi yang dibutuhkan.
Seperti biasa, source code untuk praktek ini sudah di sediakan sekalian dengan contoh datanya. Source code bisa didapatkan di sini dan data di sini. Data yang kita pakai adalah data banyaknya penjualan mobil per minggunya. Kita jalankan dan kita dapatkan hasilnya seperti ini untuk regresi linearnya
Garis kuning disini sebagai regresi linear dan scatterplot untuk data sampelnya |
dengan grafik perkembangan erronya pada tiap iterasi
Terlihat error menurun drastis di antara iterasi ke-0 dan 200 kemudian dari situ penurunan error tidak signifikan. Dari grafik ini, jika kita ingin mengurangi kerja komputer dengan mengurangi sedikit saja keakuratannya, kita bisa mensetting iterasinya menjadi sekitar 150 kali saja. Sesungguhnya, salah satu faktor yang paling menentukan dalam ordinary gradient descent ini adalah penentuan nilai koefisein learning rate. Di sini kita memakai learning rate 0.0001 (sangat kecil). Dari intuisi kita, sepertinya semakin kecil learning rate semakin baik dengan didukung iterasi yang banyak tapi ternyata tidak. Seandainya learning ratenya kita perbesar menjadi 0.005, maka grafiknya menjadi
dan errornya
Ini merupakan hasil yang lebih baik. Ini membuktikan learning rate yang kecil tidak selalu lebih baik. Learning rate yang paling baik adalah learning rate yang tidak terlalu besar dan tidak terlalu kecil. Cara mencari learning rate yang proporsional seperti ini masih belum saya ketahui. Jika kita perbesar lagi learning ratenya, hasilnya akan tidak beraturan. Silahkan coba sendiri.
Itu tadi sedikit tentang ordinary gradient descent. Sebenarnya algoritma ini bisa dikembangkan lebih baik lagi untuk mengurangi kerja komputer tapi itu tidak dibahas kali ini. Mohon maaf jika ada kekurang dan mohon krisaranya, sekian.
http://mccormickml.com/2014/03/04/gradient-descent-derivation/, diakses pada 23 April 2017
http://deeplearning.net/tutorial/, diakses pada 23 April 2017
mantab.. sekian lama mencari akhirnya nemu tulisan tentang deeplearning yg pake bahasa indonesia.... thanks gan.. lanjutkan berbagi (y)
BalasHapusWah, akhirnya ketemu juga. Artikel yg ngebahas ttg gradient descent pada regresi linear. Udah ngliat video dari coursera tp masih bingung. Makasih byk gan atas pencerahannya :)
BalasHapus