Diyelim ki N örneği olan bir veri kümesi kullanarak stokastik bir degrade iniş regresyon algoritması eğitmek istiyorum. Veri kümesinin boyutu sabit olduğundan, veri T zamanlarını yeniden kullanacağım. Her yinelemede veya "dönem" de, tüm eğitim setini rastgele yeniden sıraladıktan sonra her eğitim örneğini tam olarak bir kez kullanıyorum.
Benim uygulama Python ve Numpy dayanmaktadır. Bu nedenle, vektör işlemlerinin kullanılması hesaplama süresini önemli ölçüde azaltabilir. Toplu degrade inişin vektörize bir uygulaması ile gelmek oldukça basittir. Bununla birlikte, stokastik gradyan iniş durumunda, her çağda tüm numuneler boyunca yinelenen dış döngüden nasıl kaçınılacağını anlayamıyorum.
Stokastik gradyan inişin vektörize edilmiş bir uygulamasını bilen var mı?
DÜZENLEME : Veri kümemin boyutu sabitse neden çevrimiçi degrade inişini kullanmak istediğim soruldu.
[1] 'den, çevrimiçi gradyan inişinin, toplu gradyan inişinden ampirik maliyetin minimumuna daha yavaş yakınsadığı görülebilir. Bununla birlikte, genelleme performansını ölçen, beklenen maliyetin en aza indirgenir. Bu teorik sonuçların özel problemimdeki etkilerini çapraz doğrulama yoluyla test etmek istiyorum. Vektörize edilmiş bir uygulama olmadan, çevrimiçi degrade iniş kodum toplu degrade iniş kodundan çok daha yavaştır. Bu, çapraz doğrulama sürecinin tamamlanması için gereken süreyi önemli ölçüde artırır.
EDIT : Ben burada arkadaşım tarafından istendiği gibi, on-line degrade iniş uygulamasının sözde kodu dahil. Bir regresyon problemini çözüyorum.
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] "Büyük Ölçekli Çevrimiçi Öğrenme", L. Bottou, Y. Le Cunn, NIPS 2003.