Apa itu penurunan gradien stokastik?

Penulis

Anna Gutowska

AI Engineer, Developer Advocate

IBM

Apa itu penurunan gradien stokastik?

Penurunan gradien stokastik (SGD) adalah algoritma optimasi yang biasa digunakan untuk meningkatkan kinerja model machine learning. Ini adalah varian dari algoritma penurunan gradien tradisional dengan modifikasi kunci: alih-alih mengandalkan seluruh kumpulan data untuk menghitung gradien pada setiap langkah, SGD menggunakan sampel data tunggal pada satu waktu.

Penurunan gradien

Penurunan gradien (GD) adalah algoritma pengoptimalan yang meminimalkan fungsi tujuan secara berulang. Dalam konteks machine learning (ML), penurunan gradien sangat penting untuk meningkatkan kinerja model pembelajaran diawasi selama fase pelatihan mereka. Model pembelajaran mesin, seperti neural networks, bersifat kompleks, nonlinier, dan berdimensi tinggi. Oleh karena itu, tidak ada persamaan normal untuk model seperti itu yang dapat menghitung bobot optimal, tidak seperti dalam regresi linier. Sebagai gantinya, metode perkiraan seperti varian dari penurunan gradien, antara lain metode Newton dan maksimisasi ekspektasi dapat digunakan.

Setiap model memiliki fungsi kesalahan, terkadang disebut fungsi biaya. Fungsi ini mengukur seberapa jauh prediksi model dari titik data sebenarnya. Bayangkan ini sebagai ukuran seberapa “salah” prediksi model. Misalnya, rata-rata kesalahan kuadrat sering berfungsi sebagai fungsi kesalahan dalam masalah regresi. Fase pelatihan model dirancang untuk menemukan nilai parameter yang meminimalkan kesalahan ini. Penurunan gradien sering kali merupakan teknik pengoptimalan yang digunakan dalam pelatihan karena alasan ini. Algoritma menghitung gradien, atau kemiringan, dari kesalahan sehubungan dengan parameter model. Dengan gradien algoritma mengambil langkah ke arah yang berlawanan untuk mengurangi kesalahan. Tingkat pembelajaran (juga disebut sebagai ukuran langkah atau alfa) adalah ukuran langkah dan bersifat tetap untuk semua parameter model. Proses ini berulang sampai model mencapai konvergensi mendekati minimum.

Representasi grafis dari konvergensi Representasi grafis dari konvergensi

Konvergensi idealnya terjadi pada minimum global. Dalam visualisasi berikut, Anda dapat melihat bahwa nilai kesalahan lebih rendah pada minimum lokal dibandingkan dengan area sekitarnya, tetapi belum tentu merupakan nilai terendah secara keseluruhan. Minimum global adalah nilai terendah absolut dari fungsi kesalahan di seluruh domainnya, menunjukkan solusi terbaik untuk masalah tersebut.

Minimum lokal dan global dalam ruang 3 dimensi Minimum lokal dan global dalam ruang 3 dimensi

Jika tingkat pembelajaran tidak cukup kecil, algoritma akan sering bertemu pada minimum lokal. Tingkat yang dipilih dengan baik sangat penting untuk meminimalkan fungsi kerugian dan mencapai konvergensi pada minimum global.

Pengaruh tingkat pembelajaran pada konvergensi Pengaruh tingkat pembelajaran pada konvergensi

Visualisasi ini menggambarkan efek tingkat pembelajaran pada konvergensi. Laju pembelajaran yang kecil akan menghasilkan konvergensi yang lambat namun stabil (kiri), sedangkan laju pembelajaran yang besar dapat menyebabkan pelampauan dan ketidakstabilan (kanan).

Dari GD ke SGD

Perbedaan utama antara penurunan gradien tradisional dan penurunan gradien stokastik adalah bahwa SGD memperbarui bobot model dengan menggunakan satu contoh pelatihan pada satu waktu. Contoh dipilih secara acak pada setiap iterasi.1 Penurunan gradien menggunakan seluruh kumpulan data pelatihan untuk menghitung gradien sebelum setiap pembaruan parameter. Perbedaan dalam penggunaan data inilah yang membuat SGD jauh lebih murah secara komputasi dan lebih mudah untuk diskalakan bagi kumpulan data yang besar. Atau, perilaku konvergensi SGD lebih tidak akurat daripada ketidakakuratan GD karena satu titik data contoh mungkin bukan representasi yang baik dari kumpulan data. Penyajian yang salah ini memperbarui poin ke arah yang agak “salah”. Namun, keacakan inilah yang membuat SGD lebih cepat dan terkadang lebih baik untuk masalah pengoptimalan bukan konveks karena dapat menghindari minimum lokal dangkal atau titik pelana.

