Cara menggunakan python dummy function

Pada tutorial Mengenal Fungsi Continue dan Pass Pada Pemrograman Python kali ini kita akan belajar fungsi continue dan pass dalam fungsi perulangan, pada perulangan continue berfungsi untuk mengulang perulangan, maksudnya yaitu program yang berada di bawah statement tidak akan dieksekusi, kemudian pass merupakan sebuah katakunci kosong yang berfungsi untuk mengkonstruksi sebuah looping, dan pass juga berfungsi untuk pengecekan apakah statement berjalan atau tidak, pass tersebut juga bisa kita gunakan untuk dummy looping, dummy if, dan dummy function.

Biar teman-teman lebih paham tentang Fungsi Continue dan Pass Pada Pemrograman Python kita akan membuat sebuah contoh continue seperti dibawah ini :

foriinrange[1,5]:

    ifiis2:

        print["nilai",i,"ditemukan"]

        continue

        print["nilai setelah continue"]# nilai tidak akan dicetak jika proses terpenuhi

    print["nilai saat ini adalah",i]

# hasil :

# nilai saat ini adalah 1

# nilai 2 ditemukan

# nilai saat ini adalah 3

# nilai saat ini adalah 4

ket :

pada script diatas bisa kita lihat bahwa nilai yang terdapat setelah continue tidak akan diproses, dan nilai tersebut akan selalu di ulang sampai proses berakhir.

Selanjutnya kita akan membuat contoh jika menggunakan fungsi dari pass untuk scriptnya seperti dibawah ini :

foriinrange[1,5]:

    ifiis2:

        print["nilai",i,"ditemukan"]

        pass

        print["nilai setelah pass"]

    print["nilai saat ini adalah",i]

# hasil :

# nilai saat ini adalah 1

# nilai 2 ditemukan

# nilai setelah pass

# nilai saat ini adalah 2

# nilai saat ini adalah 3

# nilai saat ini adalah 4

ket :

Pada script diatas bisa kita lihat bahwa nilai setelah pass masih dapat ditampilkan, dan pass tersebut tidak melakukan fungsi apapun hanya, fungsi pass untuk mengkonstruksi sebuah loop.

Oke teman-teman itulah pembahasan kita tentang Mengenal Fungsi Continue dan Pass Pada Pemrograman Python.

Semoga bermanfaat.

Terima kasih.

Pesan sponsor: seluruh konten dan kode yang saya tulis akan selalu gratis dan dapat digunakan oleh siapa saja. Apabila Anda merasa terbantu, dukung saya melalui laman Saweria berikut. 10% dari dukungan Anda akan saya sumbangkan melalui Kitabisa. Terima kasih :]

Banyak orang familiar dengan buzzword machine learning. Bagaimana dengan neural network? Kata-kata ini terdengar sangat menyeramkan. Bagi saya pribadi, kata “neural network” selalu diikuti oleh bayangan akan meme galaxy brain, dan membuat bulu kuduk merinding saking seramnya.

“Iya, jadi untuk memprediksi gambar kucing ini, kami menggunakan neural network dengan 10 hidden layer”

For good reasons though. Di zaman kelimpahan data dan kekuatan komputasi hari ini, neural network telah merasuki kehidupan kita sehari-hari. Banyak produk teknologi yang menjadi jauh lebih baik karena neural network, seperti penerjemahan dari satu bahasa ke bahasa lainnya, hingga pengenalan objek berbasis computer vision. Benar-benar seperti magic…

…by a dummy?

Bukannya biasanya for dummies? Anda tidak salah baca, kok. Tulisan ini dipersembahkan oleh yours truly, yang baru saja mengenal neural network kemarin sore dari sebuah kursus daring. Selain itu saya memiliki latar belakang geosains. Iya, pemahaman kalkulus saya bisa dibilang pas-pasan.

Harapannya, saya bisa mengenalkan konsep ini dengan bahasa yang mudah dimengerti, bahkan untuk orang yang awam kalkulus sekalipun.

