簡體   English   中英

隨機梯度下降實現 - MATLAB

[英]Stochastic gradient Descent implementation - MATLAB

我正試圖在MATLAB中實現“ 隨機梯度下降 ”。 我完全按照算法,但我得到了一個非常非常大的w(coffients)預測/擬合功能。 我在算法中有錯誤嗎?

算法: 在此輸入圖像描述

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

如果你使用太大的學習率,新元可能會出現分歧。
學習率應該收斂到零。

通常情況下,如果w結果值過大,則過度擬合。 我沒有仔細查看你的代碼。 但我認為,你的代碼中缺少的是一個適當的正則化術語,它可以防止訓練過度擬合。 也在這里:

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

這里的v不是預測值的梯度,不是嗎? 根據算法,你應該替換它。 讓我們看看這樣做之后會是怎樣的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM