Anda di halaman 1dari 12

STOCHASTIC RECURSIVE GRADIENT ALGORITHM +

Disusun oleh :

Rafly Putra Santoso 2100846


Ridwan Albana 2105745
Sabila Rosad 2106000

PROGRAM STUDI ILMU KOMPUTER


DEPARTEMEN PENDIDIKAN ILMU KOMPUTER
FAKULTAS PENDIDIKAN MATEMATIKA DAN ILMU PENGETAHUAN
ALAM
UNIVERSITAS PENDIDIKAN INDONESIA
2023
1. PENGERTIAN
SARAHPlus : STOCHASTIC RECURSIVE GRADIENT ALGORITHM +

SARAH, singkatan dari Stochastic Recursive Gradient Algorithm adalah


pendekatan baru dalam penyelesaian masalah optimasi di bidang machine learning.
Metode ini mengenalkan varian dari algoritma gradien stokastik yang mengurangi varians
tanpa memerlukan perhitungan gradien tepat. SARAH bertujuan untuk mengatasi
tantangan optimasi, terutama pada kasus-kasus dengan kumpulan Big Data dan bentuk
fungsinya yang tidak konveks. Algoritma ini menggunakan gradien stokastik secara
rekursif untuk pembaruan parameter secara berulang,sehingga cocok untuk tugas
optimasi online. Selain itu, terdapat varian praktis yang dikenal sebagai SARAH+ yang
lebih mengoptimalkan efektifitas algoritma ini dalam skenario dunia nyata.

Baru-baru ini, varian bernama AL-SARAH juga diperkenalkan. Adaptasi ini


menggunakan gradien stokastik secara rekursif sambil menyesuaikan ukuran langkah
berdasarkan geometri lokal,sehingga menghasilkan kinerja yang lebih baik dalam konteks
optimasi tertentu. Perbedaan SARAH dan SARAH+ adalah sebagai berikut :

● SARAH : Stochastic Recursive Gradient Algorithm : SARAH adalah sebuah


metode dalam pembelajaran mesin yang mengusulkan algoritma gradien rekursif
stokastik (Stochastic Recursive Gradient Algorithm) ini merupakan pendekatan baru
untuk mengatasi masalah finite-sum optimization. SARAH dirancang untuk
meningkatkan konvergensi dari algoritma gradien stokastik tradisional

● SARAH+ : Stochastic Recursive Gradient Algoritm+ : SARAH+ adalah varian


praktis dari SARAH, SARAH+ juga merupakan metode dalam pembelajaran mesin
yang menggunakan algoritma gradien rekursif stokastik. Namun, SARAH+ adalah
bentuk yang lebih ditingkatkan dari SARAH dengan penyesuaian tertentu yang
membuatnya lebih efisien dalam beberapa kasus pengoptimalan.

Kelebihan dan kekurangan

Kelebihan
Kemampuan konvergensi : Algoritma SARAH+ mungkin memiliki kemampuan
konvergensi yang baik dan cepat. Dengan penggunaan metode rekursif dan pembaruan
stokastik,dapat menghasilkan konvergensi yang lebih cepat daripada metode stokastik
sederhana.
Penghematan komputasi : jika algoritma ini dirancang dengan baik,dapat mengurangi
beban komputasi dibandingkan dengan metode stokastik non-rekursif.Hal ini terutama
penting dalam kasus di mana data pelatihan besar.

Kontrol Trade-Off : SARAH+ mungkin memberikan kontrol yang lebih baik terhadap
trade-off antara kecepatan konvergensi dan stabilitas algoritma ,terutama jika algoritma
ini memiliki parameter yang dapat disesuaikan.

Kekurangan
Kompleksitas Implementasi: Algoritma SARAH+ mungkin memerlukan kompleksitas
implementasi yang lebih tinggi dibandingkan dengan algoritma stokastik sederhana. Hal
ini dapat membuatnya sulit untuk diimplementasikan dengan benar.

Parameter Tambahan: Algoritma rekursif sering kali melibatkan pengaturan parameter


tambahan yang kompleks. Memilih parameter yang tepat untuk algoritma ini bisa
menjadi tugas yang rumit.

Keterbatasan Informasi: Jika tidak ada dokumentasi atau penelitian yang memadai
tentang algoritma SARAH+, mungkin sulit untuk menilai kinerjanya atau memahami
kapan sebaiknya digunakan.

Sensitivitas terhadap Pemilihan Model dan Data: Algoritma stokastik bisa sensitif
terhadap pemilihan model dan data. Performanya dapat bervariasi tergantung pada
masalah yang dihadapi.

