Skip to main content
  1. Belajar/
  2. Machine Learning with Python/
  3. 1. Pengenalan Machine Learning/

Pelatihan Model dan Algoritma Optimasi

39 mins· loading · loading ·
Pengenalan Machine Learning - This article is part of a series.
Part 4: This Article

Pelatihan model merupakan tahap yang sangat penting dalam machine learning. Pelatihan tersebut memungkinkan komputer untuk memahami pola dalam data dan membuat keputusan atau prediksi yang relevan. Proses ini melibatkan sejumlah tahapan, mulai dari persiapan data hingga evaluasi kinerja model. Salah satu aspek terpenting dalam pelatihan model adalah penerapan algoritma optimasi. Algoritma optimasi bertanggung jawab untuk menemukan nilai-nilai parameter model yang meminimalkan fungsi loss. Meskipun terlihat sederhana, masalah optimasi ini bisa menjadi kompleks, terutama ketika kita memiliki model yang besar atau ketika data yang digunakan memiliki karakteristik tertentu.

Pada bagian ini, kita akan mempelajari secara mendalam tentang proses pelatihan model dan fokus pada peran serta tantangan yang dihadapi oleh algoritma optimasi. Dengan memahami konsep dasar pelatihan model dan mengatasi masalah optimasi, pembaca akan memiliki landasan yang kuat untuk mengembangkan model machine learning yang optimal.

A. Tahapan Pelatihan Model
#

Pelatihan model adalah proses yang melibatkan beberapa tahapan penting untuk menghasilkan model yang dapat memberikan prediksi atau klasifikasi yang akurat. Secara ringkas, berikut adalah tahapan-tahapan tersebut:

1. Preprocessing (Pra-pemrosesan) Data
#

Pra-pemrosesan data memainkan peran penting dalam memastikan kebersihan dan konsistensi dataset sebelum memasukkannya ke dalam model. Tahap ini melibatkan pembersihan data dari noise, menangani nilai yang hilang, dan mengonversi data ke format yang dapat diolah oleh model. Transformasi data seperti normalisasi atau standarisasi juga dilakukan untuk memastikan skala yang seragam, memberikan fondasi yang solid bagi model selama pelatihan.

Berikut adalah langkah-langkah pra-pemrosesan data:

  • a. Pembersihan Data: Melakukan identifikasi dan menangani data yang hilang atau tidak valid. Kemudian dilanjutkan dengan Membersihkan noise dan outlier jika diperlukan.
  • b. Transformasi Data: Melakukan transformasi seperti normalisasi atau standarisasi untuk memastikan konsistensi dan stabilitas selama pelatihan.

2. Pembagian Dataset
#

Pembagian dataset menjadi data pelatihan, validasi, dan uji menjadi langkah strategis untuk menghindari overfitting dan memastikan model memiliki kemampuan generalisasi yang baik. Data pelatihan digunakan untuk melatih model, sementara set validasi membantu menentukan hyperparameter yang optimal. Data uji memberikan gambaran akhir tentang seberapa baik model dapat memprediksi data yang tidak terlihat selama pelatihan.

3. Pemilihan Model
#

Memilih model yang tepat merupakan langkah penting dalam pelatihan model. Tahap ini melibatkan pemahaman mendalam tentang jenis masalah yang dihadapi dan karakteristik dataset. Sebagai contoh, permasalahan klasifikasi bisa menggunakan model seperti Naive Bayes dan Structural Vector Machine (SVM), sedangkan permasalahan regresi bisa menggunakan model yang sesuai dengan struktur data dan target.

4. Mendefinisikan Fungsi Loss
#

Fungsi loss menjadi ukuran yang menentukan seberapa baik model dapat memetakan input ke output yang diinginkan. Pemilihan fungsi loss sesuai dengan tipe masalah yang dihadapi, seperti menggunakan mean squared error (MSE) untuk tugas regresi atau cross-entropy untuk klasifikasi. Definisi yang tepat membimbing algoritma optimasi untuk meminimalkan perbedaan antara prediksi dan nilai sebenarnya.

5. Konfigurasi Algoritma Optimasi
#