Sebenarnya, SGD pada awalnya didefinisikan untuk memperbarui parameter dengan menggunakan tepat satu sampel pelatihan pada satu waktu. Dalam penggunaan modern, istilah "SGD" digunakan secara longgar yang berarti "penurunan gradien batch kecil," sebuah varian dari GD di mana sejumlah kecil data pelatihan digunakan pada satu waktu. Keuntungan utama menggunakan bagian data daripada sampel tunggal adalah tingkat ketidakakuratan yang lebih rendah, karena gradiennya sama dengan rata-rata kesalahan dari batch kecil. Karena alasan inilah penurunan gradien batch kecil merupakan default dalam pembelajaran mendalam. Sebaliknya, SGD ketat jarang digunakan dalam praktik. Semua istilah ini bahkan dirancukan oleh sebagian besar machine learning seperti PyTorch dan TensorFlow; pengoptimal sering disebut "SGD," meskipun mereka biasanya menggunakan batch mini.

Ilustrasi berikut ini memberikan gambaran yang lebih jelas mengenai bagaimana meningkatkan ukuran sampel data pelatihan akan mengurangi osilasi dan "ketidakakuratan".

Varian penurunan gradien

Ada beberapa varian lain dari GD yang dibangun di atas penurunan gradien dasar dengan menambahkan mekanisme untuk meningkatkan kecepatan, stabilitas, dan konvergensi.

Metode berbasis momentum:

Dengan mengakumulasi momentum dalam dimensi dengan gradien yang konsisten dan meredam pembaruan dalam dimensi dengan gradien yang berubah-ubah, momentum membantu SGD menyatu lebih cepat dan dengan lebih sedikit osilasi.2

SGD dengan dan tanpa momentum
  • Penurunan gradien momentum: Memasukkan istilah "kecepatan", rata-rata dari gradien sebelumnya yang memberikan lebih banyak kepentingan pada gradien terbaru. Pendekatan ini mengurangi zig-zag, atau osilasi, sehingga membantu algoritma bergerak lebih cepat ke arah yang benar.

  • NAG (gradien dipercepat Nesterov): Metode momentum lebih baik yang mempercepat dan memperlancar konvergensi dengan "melihat ke depan" ke arah yang dituju parameter sebelum menghitung gradien. Dengan kata lain, ia mengantisipasi gradien pada masa depan dan menggunakan informasi ini untuk menginformasikan langkah pembaruan saat ini.3

Metode laju pembelajaran adaptif:

Metode laju pembelajaran adaptif, seperti AdaGrad dan RMSProp, memiliki keunikan tersendiri karena mengadaptasi laju pembelajaran untuk setiap parameter secara terpisah. Pendekatan ini berbeda dengan metode SGD yang menggunakan tingkat pembelajaran tetap untuk semua parameter.

  • AdaGrad (algoritma gradien adaptif): Mengadaptasi laju pembelajaran untuk setiap parameter berdasarkan gradien sebelumnya. Fitur yang muncul lebih jarang menerima tingkat pembelajaran yang lebih tinggi dan fitur yang sering muncul menerima tarif yang lebih rendah. Pendekatan ini berarti bahwa fitur yang jarang muncul dipelajari lebih cepat daripada SGD. Laju pembelajaran adaptif ini berarti merupakan metode yang bagus untuk pemrosesan bahasa alami (NLP) dan sistem rekomendasi dengan data yang jarang, yang memiliki perbedaan besar dalam frekuensi fitur.2

  • RMSProp (Root Mean Square Propagation): Teknik optimasi laju pembelajaran adaptif lainnya yang menskalakan laju pembelajaran untuk setiap parameter dengan menggunakan rata-rata bergerak dari gradien kuadrat terbaru. Pengetahuan gradien masa lalu dibuang dan hanya pengetahuan gradien saat ini yang dipertahankan.4 Laju pembelajaran menjadi lebih besar untuk parameter dengan gradien kecil dan lebih kecil untuk parameter dengan gradien besar. Metode ini menghilangkan masalah laju pembelajaran yang berkurang dengan AdaGrad. RMSProp membantu menjaga pelatihan tetap stabil dalam pembelajaran mendalam, terutama untuk model seperti recurrent neural networks (RNN) dan bekerja dengan baik pada masalah di mana tujuannya terus berubah, seperti dalam pembelajaran penguatan.