Seperti biasa, kita mulai dengan disclaimer: saya tidak memiliki pendidikan formal dalam bidang neural network. Namun, saya tersertifikasi dalam mempelajari bidang keilmuan yang obskur [geosains] dan kompleks [sistem energi]. Trust me, I am doing my best in simplifying the concepts!

Mohon beritahu saya apabila saya keliru/salah menginterpretasikan konsep-konsep dasar neural network, ya.

…bagian 1/n?

Tulisan ini rencananya ingin saya rampungkan dalam 2–3 seri. Seri pertama [tulisan ini] mengenalkan konsep dasar neural network dengan contoh 1 node. Kemudian di seri-seri selanjutnya, saya akan mencoba mengenalkan deep neural network [“deep learning”], serta ingin menggunakan neural network dalam kasus geosains.

Ketertarikan saya muncul karena solusi juara dari kompetisi yang pernah saya ikuti menggunakan neural network untuk melakukan prediksi. Saat ini saya beri judul 1/n dulu. Kalau ada waktu, semoga saya bisa melengkapi jadi 2–3 bagian ya.

Note: untuk teman-teman yang sibuk, ada bagian TLDR di akhir tulisan!

Suatu node neural network

Sebelum masuk ke neural network yang berlapis-lapis, kita akan memulai petualangan dari unit terkecil suatu neural network yaitu node. Dalam tulisan ini, kita akan menjadikan regresi logistik sebagai contoh, dan melihat implementasinya melalui kacamata neural network.

Berapa lapis???????

Terdapat beberapa konsep yang harus kita pahami dari contoh satu node ini, yaitu:

  • Apa itu “node”, “Linear Function” [beserta “Weight” dan “bias”-nya], serta “Activation Function”
  • “Forward propagation”
  • Apa itu “loss” dan “cost function”
  • “Backpropagation” dan “gradient descent” untuk mencari parameter optimal
  • Apa itu “update parameter”, “learning rate”, dan “iterasi”

Harus diakui bahwa kata-kata di atas terlalu fancy daripada yang seharusnya. Saya akan berusaha dengan baik untuk menjelaskannya dengan bahasa yang sederhana. Kalau Anda kesulitan mencerna tulisan lengkap saya, semoga paling tidak Anda bisa mengenal jargon-jargon di atas ini. Bear with me.

Apa itu Node?

Mari kita mulai dengan unit terkecil dari sebuah neural network yaitu node. Masukkan input [biasanya dilambangkan dengan x] ke dalam suatu node, kemudian dapatkan output yang Anda inginkan [biasanya dilambangkan dengan yhat].

Saya akan menggunakan regresi logistik untuk memprediksi hasil biner ya/tidak sebagai contoh. Dalam hal ini saya akan menggunakan contoh yang spesifik pada domain geosains, yaitu memprediksi litologi batupasir [batupasir/bukan batupasir] dengan menggunakan data log sumur triple combo [GR, NPHI, RHOB, LLD, LLS].

Tetapi menurut saya contoh ini cukup umum, jadi semoga pembaca non-geosains pun dapat mengikuti.

Masukkan variabel-variabel input ke dalam suatu node, dan dapatkan output. Dalam hal ini adalah prediksi yang kita inginkan.

Untuk mempercepat komputasi, umumnya variabel yang akan digunakan dalam prediksi dikemas dalam vektor. Pada umumnya, vektor akan dilambangkan dengan huruf kapital seperti di bawah ini:

Implementasi neural network dengan vektor

Suatu node pada umumnya memiliki dua komponen, yaitu fungsi linear dan fungsi aktivasi. Vektor input X akan kita masukkan ke dalam fungsi linear dan aktivasi hingga akhirnya menghasilkan prediksi yang kita inginkan [Yhat].

Fungsi-fungsi dalam sebuah node neural network

Fungsi Linear

Apabila x adalah variabel input dan Z adalah target yang ingin kita prediksi, maka fungsi regresi linearnya adalah:

Z = W x + b

Intinya, kita ingin mentranformasi variabel input x secara linear agar kita mendapatkan variabel target Z.