Dalam tahap konfigurasi algoritma optimasi, kita memilih metode yang akan mengarahkan model untuk menemukan nilai parameter yang optimal. Beberapa algoritma optimasi yang umum digunakan adalah Gradient Descent, Adam, atau RMSprop. Selain itu pengaturan hyperparameter seperti learning rate menjadi faktor penting dalam menentukan kecepatan dan keakuratan konvergensi model.

6. Pelatihan Model
#

Proses pelatihan model menjadi inti dari keseluruhan tahapan ini. Melalui serangkaian iterasi, model terus diperbarui untuk meminimalkan fungsi loss. Pada saat yang sama, evaluasi terhadap set validasi membantu memantau overfitting dan memastikan model dapat beradaptasi dengan variasi dalam data pelatihan dan generalisasi pada data baru.

B. Algoritma Optimasi
#

1. Gradient Descent
#

Gradient Descent (GD) adalah algoritma optimasi yang digunakan untuk mencari nilai minimum dari suatu fungsi objektif. Dalam konteks machine learning, fungsi objektif ini sering kali berupa fungsi loss yang mengukur seberapa jauh prediksi model dari nilai sebenarnya. Tujuan utama GD adalah menemukan kombinasi parameter model yang meminimalkan nilai fungsi loss tersebut.

a. Proses Algoritma
#

  1. Inisialisasi Parameter:

    • Algoritma dimulai dengan menginisialisasi nilai awal untuk setiap parameter model. Inisialisasi ini dapat dilakukan secara acak atau menggunakan nilai-nilai default.
  2. Perhitungan Gradien

    • Setelah inisialisasi, langkah berikutnya adalah menghitung gradien dari fungsi loss terhadap setiap parameter model. Gradien ini memberikan informasi tentang arah dan tingkat kecuraman di mana fungsi loss berubah terhadap perubahan parameter.
  3. Pembaruan Parameter

    • Parameter model diperbarui dengan menggerakkan nilai saat ini ke arah yang berlawanan dengan gradien. Learning rate (tingkat pemelajaran) memainkan peran penting di sini untuk mengatur sejauh apa parameter akan diperbarui pada setiap iterasi.

    Berikut adalah pseudocode dari GD:

    while not converged:
        gradient = hitung_gradien(fungsi_loss, parameter_model)
        parameter_model = parameter_model - learning_rate * gradient
    

b. Apa itu Gradien?
#

Gradien fungsi loss merupakan vektor yang berisi turunan parsial fungsi loss terhadap setiap parameter model. Dalam konteks machine learning, fungsi loss adalah suatu fungsi yang mengukur sejauh mana hasil prediksi model kita berkorelasi dengan nilai sebenarnya (label) dari data pelatihan. Gradien ini memberikan arah dan tingkat pertumbuhan fungsi loss terhadap setiap parameter model, yang sangat penting dalam proses optimasi untuk menemukan parameter yang menghasilkan prediksi yang lebih baik.

Secara matematis, jika kita memiliki fungsi loss \( L(\theta) \), di mana \( \theta \) adalah vektor parameter model, maka gradien fungsi loss (\( \nabla L(\theta) \)) dihitung sebagai:

\[ \nabla L(\theta) = \left[ \frac{\partial L}{\partial \theta_1}, \frac{\partial L}{\partial \theta_2}, \ldots, \frac{\partial L}{\partial \theta_n} \right] \]

Di sini, \( \frac{\partial L}{\partial \theta_i} \) adalah turunan parsial dari fungsi loss terhadap parameter \( \theta_i \). Gradien ini memberikan informasi tentang seberapa cepat dan ke arah mana kita harus memperbarui setiap parameter untuk mengurangi nilai fungsi loss.

Dalam konteks algoritma optimasi seperti Gradient Descent (GD), Stochastic Gradient Descent (SGD), atau Mini-Batch Gradient Descent (MBGD), kita menggunakan gradien ini untuk memperbarui parameter model pada setiap iterasi:

\[ \theta \leftarrow \theta - \alpha \nabla L(\theta) \]

Di sini, \( \alpha \) adalah learning rate yang menentukan seberapa besar langkah perubahan parameter pada setiap iterasi. Dengan memperbarui parameter berdasarkan arah dan tingkat pertumbuhan yang diberikan oleh gradient, kita berharap untuk mendekati nilai minimum fungsi loss dan meningkatkan kualitas prediksi model.