Metode hybrid:

  • Adam (estimasi momen adaptif): Menggabungkan GD berbasis momentum dengan RMSProp dengan melacak gradien masa lalu dan rata-rata gradien kuadrat.4 Kombinasi ini memungkinkan tingkat konvergensi yang cepat bahkan untuk kumpulan data yang tidak akurat dan jarang.3 Selain itu, hiperparameter default seperti laju pembelajaran 0,001 di banyak kerangka kerja, langsung bekerja dengan baik. Namun, untuk kumpulan data berskala sangat besar, SGD dengan momentum dapat mengarah pada generalisasi yang lebih baik. Penyesuaian per parameter yang agresif dari Adam dapat mengakibatkan overfitting pada data pelatihan atau mengendap pada minimum tajam yang tidak dapat digeneralisasi dengan baik.

SGD dan varian GD lainnya berguna ketika waktu pelatihan merupakan hambatan.5

VarianData yang digunakan per langkahFitur utamaPenggunaan umum
GDSemua dataStabil tapi lambatKumpulan data kecil
SGD1 sampel untuk SGD klasikTidak akurat tapi cepatPembelajaran online
GD Batch MiniBeberapa sampelSeimbang dan dapat diskalakanPembelajaran Mendalam
MomentumBatch/batch miniMempercepat ke arah yang benarJaring neural
NAGBatch/batch miniMomentum antisipatifKonvergensi lebih cepat
AdaGradBatch miniLaju pembelajaran adaptifData yang jarang
RMSPropBatch miniPerbaikan penurunan AdaGradRNN, jaring dalam
AdamBatch miniMomentum + RMSPropPilihan default hari ini

Memahami unsur matematikanya

Tujuan SGD adalah untuk menemukan parameter θ yang membuat prediksi model kita sedekat mungkin dengan nilai sebenarnya y . Dengan kata lain, kita ingin meminimalkan fungsi kesalahan, L(θ) .

Dalam kasus regresi linier, parameter tersebut adalah w (bobot) dan b (bias). Jadi dalam hal ini, meminimalkan L(θ) sama dengan meminimalkan  L(w,b) .

 yi^=w·xi+b

L(w,b)=1ni=1n(yi-yi^)2

Analogi yang umum digunakan saat mengajarkan penurunan gradien adalah bahwa GD seperti berjalan menuruni bukit di pegunungan hingga mencapai lembah (kesalahan minimum). Bayangkan gradien fungsi kesalahan, L , menunjuk ke atas dan untuk menuruni bukit, kita harus melangkah ke arah yang berlawanan.

Aturan pembaruan umum untuk parameter θ  adalah:

θ:=θ-η·θL(θ)

di mana η adalah tingkat pembelajaran dan θL(θ) adalah gradien kesalahan sehubungan dengan θ .

SGD hanya menggunakan satu sampel yang dipilih secara acak (xi,yi) untuk memperkirakan gradien:

θL(θ)θ(xi,yi;θ)

Catatan, huruf kecil (xi,yi;θ) menunjukkan kesalahan dari satu contoh pelatihan. Sedangkan huruf besar L(θ) adalah fungsi kesalahan keseluruhan (rata-rata semua kesalahan di seluruh kumpulan data). Kesalahan global ini adalah apa yang benar-benar kita coba minimalkan dalam pelatihan.

Contoh: Regresi linier dengan SGD

Mari kita telusuri contoh regresi linier dengan SGD hingga selesai.

Untuk satu sampel (xi,yi) , prediksinya adalah:

 yi^=w·xi+b

Kesalahan lokal adalah kesalahan kuadrat untuk satu sampel:

 (xi,yi;w,b)=(yi-(wxi+b))2

Sekarang selama propagasi balik, parameter model diperbarui dengan menggunakan aturan rantai yang menghitung gradien fungsi kesalahan sehubungan dengan setiap parameter.5 Gradien (turunan) adalah:

 w=-2xi(yi-(wxi+b))

 b=-2(yi-(wxi+b))