Terdapat dua komponen penting dalam fungsi linear, yaitu W [weight] dan b [bias]. Dua istilah ini adalah istilah yang lebih generalized dibanding istilah asli dalam literatur regresi, dan lebih umum digunakan dalam konteks neural network:

  • ‘Weight’ adalah padanan dari ‘parameter’ dalam literatur regresi
  • ‘bias’ adalah padanan dari ‘intercept’ dalam literatur regresi
  • Dalam konteks neural network dan literatur regresi, input dari fungsi linear umumnya dilambangkan dengan x
  • Dalam konteks neural network, output dari fungsi linear umumnya dilambangkan dengan Z. Dalam literatur regresi umumnya keluaran dilambangkan dengan y.

Dalam regresi maupun neural network, kita ingin mencari W dan b yang dapat meraih loss [error] seminimal mungkin dalam training data. Bagaimana kita menentukan W dan b yang tepat? Simpan sebentar pikiran tersebut, karena pencarian nilai W dan b yang paling pas adalah konsep penting dalam neural network.

Fungsi Aktivasi

Pada tahapan sebelumnya, fungsi linear akan menghasilkan nilai kontinu. Padahal, dalam kasus ini, yang kita ingin prediksi adalah nilai probabilitas yang berkisar di antara 0 sampai 1. Lalu bagaimana cara kita mentransformasi nilai kontinu dari fungsi linear menjadi probabilitas?

Dalam kasus ini, fungsi aktivasi berupa fungsi sigmoid mentransformasi keluaran dari fungsi linear [Z] menjadi suatu nilai antara 0 sampai 1 secara nonlinear [Sumber: neuronactivator.com]

Fungsi aktivasi digunakan untuk mentransformasi keluaran dari fungsi linear menjadi non-linear. Dengan fungsi aktivasi yang tepat, neural network dapat meng-aproksimasi berbagai macam data generating process.

Dalam kasus ini, kita membutuhkan fungsi sigmoid sebagai fungsi aktivasi terakhir, karena yang ingin kita prediksi adalah probabilitas [antara tidak/ya; antara 0 sampai 1] apakah suatu interval memiliki litologi batupasir/bukan.

Beberapa jenis fungsi aktivasi yang umum digunakan dalam neural network:

  • sigmoid [yang kita gunakan dalam contoh ini]
  • tanh
  • ReLU
  • dan lain-lain

Keluaran dari fungsi aktivasi umumnya dilambangkan dengan A.

Forward propagation

Forward propagation adalah istilah fancy untuk proses penghitungan output A dengan input X melalui fungsi linear dan fungsi aktivasi pada sebuah node. Kalau kata om Jujuk Margono, #udahgituaja…

Proses mencari output A dari input berupa X inilah yang disebut forward propagation

Satu hal yang perlu diingat adalah proses ini akan dilakukan secara berulang hingga neural network kita mendapatkan nilai W dan b yang optimal.

Pada iterasi pertama perhitungan, kita belum memiliki nilai W dan b sama sekali, padahal proses forward propagation membutuhkan nilai W dan b supaya bisa berjalan. Praktek yang umum dilakukan pada iterasi pertama adalah menginisiasi kedua parameter tersebut dengan nilai berikut:

  • W diinisialisasi dengan nilai/vektor random
  • b diinisialisasi dengan nol [0]

Penting untuk memastikan bahwa nilai W: [1.] diinisasi secara random; dan [2.] memiliki nilai awal yang berbeda di setiap node; untuk memastikan agar neural network kita bisa “break the symmetry”. Sedangkan, nilai b cukup diinisialisasi dengan 0 di semua node. Kita akan bahas lebih jauh tentang hal ini di tulisan selanjutnya, ketika kita memiliki beberapa node.

Untuk kali ini, yang penting kita tahu bagaimana nilai W dan b diinisiasi pada iterasi pertama forward propagation.

Cost function

Loss function

Pada akhir dari proses forward propagation, kita akan mendapatkan suatu output dari fungsi aktivasi yang dilambangkan dengan A. Pada contoh satu node kita, nilai A ini adalah Yhat, atau hasil dari prediksi kita.

Proses mencari output A dari input berupa X inilah yang disebut forward propagation

