6

MATLAB'de "Stochastic gradient descent" dosyasını uygulamaya çalışıyorum. Algoritmayı tam olarak takip ettim ama tahmin/ayar işlevi için ÇOK ÇOK büyük bir w (coffients) alıyorum. Algoritmada bir hatam var mı?Stokastik degrade Descent uygulaması - MATLAB

Algoritma: enter image description here

x = 0:0.1:2*pi  // X-axis 
    n = size(x,2);  
    r = -0.2+(0.4).*rand(n,1); //generating random noise to be added to the sin(x) function 

    t=zeros(1,n); 
    y=zeros(1,n); 



    for i=1:n 
     t(i)=sin(x(i))+r(i);   // adding the noise 
     y(i)=sin(x(i));    // the function without noise 
    end 

    f = round(1+rand(20,1)*n);  //generating random indexes 

    h = x(f);       //choosing random x points 
    k = t(f);       //chossing random y points 

    m=size(h,2);      // length of the h vector 

    scatter(h,k,'Red');    // drawing the training points (with noise) 
    %scatter(x,t,2); 
    hold on; 
    plot(x,sin(x));     // plotting the Sin function 


    w = [0.3 1 0.5];     // starting point of w 
    a=0.05;       // learning rate "alpha" 

// ---------------- ALGORITHM ---------------------// 
    for i=1:20 
     v = [1 h(i) h(i).^2];      // X vector 
     e = ((w*v') - k(i)).*v;   // prediction - observation 
     w = w - a*e;      // updating w 
    end 

    hold on; 

    l = 0:1:6; 
    g = w(1)+w(2)*l+w(3)*(l.^2); 
    plot(l,g,'Yellow');      // drawing the prediction function 

cevap

7

Çok büyük bir öğrenme oranı kullanırsanız, SGD'nin uzaklaşma olasılığı vardır.
Yaşam oranı sıfıra yakın olmalıdır.

3

tipik olarak, çok büyük değerler ile sona erdi ağırlık halinde de, aşırı uyum edilir. Koduna dikkatlice bakmadım. Ama bence, kodunuzda eksik olan şey, eğitimin gereğinden fazla takılmasını önleyen uygun bir düzenli hale getirme terimidir. Ayrıca, burada:

e = ((w*v') - k(i)).*v; 

Burada v, öngörülen değerin gradyanı değil, değil mi? Algoritmaya göre değiştirmelisiniz. Bunu yaptıktan sonra nasıl olacağını görelim.