Добавление термина импульса в онлайн-обновление веса обратного распространения?

Я внедрил ИНС для двухслойной сети, мне нужно изменить код обновления веса с импульсом, но мне нужно знать, как я могу его обновить. ниже приведен код обновления только веса. Приведенный ниже код обновляет вес для каждого увиденного примера. 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

person Zeeshan shaikh    schedule 01.05.2016    source источник
comment
Какой импульс вы хотите реализовать? Классический или Нестровский?   -  person Marcin Możejko    schedule 01.05.2016
comment
Мне просто нужно добавить обновление импульса, я точно не знаю, в чем разница между классикой или нестроем?   -  person Zeeshan shaikh    schedule 01.05.2016
comment
Посмотрите этот пост: stats.stackexchange.com/questions/179915/   -  person Marcin Możejko    schedule 01.05.2016
comment
Итак, из приведенного выше поста мне нужен градиентный спуск на основе импульса   -  person Zeeshan shaikh    schedule 01.05.2016


Ответы (1)


Из нашего разговора получается, что вы хотите реализовать классический импульсный метод (не Нестрова). Поэтому вам нужен дополнительный параметр - скорость v и время t и импульс mu константы.

В начале обучения вы должны установить скорость 0 :

v = 0

и выберите какое-либо значение t (например, установите его на 0,1) и mu (например, 0,9).

Во время каждой итерации тренировки вы должны менять свои веса в соответствии со следующим правилом:

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

Параметры mu и t являются метапараметрами, и вы можете найти их хорошие значения с помощью сетки или случайного поиска.

person Marcin Możejko    schedule 01.05.2016
comment
Мне нужно найти v для обеих дельт отдельно или использовать одну и ту же v для обеих дельт? - person Zeeshan shaikh; 03.05.2016
comment
Для каждой дельты отдельно. - person Marcin Możejko; 03.05.2016
comment
Спасибо, Марцин :), мне также нужна помощь в применении к нему отсева, можете ли вы поделиться каким-либо постом для этого? - person Zeeshan shaikh; 03.05.2016
comment
Уточните, о чем именно вы хотите прочитать (или реализовать), или задать другой вопрос в стеке :) Комментарии предназначены только для указания ваших вопросов или ответов на SO. - person Marcin Możejko; 03.05.2016
comment
пожалуйста, проверьте, я отредактировал свой вопрос с кодом импульса. Дайте мне знать, если я сделал какую-либо ошибку. - person Zeeshan shaikh; 04.05.2016