Может кто-нибудь сказать мне, как я должен построить нейронную сеть, используя пакетный метод?
Я прочитал, что в пакетном режиме для всех выборок в обучающем наборе мы вычисляем ошибку, дельту и, следовательно, веса дельты для каждого нейрона в сети, а затем вместо немедленного обновления весов мы накапливаем их, а затем перед запуском В следующую эпоху мы обновляем вес.
Я также где-то читал, что пакетный метод похож на онлайн-метод, но с той разницей, что нужно только суммировать ошибки для всех выборок в обучающем наборе, а затем взять их среднее значение и затем использовать его для обновления весов так же, как каждый делает в онлайн-метод (разница только в этом среднем), как это:
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
- Какой из них действительно является правильной формой пакетного метода?
- В случае первого, не накапливается ли все дельта-веса в огромном количестве?
Ответы:
Использование среднего или суммы эквивалентно, в том смысле, что существуют пары скоростей обучения, для которых они производят одинаковое обновление.
Чтобы подтвердить это, сначала отзовите правило обновления:
На ваш второй вопрос фраза «накапливание дельта-весов» подразумевает, что один из этих методов сохраняет весовые обновления. Это не так: пакетное обучение накапливает ошибки . Есть только один, единственный вектор в данную эпоху. (В вашем коде псевдокода пропущен шаг обновления весов , после которого можно сбросить .)Δ ш Δ ш
источник
Два ответа эквивалентны. Лично я бы воспринимал это как среднюю ошибку вместо суммы. Но помните, что у градиентного спуска есть параметр, называемый скоростью обучения, и что только часть градиента ошибки вычитается. То есть, если ошибка определяется как общее среднее значение, можно компенсировать, изменяя скорость обучения.
источник