6

मैं MATLAB में "Stochastic gradient descent" को लागू करने की कोशिश कर रहा हूं। मैंने वास्तव में एल्गोरिदम का पालन किया लेकिन मुझे पूर्वानुमान/फिटिंग फ़ंक्शन के लिए बहुत बहुत बड़ा w (ताबूत) ​​मिल रहा है। क्या मुझे एल्गोरिदम में कोई गलती है?स्टोकास्टिक ढाल वंश कार्यान्वयन - MATLAB

एल्गोरिथ्म: 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 

उत्तर

7

यदि आप बहुत बड़ी सीखने की दर का उपयोग करते हैं, तो एसजीडी अलग हो जाने की संभावना है।
लीडरिंग दर शून्य तक पहुंचनी चाहिए।

3

आम तौर पर, अगर डब्ल्यू बहुत बड़ी मूल्यों के साथ समाप्त हो गया है, वहाँ overfitting है। मैंने वास्तव में आपके कोड को ध्यान से नहीं देखा। लेकिन मुझे लगता है कि, आपके कोड से क्या गुम है एक उचित नियमितकरण शब्द है, जो प्रशिक्षण को अधिक से अधिक रोकता है। इसके अलावा, यहां:

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

वी यहां अनुमानित मूल्य का ढाल नहीं है, है ना? एल्गोरिदम के अनुसार, आपको इसे बदलना चाहिए। चलो देखते हैं कि ऐसा करने के बाद यह कैसा होगा।

संबंधित मुद्दे