Является ли оптимизатор Адама действительно RMSprop плюс импульс? Если да, то почему у него нет параметра импульса?

Вот ссылка на оптимизаторы tensorflow. И там вы можете видеть, что RMSprop принимает импульс в качестве аргумента, в то время как Адам этого не делает. Так что я в замешательстве. Оптимизация Адама притворяется оптимизацией RMSprop с импульсом, например:

Адам = RMSprop + Momentum

Но почему тогда у RMSprop есть параметр импульса, а у Адама нет?


person Yoskutik    schedule 23.04.2020    source источник


Ответы (1)


Хотя выражение «Адам — это RMSProp с импульсом» действительно широко используется, это всего лишь очень грубое сокращение, и его не следует принимать за чистую монету; уже в исходной документе Адама было четко разъяснено (стр. 6):

Есть несколько важных различий между RMSProp с импульсом и Адамом: RMSProp с импульсом генерирует обновления своих параметров, используя импульс на перемасштабированном градиенте, тогда как обновления Адама напрямую оцениваются с использованием скользящего среднего первого и второго моментов градиента.

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

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

или в Stanford CS231n: CNN для визуального распознавания (опять же, выделение добавлено) :

Адам — это недавно предложенное обновление, которое немного похоже на RMSProp с импульсом.

Тем не менее, некоторые другие фреймворки действительно включают параметр momentum для Адама, но на самом деле это параметр beta1; вот CNTK:

momentum (float, list, output of momentum_schedule()) — график импульса. Обратите внимание, что это параметр beta1 в статье Адама. Для получения дополнительной информации см. эту статью CNTK Wiki.

Так что не принимайте это слишком буквально и не теряйте из-за этого свой сон.

person desertnaut    schedule 23.04.2020