mari kita asumsikan bahwa saya ingin melatih algoritma regresi penurunan gradien stokastik menggunakan dataset yang memiliki sampel N. Karena ukuran dataset sudah diperbaiki, saya akan menggunakan kembali data T kali. Pada setiap iterasi atau "zaman", saya menggunakan masing-masing sampel pelatihan tepat satu kali setelah secara acak memesan kembali seluruh rangkaian pelatihan.
Implementasi saya didasarkan pada Python dan Numpy. Oleh karena itu, menggunakan operasi vektor dapat sangat mengurangi waktu komputasi. Datang dengan implementasi vektor keturunan gradien batch cukup mudah. Namun, dalam kasus keturunan gradien stokastik saya tidak bisa mencari cara untuk menghindari loop luar yang berulang melalui semua sampel di setiap zaman.
Adakah yang tahu implementasi vektor dari penurunan gradien stokastik?
EDIT : Saya ditanya mengapa saya ingin menggunakan gradient descent online jika ukuran dataset saya diperbaiki.
Dari [1], orang dapat melihat bahwa penurunan gradien online menyatu lebih lambat dari penurunan gradien batch ke minimum biaya empiris. Namun, konvergen lebih cepat ke minimum biaya yang diharapkan, yang mengukur kinerja generalisasi. Saya ingin menguji dampak dari hasil teoritis ini dalam masalah khusus saya, dengan cara validasi silang. Tanpa implementasi vectorized, kode online gradient descent saya jauh lebih lambat daripada batch gradient descent. Itu sangat meningkatkan waktu yang diperlukan untuk proses validasi silang untuk diselesaikan.
EDIT : Saya menyertakan di sini pseudocode implementasi gradient descent on-line saya, seperti yang diminta oleh teman. Saya memecahkan masalah regresi.
Method: on-line gradient descent (regression)
Input: X (nxp matrix; each line contains a training sample, represented as a length-p vector), Y (length-n vector; output of the training samples)
Output: A (length-p+1 vector of coefficients)
Initialize coefficients (assign value 0 to all coefficients)
Calculate outputs F
prev_error = inf
error = sum((F-Y)^2)/n
it = 0
while abs(error - prev_error)>ERROR_THRESHOLD and it<=MAX_ITERATIONS:
Randomly shuffle training samples
for each training sample i:
Compute error for training sample i
Update coefficients based on the error above
prev_error = error
Calculate outputs F
error = sum((F-Y)^2)/n
it = it + 1
[1] "Pembelajaran Online Skala Besar", L. Bottou, Y. Le Cunn, NIPS 2003.