c. Learning Rate
#

Learning rate (\(\alpha\)) adalah hyperparameter yang menentukan seberapa besar langkah pemelajaran yang diambil setiap kali parameter diperbarui. Jika learning rate terlalu besar, algoritma mungkin melompati titik minimum, sedangkan jika terlalu kecil, konvergensi akan memerlukan waktu yang sangat lama atau bahkan dapat terjebak pada minimum lokal.

d. Tipe Gradient Descent
#

  1. Batch Gradient Descent (BGD)

    • Batch Gradient Descent (BGD) bekerja dengan cara menghitung gradien terhadap seluruh dataset pada setiap iterasi. Meskipun akurat, BGD mungkin tidak efisien untuk dataset besar karena mengharuskan perhitungan pada seluruh dataset.
  2. Stochastic Gradient Descent (SGD)

    • Stochastic Gradient Descent (SGD) bekerja dengan cara menghitung gradien dan memperbarui parameter untuk setiap sampel data secara acak. Meskipun lebih efisien, SGD memiliki fluktuasi yang tinggi pada arah optimasi karena pembaruan dilakukan per sampel.
  3. Mini-Batch Gradient Descent (MBGD)

    • Mini-Batch Gradient Descent (MBGD) merupakan kombinasi dari BGD dan SGD, di mana gradien dihitung dan parameter diperbarui dengan mempertimbangkan sejumlah kecil sampel (mini-batch). Hal ini mengkombinasikan efisiensi SGD dengan stabilitas BGD.

e. Konvergensi
#

Algoritma Gradient Descent dianggap telah konvergen ketika perubahan parameter antar iterasi menjadi sangat kecil atau ketika fungsi loss mencapai nilai minimum.

f. Simulasi GD
#

Pada bagian ini, kita akan mencoba melakukan simulasi perhitungan GD menggunakan sebuah fungsi loss yang sederhana. Misal, kita memiliki sebuah fungsi loss sederhana yaitu \(L(x)=x^2+5\). Parameter \(x\) dalam hal ini adalah parameter dari sebuah model sederhana yang digunakan. Tujuan dari GD adalah mengupdate parameter \(x\) secara bertahap agar nilai dari fungsi loss minimal. Kita akan menggunakan formula GD berikut untuk mengupdate parameter \(x\) pada setiap iterasi:

\[ x \leftarrow x - \alpha \nabla L(x) \]

Karena fungsi loss \(L(x)\) sederhana, kita dapat mencari gradien dari fungsi ini secara analitik. Gradien dari fungsi loss ini adalah \(\nabla L(x)=2x\). Untuk learning rate, kita bisa menggunakan sembarang nilai yang cukup kecil. Dalam hal ini, kita menggunakan learning rate \(\alpha=0.1\). Nilai \(x\) kita inisialisasi dengan sembarang nilai.

Berikut adalah simulasinya:

Iterasi \(x\) Loss
1 7.168730399387945 85.29796177985757
2 5.734984319510356 56.39069553910885
3 4.5879874556082845 37.89004514502966
4 3.6703899644866276 26.04962889281898
5 2.9363119715893022 18.47176249140415
6 2.3490495772714417 13.621927994498655
7 1.8792396618171534 10.518033916479139
8 1.5033917294537227 8.53154170654665
9 1.2027133835629782 7.260186692189855
10 0.9621707068503825 6.446519483001508
11 0.769736565480306 5.925772469120965
12 0.6157892523842448 5.592494380237417
13 0.4926314019073958 5.379196403351947
14 0.39410512152591665 5.242685698145246
15 0.3152840972207333 5.155318846812958
16 0.25222727777658666 5.099404061960293
17 0.20178182222126934 5.063618599654587
18 0.16142545777701547 5.040715903778936
19 0.12914036622161237 5.026058178418519
20 0.1033122929772899 5.016677234187852

Pada tabel di atas, terlihat bahwa nilai fungsi loss pada iterasi ke-\(1\) cukup besar, yaitu \(85.29796177985757\). Seiring bertambahnya iterasi, GD akan melakukan update terhadap nilai \(x\) agar nilai fungsi loss menurun. Pada iterasi ke-\(20\), yaitu saat nilai \(x=0.1033122929772899\), nilai fungsi loss sudah cukup rendah yaitu \(5.016677234187852\) .

