在在线反向传播权重更新中添加动量项?

时间:2016-05-01 19:16:04

标签: neural-network deep-learning backpropagation momentum feed-forward

我已经为双层网络实现了ANN,我需要用动量修改我的重量更新代码,但我需要知道如何更新它。下面是仅重量更新的代码快照。下面的代码更新了它看到的每个示例的权重,hiddenWights是隐藏的图层权重,outputWeights是输出图层权重。

 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

1 个答案:

答案 0 :(得分:0)

从我们的谈话中可以看出,你想要实现一种经典的动量方法(而不是Nestrov)。因此,您需要一个额外的参数 - 速度v时间 t动力 mu常量。

在学习之初,您应将速度设置为0

v = 0

并选择t的某个值(例如设置为0.1)和mu(例如0.9)。

在每次训练迭代期间,您应根据以下规则更改权重:

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

参数mut是元参数,您可以通过网格或随机搜索找到它们的良好值。