Как обновляются веса в методе пакетного обучения в нейронных сетях?


15

Может кто-нибудь сказать мне, как я должен построить нейронную сеть, используя пакетный метод?

Я прочитал, что в пакетном режиме для всех выборок в обучающем наборе мы вычисляем ошибку, дельту и, следовательно, веса дельты для каждого нейрона в сети, а затем вместо немедленного обновления весов мы накапливаем их, а затем перед запуском В следующую эпоху мы обновляем вес.

Я также где-то читал, что пакетный метод похож на онлайн-метод, но с той разницей, что нужно только суммировать ошибки для всех выборок в обучающем наборе, а затем взять их среднее значение и затем использовать его для обновления весов так же, как каждый делает в онлайн-метод (разница только в этом среднем), как это:

for epoch=1 to numberOfEpochs

   for all i samples in training set

         calculate the errors in output layer
         SumOfErrors += (d[i] - y[i])
   end

   errorAvg = SumOfErrors / number of Samples in training set

   now update the output layer with this error
   update all other previous layers

   go to the next epoch

end
  • Какой из них действительно является правильной формой пакетного метода?
  • В случае первого, не накапливается ли все дельта-веса в огромном количестве?

1
«Правильный» метод зависит от контекста. Оказывается, что во многих случаях обновление весов только один раз за эпоху будет сходиться гораздо медленнее, чем стохастическое обновление (обновление весов после каждого примера). Я добавлю, что есть консенсус, что вы обычно хотите использовать какую-то форму пакетного обновления, но гораздо чаще, чем 1 раз за эпоху.
Тахлор

Ответы:


9

Использование среднего или суммы эквивалентно, в том смысле, что существуют пары скоростей обучения, для которых они производят одинаковое обновление.

Чтобы подтвердить это, сначала отзовите правило обновления:

ΔвесяJзнак равно-αЕвесяJ

μЕNNμЕNвес

ΔвесяJзнак равно-α(Nμ)весяJзнак равно-αNμвесяJ

На ваш второй вопрос фраза «накапливание дельта-весов» подразумевает, что один из этих методов сохраняет весовые обновления. Это не так: пакетное обучение накапливает ошибки . Есть только один, единственный вектор в данную эпоху. (В вашем коде псевдокода пропущен шаг обновления весов , после которого можно сбросить .)ΔвесΔвес


1
Являются ли мини-градиентный спуск таким же, как градиентный спуск? Я потерян здесь! если нет, то в чем разница между ними? Поправьте меня, если я ошибаюсь, в пакетном режиме весь набор данных должен быть прочитан в пакетном режиме, вычислены градиенты, а когда все прочитано, то они усредняются, а затем параметры обновляются, в то время как в мини-пакете каждый считывается пакет, вычисляются градиенты, затем обновляются параметры, а затем читается следующий мини-пакет до окончания одной эпохи.
Рика

1
Это общее определение: обновлять параметры, используя одно подмножество обучающих данных за раз. (Существуют некоторые методы, в которых мини-партии отбираются случайным образом до сходимости, т.е. партия не будет проходить в эпоху.) Посмотрите , полезно ли это .
Шон Пасха

0

Два ответа эквивалентны. Лично я бы воспринимал это как среднюю ошибку вместо суммы. Но помните, что у градиентного спуска есть параметр, называемый скоростью обучения, и что только часть градиента ошибки вычитается. То есть, если ошибка определяется как общее среднее значение, можно компенсировать, изменяя скорость обучения.


спасибо, но если они действительно одинаковы, зачем беспокоиться о том, чтобы тратить столько памяти на сохранение накопительных обновлений для каждого шаблона, когда мы можем суммировать только те ошибки, которые были бы только простой переменной?
Рика
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.