Untuk lebih memahami, silahkan perhatikan animasi berikut:

Sebenarnya, untuk kasus sederhana seperti di atas, jawabannya bisa diselesaikan secara analitik. Nilai \(x\) yang membuat fungsi loss menjadi minimum bisa dicari dengan menyelesaikan persamaan \(\nabla L(x)=0\) atau \(2x=0\). Dari persamaan ini kita tahu bahwa, fungsi loss akan minimum pada \(x=0\). Hal ini senada dengan simulasi di atas, semakin bertambah iterasi, nilai \(x\) semakin mendekati 0.

Simulasi di atas dilakukan hanya sebagai ilustrasi bagaimana algoritma GD bekerja untuk mempermudah pemahaman. Akan tetapi, pada kebanyakan kasus nyata, relasi antar parameter model umunya sangat kompleks. Kompleksitas tersebut berimbas pada kompleksitas fungsi loss. Hal tersebut memiliki 2 masalah. Pertama, turunan parsial dari fungsi loss tidak dapat diselesaikan secara analitik. Kedua, solusi untuk persamaan \(\nabla L(\theta)=0\) tidak dapat diselesaikan secara analitik. GD sangat berperan untuk menyelesaikan permasalah yang kedua. Sedangkan masalah yang pertama, umumnya diselesaikan menggunakan metode automatic differentiation.

2. Momentum Optimization
#

a. Definisi Momentum Optimization
#

Momentum Optimization adalah varian dari algoritma Gradient Descent yang dirancang untuk meningkatkan kecepatan konvergensi dan mengatasi masalah osilasi atau terjebak di sekitar minimum lokal. Konsep utama di balik Momentum Optimization adalah memberikan “momentum” atau kecepatan pada pergerakan parameter model, mirip dengan gerakan benda yang memiliki massa.

Momentum Optimization merupakan pengembangan yang signifikan dari algoritma Gradient Descent dengan menambahkan aspek momentum untuk meningkatkan kecepatan dan stabilitas konvergensi. Dengan penggunaan momentum, algoritma ini memberikan solusi yang lebih efisien untuk pelatihan model, terutama pada masalah kompleks dengan variasi lanskap yang sulit.

b. Proses Algoritma
#

  1. Inisialisasi Parameter

    Seperti pada Gradient Descent, algoritma dimulai dengan inisialisasi nilai awal untuk setiap parameter model.

  2. Perhitungan Gradien

    Gradien dari fungsi loss terhadap parameter model dihitung seperti pada Gradient Descent.

  3. Pembaruan Momentum

    Algoritma Momentum Optimization memperkenalkan sebuah variabel baru, yaitu momentum (\(\gamma\)). Variabel ini merupakan hyperparameter yang menentukan seberapa besar momentum yang harus diberikan pada pergerakan parameter model dari iterasi sebelumnya. Momentum dihitung sebagai penggandaan momentum sebelumnya dengan gradien saat ini, ditambah dengan learning rate.

    Pseudocode Momentum Optimization:

    momentum = γ * momentum_sebelumnya + learning_rate * gradient
    
  4. Pembaruan Parameter

    Parameter model diperbarui dengan mempertimbangkan momentum yang baru. Momentum memberikan percepatan pada pergerakan parameter, memungkinkan algoritma untuk “menggulir” melalui daerah yang datar atau melewati celah sempit.

    Pseudocode Momentum Optimization (lanjutan):

    parameter_model = parameter_model - momentum
    

c. Kelebihan Momentum Optimization
#

  1. Pencegahan Osilasi:

    Momentum membantu mencegah osilasi atau pergerakan yang tidak perlu di sekitar minimum lokal, memungkinkan algoritma untuk tetap konsisten pada arah optimasi yang benar.

  2. Percepatan Konvergensi

    Dengan memberikan momentum pada pergerakan parameter, Momentum Optimization dapat meningkatkan kecepatan konvergensi model, terutama pada daerah yang datar atau datar-curam.

