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

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
  • Какой из них действительно является правильной формой пакетного метода?
  • В случае первого, не накапливается ли все дельта-веса в огромном количестве?
Rika
источник
1
«Правильный» метод зависит от контекста. Оказывается, что во многих случаях обновление весов только один раз за эпоху будет сходиться гораздо медленнее, чем стохастическое обновление (обновление весов после каждого примера). Я добавлю, что есть консенсус, что вы обычно хотите использовать какую-то форму пакетного обновления, но гораздо чаще, чем 1 раз за эпоху.
Тахлор

Ответы:

9

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

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

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

μЕNNμЕNвес

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

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

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

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

jlimahaverford
источник
спасибо, но если они действительно одинаковы, зачем беспокоиться о том, чтобы тратить столько памяти на сохранение накопительных обновлений для каждого шаблона, когда мы можем суммировать только те ошибки, которые были бы только простой переменной?
Рика