Seperti proses machine learning pada umumnya, kita ingin mengukur seberapa jauh hasil prediksi kita [A] menyimpang dari ground truth [biasa dilambangkan dengan Y]. Untuk itu, kita harus mengukur loss, yaitu seberapa jauh perbedaan antara Yhat [hasil prediksi] dan Y [nilai yang benar] untuk setiap data point pada training set.

Loss mengukur perbedaan antara hasil prediksi kita [Yhat; dalam gambar ini Y_pred] dan nilai sebenarnya [Y] untuk tiap satu data point dalam training set [Sumber: deeplearningdemystified.com]

“Loss function” yang umum digunakan pada prediksi biner [0 dan 1] dalam konteks neural network adalah fungsi log loss. Kalau dilihat dari fungsi di bawah ini, ketika nilai Y dan Ypred sama [prediksi benar], maka nilai loss = 0. Sebaliknya, apabila Y dan Ypred berbeda [prediksi salah], maka nilai loss akan menjadi besar.

Fungsi log loss. Dalam persamaan di atas, nilai prediksi kita dilambangkan sebagai A [output dari fungsi aktivasi]. [Sumber: Neural Network and Deep Learning oleh deeplearning.ai]

Dari loss function ke cost function

But wait… bukannya tadi kita membahas “cost function” ya? Kok jadi bahas loss function? Seperti yang sudah saya bahas sebelumnya, loss function hanya dijalankan untuk satu data point. Cost function adalah penjumlahan nilai loss function pada semua data point pada training set. Dalam neural network, cost function umumnya dilambangkan dengan J.

Bagaimana cara mendapatkan nilai cost function? Tinggal jumlahkan nilai loss function pada semua training data [Sumber: Neural Network and Deep Learning oleh deeplearning.ai]

Dengan penjelasan di atas, objektif dari suatu neural network adalah memperkecil nilai cost function hingga seminimal mungkin. Jadi, parameter apa saja yang mempengaruhi nilai cost function? Bagan di bawah ini menjabarkan proses forward propagation hingga mencapai penghitungan cost function.

Proses lengkap forward propagation. Ya masa train dataset nya yang kita ubah untuk meminimalisir cost function??

Dari bagan di atas, dapat disimpulkan bahwa kita dapat meminimalisir cost function dengan cara mengubah nilai W dan b.

Backpropagation

Perhatian: menurut saya, backpropagation adalah bagian yang paling “kalkulus” dibanding konsep-konsep lainnya. Kalau Anda awam kalkulus [seperti saya] dan sulit memahami bagian ini, hal tersebut wajar. Yang penting, Anda memahami ide besar dari backward propagation. Again, bear with me.

Sebelum memulai membaca bagian backward propagation, saya sarankan untuk break sejenak sambil menonton video Pingu berikut ini

Hubungan antara cost function dan parameter W dan b

Dari bagian sebelumnya, dalam membangun neural network, kita ingin meminimalisir nilai J. Dalam bagan di bawah, sudah jelas bahwa kita bisa meminimalisir nilai J dengan cara mengubah nilai W dan b.

Proses lengkap forward propagation

Supaya mempermudah penjelasan, kita dapat memvisualisasikan hubungan antara nilai J dengan W dan b sebagai berikut.

Ilustrasi hubungan antara J dengan W dan b

Permasalahan ini terlihat sepele untuk manusia: “kalau kondisinya seperti di atas, ‘ya tinggal geser saja nilai W dan b ke kanan sampai di lembahnya”. Namun, komputer tidak akan bisa memahami instruksi seperti ini. Bagaimana cara merumuskan permasalahan ini secara matematis, supaya komputer bisa mengerti?

Turunan, dan proses backpropagation

Slope dari pergeseran yang kita inginkan bisa didapatkan secara matematis dengan menghitung turunan fungsi J terhadap W [dan/atau b]. Hal ini umumnya direpresentasikan oleh dJ/dW, artinya turunan fungsi J terhadap parameter W.

Slope dapat dirumuskan secara matematis sebagai turunan fungsi J terhadap fungsi W [dJ/dW]