d. Tipe Momentum
#

  1. Standard Momentum

    Menggunakan konsep momentum secara langsung seperti dijelaskan di atas.

  2. Nesterov Accelerated Gradient (NAG)

    Varian dari Momentum Optimization yang memperbarui gradien berdasarkan posisi yang diperkirakan di masa depan. NAG sering memberikan kinerja yang lebih baik karena menghitung gradien pada posisi yang diperkirakan setelah momentum diaplikasikan.

e. Learning Rate Schedule
#

Momentum Optimization sering dikombinasikan dengan penjadwalan learning rate, di mana learning rate dapat berkurang seiring berjalannya waktu atau mengikuti pola tertentu untuk meningkatkan stabilitas dan akurasi konvergensi.

g. Simulasi Momentum Optimization
#

Untuk mempermudah dalam memahami konsep Momentum Optimization, kita akan melakukan simulasi menggunakan contoh fungsi loss yang sama pada contoh Gradient Descent yaitu \(x^2 + 5\). Berikut adalah simulasinya:

Iterasi x loss
1 7.076424541883493 55.075784296971
2 4.068944111583008 21.556306183186035
3 0.5484229019959694 5.30076767943368
4 -2.7297307670315587 12.451430060478701
5 -5.134122915750022 31.35921811402951
6 -6.271251266446635 44.32859244690852
7 -6.0404165287842595 41.486631841210084
8 -4.62458195913127 26.386758296722412
9 -2.425414454617324 10.882635276666651
10 0.0389191903686914 5.001514703378954

Pada contoh simulasi di atas, kita menggunakan learning_rate yang sama dengan contoh simulasi pada Gradient Descent yaitu sebesar \(\alpha=0.1\). Sedangkan variabel momentum yang digunakan adalah \(\gamm=0.9\). Terlihat bahwa Momentum Optimization konvergen lebih cepat dibandingkan dengan Gradient Descent. Momentum Optimization hanya membutuhkan 10 iterasi untuk mencapai nilai loss yang sama.

Berikut adalah animasi dari simulasi di atas.

3. RMSProp (Root Mean Square Propagation)
#

a. Definisi RMSProp
#

RMSProp (Root Mean Square Propagation) adalah algoritma optimasi yang dikembangkan untuk mengatasi beberapa masalah yang dihadapi oleh algoritma Gradient Descent standar. Algoritma ini pertama kali diusulkan oleh Geoffrey Hinton dalam kuliah online di Coursera. RMSProp memiliki kemampuan untuk menyesuaikan learning rate secara adaptif untuk setiap parameter.

b. Proses Algoritma
#

  1. Inisialisasi Parameter

    Seperti dalam algoritma optimasi lainnya, RMSProp dimulai dengan menginisialisasi nilai awal untuk setiap parameter model.

  2. Inisialisasi Variabel RMS (Root Mean Square)

    RMSProp mempertahankan variabel \(S\) yang merepresentasikan nilai rata-rata kuadrat dari gradien sebelumnya. Variabel ini diinisialisasi dengan nilai nol.

  3. Perhitungan Gradien

    Gradien dari fungsi loss terhadap parameter model dihitung seperti pada algoritma optimasi lainnya.

  4. Pembaruan Variabel RMS

    Variabel RMS (\(S\)) diperbarui dengan mempertimbangkan rata-rata kuadrat gradien saat ini. Hal ini dilakukan dengan memperkenalkan faktor pengurangan (\(\beta\)), yang biasanya bernilai antara 0.9 dan 0.999.

    Pseudocode Pembaruan Variabel RMS:

    S = beta * S + (1 - beta) * (gradient^2)
    
  5. Pembaruan Parameter

    Parameter model diperbarui dengan learning rate yang telah disesuaikan berdasarkan nilai RMS. Variabel \(S\) yang lebih besar menyebabkan learning rate yang lebih kecil dan sebaliknya.

    Pseudocode Pembaruan Parameter:

    parameter_model = parameter_model - (learning_rate / sqrt(S + epsilon)) * gradient
    

    di mana \(epsilon\) adalah nilai kecil yang ditambahkan untuk menghindari pembagian dengan nol.

c. Kelebihan RMSProp
#

  1. Adaptabilitas Learning Rate

    RMSProp secara efektif mengatasi masalah learning rate yang tetap pada Gradient Descent. Dengan mengadaptasi learning rate untuk setiap parameter, RMSProp memungkinkan konvergensi yang lebih cepat dan stabil.

  2. Penanganan Variasi Skala

    RMSProp memperlakukan setiap parameter secara independen, mengatasi masalah di mana beberapa parameter memiliki gradien yang sangat besar atau sangat kecil, sehingga mempengaruhi konvergensi.