Overfitting: Algoritma rekursif yang terlalu kuat dapat mengalami risiko overfitting pada
data pelatihan.
2. PSEUDOCODE & ALGORITMA

1. Parameter
Algoritma ini memiliki tiga parameter utama:

- Learning Rate (η): Ini adalah langkah yang diambil dalam arah negatif
gradien untuk meminimalkan fungsi objektif.
- γ (0 < γ ≤ 1): Ini adalah parameter yang digunakan untuk mengontrol
toleransi. Algoritma akan berhenti ketika perbandingan antara kuadrat
norma vektor perbedaan iterasi saat ini dan sebelumnya kurang dari γ.
- Maximum Inner Loop Size (m): Ini adalah jumlah maksimum iterasi yang
diperbolehkan dalam loop dalam setiap iterasi utama. Ini digunakan untuk
mengendalikan overhead komputasi.
2. Inisialisasi: Inisialisasi w˜0 adalah titik awal untuk parameter yang ingin
dioptimalkan.
3. Iterasi Utama
Algoritma memiliki dua loop utama:
a. Loop Pertama (for s = 1, 2, ...): Loop ini digunakan untuk mengulang
seluruh proses iterasi dalam algoritma. Di dalam loop ini:

- w0 = ˜ws−1: Parameter utama diinisialisasi dengan parameter dari


iterasi sebelumnya.
- v0 = 1: v0 adalah faktor yang digunakan dalam pembaruan
parameter.
- Hitung gradien rata-rata: Ini adalah langkah yang menghitung
gradien rata-rata dari semua fungsi objektif pada setiap data
pelatihan.
- w1 = w0 − ηv0: Parameter iterasi pertama dihitung.
b. Loop Kedua (while ...): Ini adalah loop dalam loop pertama yang berjalan
selama dua kondisi terpenuhi:

- kvt−1k2 > γkv0k2: Ini adalah salah satu kondisi berhenti, yang
memeriksa perbandingan antara norma kuadrat vektor perbedaan
iterasi saat ini dan sebelumnya.
- t < m: Ini adalah batasan untuk jumlah iterasi dalam loop kedua.
- Pilih data secara acak: Data latihan ke-i dipilih secara acak dari
data latihan (i diambil dari [n]).
- Hitung gradien aktual (vt): Ini adalah gradien data ke-i pada iterasi
saat ini dikurangi gradien data yang sama pada iterasi
sebelumnya, ditambah dengan vt-1.
- Hitung parameter iterasi selanjutnya (wt+1) dengan gradien vt dan
langkah pembelajaran η.
- Increment t.

4. Setelah loop kedua selesai, w˜s di update dengan wt, yang adalah parameter
iterasi terakhir dalam loop kedua.

5. Algoritma akan kembali ke iterasi utama (loop pertama) dan mengulanginya


sejauh yang diperlukan

Jika diimplementasikan menjadi kode program maka akan menjadi seperti berikut:

function StochasticRecursiveGradient(dataTrain, alpha, maxIter, innerIter,


gammaS, seed)
// fungsi Stochastic Recursive Gradient menerima data pelatihan (dataTrain) dan
beberapa parameter, seperti tingkat pembelajaran (alpha), jumlah iterasi maksimum
(maxIter), jumlah iterasi dalam setiap iterasi utama (innerIter), gammaS, dan seed (untuk
inisialisasi acak).

start_time <- CurrentTime()


// start_time untuk mengukur berapa lama algoritma berjalan.

dataTrain <- ConvertToMatrix(dataTrain)


// data Train diubah menjadi bentuk matriks.

ShuffleData(dataTrain)
// mengacak data pelatihan

theta <- InitializeTheta(dataTrain)


// parameter theta diinisialisasi dengan bantuan fungsi Initialize Theta.
dataTrain <- AddBiasColumn(dataTrain)
inputData <- ExtractInputData(dataTrain)
outputData <- ExtractOutputData(dataTrain)
// data input dan output diambil dari data train.

temporaryTheta <- CreateMatrixWithSize(theta)


temporaryTheta2 <- CreateMatrixWithSize(theta)
temporaryThetaList <- CreateMatrixWithSize(theta)
// beberapa matriks tambahan seperti temporaryTheta, temporaryTheta2, dan
temporaryThetaList diinisialisasi.

gradient <- CreateMatrixWithZeros(theta)


// gradient adalah matriks yang digunakan untuk menyimpan gradien.