Dengan SGD, kita memperbarui setiap parameter ini, w dan b , dengan menggunakan aturan berikut:

 w:=w-η·(-2xi(yi-(wxi+b)))

 b:=b-η·(-2(yi-(wxi+b)))

Alih-alih menghitung gradien rata-rata yang berat di seluruh kumpulan data, SGD menggunakan perkiraan acak yang ringan.

Implementasi sederhana SGD di Python

Saat bekerja dengan kerangka kerja machine learning, ada kelas pengoptimal SGD bawaan yang dapat digunakan. Misalnya, torch.optim.SGD  untuk PyTorchtf.keras.optimizers.SGD  untuk Keras yang dibangun ke dalam TensorFlow, dan SGDRegressor  untuk Scikit-learn.

Untuk tujuan pembelajaran, mari kita bahas implementasi sederhana SGD di Python dari awal.

Untuk mengulanginya, tujuan kami adalah menemukan parameter terbaik (bobot model) yang meminimalkan fungsi kerugian (ukuran seberapa salah prediksi kita). Kita akan memperbarui satu sampel pada satu waktu atau ukuran batch yang sangat kecil.

Untuk memulai, kita dapat menginisialisasi nilai parameter (bobot) secara acak. Selanjutnya, kita dapat memilih titik data acak (x,y) . Dari sana, kita akan menghitung prediksi dan kesalahan. Untuk demonstrasi sederhana ini, mari kita coba menyesuaikan satu baris sederhana: y=mx+b . Langkah selanjutnya dalam proses ini adalah propagasi balik, di mana gradien fungsi kesalahan dihitung sehubungan dengan parameter. Gradien ini (turunan) kemudian digunakan untuk memperbarui parameter selama proses pengoptimalan SGD. Karena gradien menunjukkan arah kenaikan fungsi kesalahan, SGD mengurangi setiap gradien dari nilai parameter saat ini yang relevan. Kita dapat menganggapnya sebagai bergerak ke arah yang berlawanan dari gradien untuk mengurangi fungsi kesalahan. Inilah asal istilah “penurunan” dalam penurunan gradien stokastik. Kita mengulangi langkah-langkah ini sampai sejumlah periode tetap tercapai atau setelah nilai kesalahan kurang dari toleransi. Yang disebutkan belakangan berarti bahwa kesalahan hampir tidak berubah dan kita tidak lagi meningkatkan fungsi objektif. Dengan kata lain, kita berhenti begitu algoritma bersatu.

import numpy as np 
 
def stochastic_gradient_descent(X, y, lr=0.01, epochs=100, tol=1e-6): 
    “”” 
    Perform Stochastic Gradient Descent (SGD) to fit a line y = w*x + b 
     
    Parameters: 
        X (ndarray): Input features 
        y (ndarray): Target values 
        lr (float): Learning rate (step size for updates) 
        epochs (int): Number of iterations through the dataset 
     
    Returns: 
        w (float): Learned weight 
        b (float): Learned bias 
    “”” 
    # Initialize parameters randomly 
    w = np.random.randn() 
    b = np.random.randn() 
     
    n = len(X) 
 
    prev_loss = float(‘inf’) 
     
    for epoch in range(epochs): 
        # Shuffle the data for each epoch 
        indices = np.arange(n) 
        np.random.shuffle(indices) 
         
        for i in indices: 
            xi = X[i] 
            yi = y[i] 
             
            # Prediction 
            y_pred = w * xi + b 
             
            # Compute gradients (derivatives) 
            dw = -2 * xi * (yi - y_pred)   # derivative wrt w 
            db = -2 * (yi - y_pred)        # derivative wrt b 
             
            # Update parameters 
            w -= lr * dw 
            b -= lr * db 
         
        
        # Compute loss at the end of the epoch 
        loss = np.mean((y - (w*X + b))**2) 
         
        # Check stopping condition 
        if abs(prev_loss - loss) < tol: 
            print(f”Stopped early at epoch {epoch+1}”) 
            break 
                 
        prev_loss = loss 
             
    return w, b

Aplikasi SGD