RMSProp adalah algoritma optimasi yang efektif untuk pelatihan model dalam konteks machine learning. Dengan menyesuaikan learning rate berdasarkan riwayat gradien, RMSProp mampu menghadapi tantangan kompleksitas berbagai masalah dan memberikan konvergensi yang lebih baik.

4. Adam (Adaptive Moment Estimation)
#

1. Definisi Adam
#

Adam (Adaptive Moment Estimation) adalah algoritma optimasi yang menggabungkan konsep dari RMSProp dan Momentum Optimization. Algoritma ini dikembangkan oleh Diederik P. Kingma dan Jimmy Ba pada tahun 2014. Adam diakui karena kemampuannya menyesuaikan learning rate secara adaptif dan efisien mengatasi tantangan seperti masalah osilasi dan ketidakseimbangan antara variabel gradien.

b. Proses Algoritma
#

  1. Inisialisasi Parameter

    Seperti dalam algoritma optimasi lainnya, Adam dimulai dengan menginisialisasi nilai awal untuk setiap parameter model.

  2. Inisialisasi Moment Pertama (\(m\)) dan Moment Kedua (\(v\))

    Adam mempertahankan dua momen: moment pertama (\(m\)) yang mirip dengan Momentum Optimization, dan moment kedua (\(v\)) yang mirip dengan RMSProp. Kedua momen diinisialisasi dengan nilai nol.

  3. Perhitungan Gradien

    Gradien dari fungsi loss terhadap parameter model dihitung seperti pada algoritma optimasi lainnya.

  4. Pembaruan Moment Pertama dan Moment Kedua

    Moment pertama (\(m\)) dan moment kedua (\(v\)) diperbarui dengan mempertimbangkan gradien saat ini. Ini dilakukan dengan memperkenalkan faktor pengurangan (\(\beta_1\) dan \(\beta_2\)), yang biasanya bernilai antara 0.9 dan 0.999.

    Pseudocode Pembaruan Moment Pertama dan Moment Kedua:

    m = beta1 * m + (1 - beta1) * gradient
    v = beta2 * v + (1 - beta2) * (gradient^2)
    
  5. Koreksi Bias

    Karena momen pertama (\(m\)) dan momen kedua (\(v\)) diinisialisasi dengan nilai nol, terdapat bias ke arah nol pada iterasi awal. Untuk mengatasi ini, Adam melakukan koreksi bias pada momen pertama dan kedua.

    Pseudocode Koreksi Bias:

    m_hat = m / (1 - beta1^t)
    v_hat = v / (1 - beta2^t)
    

    di mana \(t\) adalah index iterasi.

  6. Pembaruan Parameter

    Parameter model diperbarui dengan learning rate yang telah disesuaikan berdasarkan momen pertama dan kedua.

    Pseudocode Pembaruan Parameter:

    parameter_model = parameter_model - (learning_rate / (sqrt(v_hat) + epsilon)) * m_hat
    

    di mana \(epsilon\) adalah nilai kecil yang ditambahkan untuk menghindari pembagian dengan nol.

c. Keuntungan Adam
#

  1. Adaptabilitas Learning Rate

    Adam dapat mengadaptasi learning rate secara adaptif untuk setiap parameter model, memastikan konvergensi yang baik pada berbagai jenis masalah.

  2. Penanganan Variasi Skala dan Osilasi

    Adam mengatasi masalah ketidakseimbangan variabel gradien dan masalah osilasi yang mungkin terjadi pada beberapa algoritma optimasi.

  3. Komputasi yang Efisiens

    Meskipun kompleks, implementasi Adam dapat dilakukan dengan efisien, dan algoritma ini sering kali memberikan hasil yang baik dengan konfigurasi default.

Adam telah menjadi salah satu algoritma optimasi yang populer dalam pelatihan model machine learning karena kombinasi adaptabilitas learning rate, koreksi bias, dan efisiensi komputasinya.

Pengenalan Machine Learning - This article is part of a series.
Part 4: This Article