Untuk mendapatkan dJ/dW dan dJ/db, kita harus tarik mundur ke belakang, dan melalui dJ/dA dan dA/dZ terlebih dahulu seperti bagan di bawah ini. Proses inilah yang disebut dengan backpropagation.

Backpropagation untuk menemukan slope J terhadap W dan J terhadap b. Harus melalui dJ/dA dan dA/dZ

Note: Buat yang awam kalkulus, telan saja ya hal ini… Yang saya ingat dari bangku kuliah juga cuma ‘turunan itu slope’. Tertanda, saya yang kalkulus-nya BC dua semester berturut-turut!

Lalu bagaimana cara menggunakan turunan hingga mencapai titik minimum? Please welcome, the gradient descent algorithm.

Algoritma gradient descent

“Gradient descent” secara harfiah dapat diartikan dengan “turun dengan gradien/slope”.

Dengan menggunakan slope yang sudah kita dapatkan dari backpropagation, dikalikan dengan suatu faktor yang disebut dengan “learning rate”, kita update nilai parameter W dan b supaya mendekati nilai minimum J. Proses inilah yang disebut dengan gradient descent.

Satu iterasi gradient descent. Tujuan: mendekat ke nilai minimum J

Seperti kita lihat pada contoh di atas, satu iterasi belum tentu cukup untuk mencapai nilai minimum J. Oleh karena itu, proses forward propagation → backpropagation → update parameter W dan b ini harus dilakukan dalam beberapa iterasi [umumnya ribuan kali].

Lakukan hal ini dalam beberapa iterasi [ribuan?] hingga mendekati nilai J minimum

Proses konvergensi menuju nilai minimum J, yang melalui beberapa iterasi perubahan nilai W, dapat divisualisasikan dalam animasi di bawah ini.

[Sumber: The Making Of… a Data Scientist]

Iterasi gradient descent kita lakukan sekaligus untuk nilai W dan b. Sebelumnya saya selalu menggunakan visualisasi terpisah untuk J terhadap W dan J terhadap b, masing-masing dalam 2 dimensi. Kalau divisualisasikan secara 3 dimensi, kira-kira dapat dilihat pada gambar di bawah ini. Keren, ya?

[Sumber: Hakob Avjan]

Melakukan Prediksi pada Data Baru

Setelah beberapa iterasi, neural network kita akan menemukan parameter W dan b yang optimum, di mana nilai cost function J berada pada titik minimum. Lalu bagaimana cara melakukan prediksi dengan neural network tersebut?

Mudah saja, lakukan forward propagation dengan menggunakan data baru, serta parameter W dan b paling optimum hasil dari iterasi gradient descent.

Melakukan prediksi pada data baru dengan nilai W dan b yang paling bagus

TLDR dan Penutup

So yeah, kalau Anda tidak memiliki waktu untuk membaca keseluruhan tulisan ini, berikut adalah proses yang terjadi dalam proses training satu node neural network:

  • Inisialisasi parameter Weight [W] dengan nilai random dan bias [b] dengan nilai 0
  • Lakukan hal-hal berikut dalam beberapa iterasi hingga mencapai nilai W dan b yang optimum:
  1. Forward propagation: menghitung fungsi linear dan fungsi aktivasi dengan nilai W dan b yang paling update
  2. Menghitung cost function
  3. Backpropagation: mencari slope fungsi J terhadap W dan J terhadap b
  4. Update parameter W dan b [menggunakan slope dari backpropagation dan learning rate]
  • Gunakan parameter W dan b yang optimum untuk melakukan prediksi pada data baru

Iterasi pada training neural network

Phew, semoga Anda bisa memahami konsep dasar neural network setelah membaca tulisan ini ya.

Kali ini, tidak ada kode yang saya tulis untuk membuat postingan ini. Namun saya membuat beberapa ilustrasi di atas dalam Bahasa Indonesia, yang bisa Anda pakai sepuasnya sesuai lisensi GNU GPLv3. Diskusi, kritik, dan saran saya tunggu di kolom komentar. Terima kasih!

Bài mới nhất

Chủ Đề