SGD adalah metode pengoptimalan yang paling umum untuk melatih neural networks dalam. Dalam pembelajaran mendalam, bagian dari machine learning dalam bidang ilmu data yang lebih luas, tujuannya adalah agar komputer dapat menyimulasikan kekuatan pengambilan keputusan yang kompleks dari otak manusia. Model ML tradisional menggunakan neural networks sederhana yang terdiri dari satu atau dua lapisan. Sedangkan model pembelajaran mendalam menggunakan tiga lapisan atau lebih. Biasanya, ratusan atau ribuan lapisan diperlukan untuk melatih model. Mengingat kemudahan SGD dalam untuk menskalakan kumpulan pelatihan besar, ini sering menjadi pendekatan yang dipilih untuk melatih neural networks mendalam. Aplikasi lain dari pelatihan SGD termasuk regresi ridge, regresi logistik teregulasi, dan optimalisasi fungsi kesalahan hinge (hinge lost) yang digunakan dalam support vector machine (SVM) dengan kernel linier.

Kesimpulan

SGD adalah varian dari GD yang meminimalkan fungsi kesalahan model machine learning dengan menggunakan satu sampel data pada satu waktu. Pendekatan ini tidak seperti GD yang bergantung pada seluruh kumpulan data di setiap langkah untuk menghitung gradien. Ada beberapa varian GD lain yang dapat dikelompokkan sebagai metode pembelajaran berbasis momentum atau adaptif. Penurunan gradien momentum dan gradien dipercepat Nesterov adalah contoh pembelajaran berbasis momentum. Metode ini memanfaatkan momentum yang terakumulasi dalam dimensi dengan gradien yang konsisten dan meredam pembaruan dalam dimensi dengan gradien yang berubah-ubah. Dengan demikian hal ini membantu SGD menyatu lebih cepat dengan osilasi yang lebih sedikit. Metode laju pembelajaran adaptif seperti AdaGrad dan RMSProp mengadaptasi laju pembelajaran untuk setiap parameter secara terpisah, tidak seperti SGD tradisional yang menggunakan laju pembelajaran tetap. Selain itu, metode hybrid seperti Adam menawarkan alternatif yang efisien dengan menggabungkan kekuatan GD berbasis momentum dan RMSProp.

Solusi terkait
IBM watsonx.ai

Latih, validasi, lakukan tuning, dan terapkan AI generatif, model dasar, dan kemampuan machine learning dengan IBM watsonx.ai, studio perusahaan generasi berikutnya untuk pembangun AI. Bangun aplikasi AI dalam waktu singkat, dengan sedikit data.

Temukan watsonx.ai
Solusi kecerdasan buatan (AI)

Gunakan AI di bisnis Anda dalam perpaduan antara keahlian AI terdepan di industri dari IBM dan portofolio solusi Anda.

Jelajahi solusi AI
Konsultasi dan layanan AI

Temukan kembali alur kerja dan operasi yang penting dengan menambahkan AI untuk memaksimalkan pengalaman, pengambilan keputusan secara real-time, dan nilai bisnis.

Jelajahi layanan AI
Ambil langkah selanjutnya

Dapatkan akses ke berbagai kemampuan dalam satu alat untuk seluruh siklus pengembangan AI. Hasilkan solusi AI yang kuat dengan antarmuka ramah pengguna, alur kerja yang efisien, serta akses ke API dan SDK berstandar industri.

Jelajahi watsonx.ai Pesan demo langsung
Catatan kaki

Bottou, L. (2010). Large-Scale Machine Learning with Stochastic Gradient DescentLechevallier, Y., Saporta, G. (eds) Proceedings of COMPSTAT’2010. Physica-Verlag HD. 

Ruder, S. (2016). An overview of gradient descent optimization algorithms

Tian, Y., Zhang, Y., & Zhang, H. (2023). Recent Advances in Stochastic Gradient Descent in Deep LearningMathematics, 11(3), 682. 

Haji, S. H., & Abdulazeez, A. M. (2021). Comparison of optimization techniques based on gradient descent algorithm: A review. PalArch’s Journal of Archaeology of Egypt/Egyptology, 18(4), 2715-2743.

Bottou, L. (2012). Stochastic Gradient Descent TricksMontavon, G., Orr, G.B., Müller, KR. (eds) Neural Networks: Tricks of the Trade. Lecture Notes in Computer Science, vol 7700. Springer, Berlin, Heidelberg.