rowLength <- GetRowCount(dataTrain)


randRowList <- GenerateRandomRowIndices(rowLength, innerIter)

for iteration in 1 to maxIter


// algoritma melakukan iterasi sebanyak maxIter kali.
temporaryTheta <- CopyTheta(theta)
// gradien dihitung untuk setiap parameter.
error <- ComputeError(inputData, temporaryTheta, outputData)
// gradien dihitung berdasarkan error antara output prediksi dan output sebenarnya.
for column in 1 to NumberOfColumns(temporaryTheta)
//Dalam setiap iterasi utama, algoritma melakukan iterasi inner sebanyak
innerIter kali atau hingga kondisi berhenti terpenuhi.

term <- error * inputData[, column]


gradient[, column] <- ComputeGradientTerm(term) / rowLength
temporaryTheta2[, column] <- temporaryTheta[, column] - (alpha *
gradient[, column])
// parameter theta diperbarui dengan mengurangkan gradien dari
parameter sebelumnya.

firstGradient <- CopyGradient(gradient)


temporaryThetaList <- CopyTheta(temporaryTheta)
iter <- 1
// hasil dari setiap iterasi inner disimpan dalam temporaryThetaList.
while (ConvergenceCondition(gradient, firstGradient, gammaS) and iter <
innerIter)
error2 <- ComputeError(inputData[randRowList[iter], ], temporaryTheta2,
outputData[randRowList[iter]])
error3 <- ComputeError(inputData[randRowList[iter], ], temporaryTheta,
outputData[randRowList[iter])
temporaryTheta <- CopyTheta(temporaryTheta2)

for column in 1 to NumberOfColumns(theta)


term2 <- error2 * inputData[randRowList[iter], column]
term3 <- error3 * inputData[randRowList[iter], column]
gradient[, column] <- term2 - term3 + gradient[, column]
temporaryTheta2[1, column] <- temporaryTheta2[1, column] - (alpha
* gradient[, column])

AppendTemporaryThetaToTemporaryList(temporaryThetaList,
temporaryTheta2)
iter <- iter + 1

theta[1, ] <- temporaryThetaList[iter, ]


// setelah selesai semua iterasi, parameter theta yang dihasilkan oleh algoritma
dikembalikan sebagai hasil optimisasi.

result <- theta


end_time <- CurrentTime()
// end_time dicatat dan waktu eksekusi algoritma dihitung dengan mengurangkan
start_time dari end_time
PrintElapsedTime(end_time - start_time)
return result
// hasil parameter theta yang dioptimalkan dikembalikan sebagai output dari fungsi.
3. DEMO

1) Install aplikasi R Studio terlebih dahulu.


https://posit.co/download/rstudio-desktop/

2) Jika sudah terinstall, buka R Studio lalu ke bagian tab kanan bawah terdapat “Packages”.

3) Klik install, maka akan muncul tampilan seperti berikut :

4) Install packages bisa via Repository (CRAN) atau Download manual di google,
dikarenakan packages gradDescent tidak bisa via Repository maka harus download di
link berikut :
https://cran.r-project.org/src/contrib/Archive/gradDescent/

5) Setelah download packages, ubah install from menjadi “Package Archive File”, lalu
masukkan file yang telah didownload, lalu klik install.
6) Jika sudah terinstall, maka menu console akan menampilkan tampilan sebagai berikut :

7) Jika ingin menggunakan library pergi ke tab kanan bawah, lihat menu packages dan centang
library gradDescent.
8) Setelah instalasi package selesai, kita dapat mencoba dengan menggunakan example code yang
sudah disediakan di link berikut
http://cran.nexr.com/web/packages/gradDescent/gradDescent.pdf
Sebagai contoh kita mengambil example code dari algoritma SARAH
4. STUDI KASUS

a) Untuk studi kasus menggunakan Dataset Data Rumah dengan ketentuan seperti berikut:
- Data terdiri dari 7 kolom, Lunas Tanah, Luas Bangunan, Lebar Jalan, Jumlah
Lantai, Jumlah KT, Jumlah KM, Harga.
- Data berjumlah 20 baris.

b) Selanjutnya install library yang diperlukan seperti readxl dan gradDescent

c) Lalu lakukan pembacaan dataset dan masukkan ke dataSet


d) Jika sudah split dataset menjadi dataTrain dan dataTest
e) Buat data model dengan function SARAH dan menampilkan hasil parameter yang telah
dioptimalkan dari keseluruhan kolom

Anda mungkin juga menyukai