1
$\begingroup$

I have implemented in matlab a neural network that uses rprop's algorithm to update its weights.

Strangely the error on the training set does not converge to a local minimum, but oscillates.

Here is the graphics plot of the error function on trainingset:

enter image description here

Here is the rprop's algorithm:

function [net] = resilientBackPropagation(net, DW, DB, ETA_PLUS, ETA_MINUS)

for i=1:length(net.W) % Ciclo sul Numero di Strati della Rete

    % Calcolo il Prodotto tra le Derivate dei pesi e dei bias di E e E^-1 dell'i-esimo Strato
    productDW = net.DW{i}.*DW{i}; 
    productDB = net.DB{i}.*DB{i};

    % Prelevo gli Indici dei pesi e dei bias dell'i-esimo Strato con Prodotto Positivo, Negativo e Nullo  
    indDW_gt_0 = find(productDW > 0);   
    indDB_gt_0 = find(productDB > 0);      
    indDW_lt_0 = find(productDW < 0); 
    indDB_lt_0 = find(productDB < 0); 
    indDW_eq_0 = find(productDW == 0);
    indDB_eq_0 = find(productDB == 0); 

    % Calcolo i Margini dei pesi e dei bias con Prodotto Positivo
    net.deltaMarginW{i}(indDW_gt_0) = min(ETA_PLUS.*net.deltaMarginW{i}(indDW_gt_0), 50);
    net.deltaMarginB{i}(indDB_gt_0) = min(ETA_PLUS.*net.deltaMarginB{i}(indDB_gt_0), 50); 

    % Calcolo i Margini dei pesi e dei bias con Prodotto Negativo
    net.deltaMarginW{i}(indDW_lt_0) = max(ETA_MINUS.*net.deltaMarginW{i}(indDW_lt_0), exp(-6));
    net.deltaMarginB{i}(indDB_lt_0) = max(ETA_MINUS.*net.deltaMarginB{i}(indDB_lt_0), exp(-6));     

    % Aggiornamento dei pesi e dei bias della Rete con Prodotto Positivo
    net.W{i}(indDW_gt_0) = net.W{i}(indDW_gt_0)-(sign(DW{i}(indDW_gt_0).*net.deltaMarginW{i}(indDW_gt_0)));
    net.B{i}(indDB_gt_0) = net.B{i}(indDB_gt_0)-(sign(DB{i}(indDB_gt_0).*net.deltaMarginB{i}(indDB_gt_0)));   

    % Aggiornamento dei pesi e dei bias della Rete con Prodotto Negativo
    DW{i}(indDW_lt_0) = 0;
    DB{i}(indDB_lt_0) = 0;  

     % Aggiornamento dei pesi e dei bias della Rete con Prodotto Nullo
    net.W{i}(indDW_eq_0) = net.W{i}(indDW_eq_0)-(sign(DW{i}(indDW_eq_0).*net.deltaMarginW{i}(indDW_eq_0)));
    net.B{i}(indDB_eq_0) = net.B{i}(indDB_eq_0)-(sign(DB{i}(indDB_eq_0).*net.deltaMarginB{i}(indDB_eq_0)));   

    % Memorizzazione delle Derivate dei pesi e dei bias Aggiornati dell'Errore Totale nella Rete Neurale.
    net.DW{i} = DW{i};
    net.DB{i} = DB{i};

end

What is the problem?

ps:the dataset used is banana_dataset and in the plot the x-axis represents the epoch of training and the y-axis the error.

ETA_MINUS = 0.5; ETA_PLUS = 1.2

$\endgroup$
  • $\begingroup$ Why the error is so high? The code looks correct.. It's running in batch modality on trainingset. $\endgroup$ – Teo Teo Sep 3 '15 at 13:09
  • $\begingroup$ @TeoTeo, can you run it with say 2000 maximum iterations instead of a mere 100? I would like to see if this decreases over time. After that, can you set ETA_PLUS from 1.2 down to 1.01, and rerun it again? $\endgroup$ – EngrStudent - Reinstate Monica Sep 8 '15 at 13:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.