Требования к памяти для обратного распространения - почему бы не использовать среднее значение активации? - PullRequest
0 голосов
/ 13 ноября 2018

Мне нужна помощь в понимании требований к памяти нейронной сети и их различий между процессами обучения и оценки.Более конкретно, требования к памяти для процесса обучения (я использую Keras API, работающий поверх TensorFlow).

Для CNN, который содержит N весов, при использовании пакета размера x существуетпостоянный объем памяти, необходимый для самих весов и входных данных.Во время прямого прохода графическому процессору требуются дополнительные x * N единиц памяти (конкретный необходимый объем не имеет решающего значения для вопроса) для одновременной передачи всех выборок и расчета активации каждого нейрона.

Мой вопрос касается процесса обратного распространения , похоже, что для этого процесса требуются дополнительные x * N единиц памяти (*) для определенного градиента каждого веса для каждого образца.Насколько я понимаю, это означает, что алгоритм вычисляет конкретные градиенты для каждого образца, а затем суммирует их для обратного распространения на предыдущий слой.

Q. Поскольку имеется толькоодин шаг обновления на партию, почему расчет градиента не выполняется для средней активации каждого нейрона?Таким образом, дополнительная необходимая память для обучения будет только (x + 1) * N, а не 2 * x * N.

(*). Это соответствует моему собственному небольшому эксперименту о максимально допустимом размере партии во времяоценка (~ 4200) и обучение (~ 1200).Очевидно, это очень упрощенный способ взглянуть на требования к памяти

1 Ответ

0 голосов
/ 02 декабря 2018

Короткий ответ: : именно так работает алгоритм обратного распространения SGD в мини-пакете. Оглядываясь назад на происхождение и разницу между использованием стандартной SGD и мини-партии SGD, становится понятнее, почему.

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

В мини-партии SGD используется тот же принцип, с одним отличием - градиенты накапливаются из нескольких выборок, а обновление выполняется только один раз для каждой x выборок. Это помогает получить плавный градиент во время обучения и позволяет параллельно передавать несколько образцов через модель. Это алгоритм, который используется при обучении с использованием кераса / тензорного потока в мини-партиях (обычно называемых партиями, но этот термин фактически означает использование приличного градиента партии, что немного отличается от алгоритма).

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

...