0

Ich habe die ANN für Zwei-Schicht-Netzwerk implementiert, ich muss meine Gewicht Update-Code mit Schwung ändern, aber ich muss wissen, wie ich es aktualisieren kann. unten ist der Code-Snap nur der Gewichtsaktualisierung. Der folgende Code aktualisiert das Gewicht für jedes Beispiel, das es gesehen hat. Die hiddenWights sind das Gewicht der versteckten Ebene und die outputWeights sind die Gewichtungen der Ausgabeebene.Hinzufügen von Momentum-Term im Online-Back-Propagation-Gewicht-Update?

for examplen = 1: nTrainingExamples 
      inputVector = inputs(:,examplen); 
      HiddenLayerOutput = sigmoid(hiddenWeights * inputVector); 
      OutputLayerOutput = sigmoid(outputWeights * HiddenLayerOutput); 

      l2_error = OutputLayerOutput - targets(:, examplen); 
      l2_delta = learningRates(1, i) .* (OutputLayerOutput .* (1 - OutputLayerOutput)) .* l2_error; 
      l2_v = mu * l2_v - l2_delta * t; 

      l1_delta = learningRates(1, i) .* (HiddenLayerOutput .* (1 - HiddenLayerOutput)) .* (outputWeights' * l2_delta); 
      l1_v = mu * l1_v - l1_delta * t; 
      % weights = weights + v 
      outputWeights = outputWeights + (l2_v*HiddenLayerOutput'); 
      hiddenWeights = hiddenWeights + (l1_v*inputVector'); 
     end 
+0

Welche Art von Impuls möchten Sie implementieren? Ein Klassiker oder ein Nestrov? –

+0

Ich muss nur Schwung Update hinzufügen, ich weiß nicht genau, was der Unterschied zwischen klassischen oder ein Nestrow? –

+0

Überprüfen Sie diesen Beitrag: http://stats.stackexchange.com/questions/179915/whats-the-difference-between-momentum-based-gradient-descent-and-nesterovs-ac –

Antwort

0

Aus unserer Konversation ergibt sich, dass Sie eine klassische Momentum-Methode (nicht Nestrov) implementieren möchten. Sie benötigen also einen zusätzlichen Parameter - die Geschwindigkeit v und Zeitt und Impulsmu Konstanten.

Zu Beginn des Lernens Sie Ihre Geschwindigkeit auf 0 setzen sollen

v = 0 

und einen Wert von t wählen (zum Beispiel setzen Sie sich auf 0,1) und mu (z 0,9).

Während jede Iteration des Trainings Sie Ihre Gewichte nach folgenden Regel ändern sollten:

v = mu * v - delta * t 
weights = weights + v 

Parameter mu und t sind Meta-Parameter und Sie gute Werte von ihnen durch ein Gitter oder zufällige Suche können.

+0

Ich muss V für beide Delta getrennt finden, oder verwenden Sie v für beide Delta? –

+0

Für jedes Delta separat. –

+0

Vielen Dank Marcin :), ich brauche auch Hilfe bei der Anwendung Dropout, können Sie einen Beitrag dafür teilen? –

Verwandte Themen