Нежное введение в алгоритм оптимизации Адама для глубокого обучения

Нежное введение в алгоритм оптимизации Адама для глубокого обучения

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

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

В этом посте вы получите краткое введение в алгоритм оптимизации Адама для использования в глубоком обучении.

Прочитав этот пост, вы узнаете:

  • Что такое алгоритм Адама и некоторые преимущества использования этого метода для оптимизации ваших моделей.
  • Как работает алгоритм Адама и чем он отличается от связанных методов AdaGrad и RMSProp.
  • Как можно настроить алгоритм Адама и часто используемые параметры конфигурации.

Начните свой проект с моей новой книгой Better Deep Learning, включая пошаговые инструкции и Исходный код Python файлы для всех примеров.

Давайте начнем.

Что такое алгоритм оптимизации Адама?

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

Адам был представлен Дидериком Кингмой из OpenAI и Джимми Ба из Университета Торонто в их статье ICLR 2015 года (плакат) под названием «Адам: метод стохастической оптимизации». Я процитирую их статью в этом посте, если не указано иное.

Алгоритм называется Адам. Это не аббревиатура и не пишется как «АДАМ».

… Имя Адам происходит от оценки адаптивного момента.

Представляя алгоритм, авторы перечисляют привлекательные преимущества использования Adam для решения невыпуклых задач оптимизации, а именно:

  • Легко реализовать.
  • Вычислительная эффективность.
  • Небольшие требования к памяти.
  • Инвариантно к диагональному изменению масштаба градиентов.
  • Хорошо подходит для задач, больших с точки зрения данных и / или параметров.
  • Подходит для нестационарных целей.
  • Подходит для задач с очень шумными / редкими градиентами.
  • Гиперпараметры интерпретируются интуитивно и обычно не требуют настройки.

Хотите лучших результатов с помощью глубокого обучения?

Пройдите мой бесплатный 7-дневный ускоренный курс электронной почты (с образцом кода).

Нажмите, чтобы зарегистрироваться, а также получите бесплатную электронную версию курса в формате PDF.

Загрузите БЕСПЛАТНЫЙ мини-курс

Как работает Адам?

Адам отличается от классического стохастического градиентного спуска.

Стохастический градиентный спуск поддерживает единую скорость обучения (называемую альфа) для всех обновлений веса, и скорость обучения не изменяется во время обучения.

Скорость обучения поддерживается для каждого сетевого веса (параметра) и отдельно адаптируется по мере развития обучения.

Метод вычисляет индивидуальные скорости адаптивного обучения для различных параметров на основе оценок первого и второго моментов градиентов.

Авторы описывают Адама как объединяющего преимущества двух других расширений стохастического градиентного спуска. Конкретно:

  • Адаптивный градиентный алгоритм (AdaGrad), который поддерживает скорость обучения по параметрам, что улучшает производительность при решении проблем с разреженными градиентами (например, проблемы естественного языка и компьютерного зрения).
  • Среднеквадратичное распространение (RMSProp), который также поддерживает скорость обучения по параметрам, которая адаптируется на основе среднего недавнего значения градиентов для веса (например, насколько быстро он изменяется). Это означает, что алгоритм хорошо справляется с интерактивными и нестационарными проблемами (например, с шумом).

Адам осознает преимущества как AdaGrad, так и RMSProp.

Вместо адаптации скорости обучения параметрам на основе среднего первого момента (среднего), как в RMSProp, Адам также использует среднее значение вторых моментов градиентов (нецентрированная дисперсия).

В частности, алгоритм вычисляет экспоненциальное скользящее среднее градиента и квадрата градиента, а параметры beta1 и beta2 управляют скоростью затухания этих скользящих средних.

Начальное значение скользящих средних и значения beta1 и beta2, близкие к 1,0 (рекомендуется), приводят к смещению оценок момента в сторону нуля. Это смещение преодолевается путем сначала вычисления смещенных оценок, а затем вычисления скорректированных смещенных оценок.

Документ вполне читаем, и я рекомендую вам прочитать его, если вас интересуют конкретные детали реализации.

Если вы хотите узнать, как написать Адама с нуля на Python, см. Руководство:

Адам эффективен

Adam - популярный алгоритм в области глубокого обучения, потому что он быстро дает хорошие результаты.

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

В оригинальной статье Адам эмпирически продемонстрировал, что конвергенция соответствует ожиданиям теоретического анализа. Адам был применен к алгоритму логистической регрессии в наборах данных распознавания цифр MNIST и анализа тональности IMDB, алгоритму многослойного персептрона в наборе данных MNIST и сверточным нейронным сетям в наборе данных распознавания изображений CIFAR-10. Они приходят к выводу:

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

Сравнение Адама с другими алгоритмами оптимизации, обучающими многослойный персептрон

Сравнение Адама с другими алгоритмами оптимизации, обучающими многослойный персептрон
Взято из книги Адама: метод стохастической оптимизации, 2015 г.

Себастьян Рудер разработал всесторонний обзор современных алгоритмов оптимизации градиентного спуска под названием «Обзор алгоритмов оптимизации градиентного спуска», опубликованный сначала в виде сообщения в блоге, а затем в техническом отчете в 2016 году.

В основном статья представляет собой экскурсию по современным методам. В его разделе под названием «Какой оптимизатор использовать?«, Он рекомендует использовать Adam.

Таким образом, RMSprop, Adadelta и Adam - очень похожие алгоритмы, которые хорошо работают в аналогичных обстоятельствах. […] его коррекция смещения помогает Адаму немного превзойти RMSprop к концу оптимизации, поскольку градиенты становятся более разреженными. В этом отношении Адам может быть лучшим выбором в целом.

В Стэнфордском курсе глубокого обучения для компьютерного зрения под названием «CS231n: сверточные нейронные сети для визуального распознавания», разработанном Андреем Карпати и др., Алгоритм Адама снова предлагается в качестве метода оптимизации по умолчанию для приложений глубокого обучения.

На практике в настоящее время в качестве алгоритма по умолчанию рекомендуется использовать Adam, который часто работает немного лучше, чем RMSProp. Однако часто в качестве альтернативы также стоит попробовать SGD + Nesterov Momentum.

А позже заявил более ясно:

Два рекомендуемых обновления: SGD + Nesterov Momentum или Adam.

Адама адаптируют для тестов в статьях по глубокому обучению.

Например, он использовался в статье «Покажи, посети и расскажи: создание нейронных подписей к изображениям с визуальным вниманием» о внимании к подписи к изображениям и «НАРИСОВАТЬ: рекуррентная нейронная сеть для создания изображений» о генерации изображений.

Вы знаете какие-нибудь другие примеры Адама? Дай мне знать в комментариях.

Параметры конфигурации Адама

  • альфа. Также называется скоростью обучения или размером шага. Пропорция обновления весов (например, 0,001). Большие значения (например, 0,3) приводят к более быстрому начальному обучению до обновления скорости. Меньшие значения (например, 1.0E-5) замедляют обучение прямо во время обучения
  • beta1. Экспоненциальная скорость затухания для оценок первого момента (например, 0,9).
  • beta2. Скорость экспоненциального затухания для оценок второго момента (например, 0,999). Это значение должно быть установлено близко к 1.0 для задач с разреженным градиентом (например, проблемы с НЛП и компьютерным зрением).
  • эпсилон. Это очень маленькое число, чтобы предотвратить любое деление на ноль в реализации (например, 10E-8).

Кроме того, снижение скорости обучения также можно использовать с Адамом. В документе используется скорость затухания alpha = alpha / sqrt

В статье Адама говорится:

Хорошие настройки по умолчанию для протестированных задач машинного обучения: альфа = 0,001, бета1 = 0,9, бета2 = 0,999 и эпсилон = 10-8.

Документация TensorFlow предлагает некоторую настройку epsilon:

Значение по умолчанию 1e-8 для epsilon в целом может быть не очень хорошим значением по умолчанию. Например, при обучении сети Inception на ImageNet текущий хороший выбор - 1.0 или 0.1.

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

  • TensorFlow: скорость обучения = 0,001, бета1 = 0,9, бета2 = 0,999, эпсилон = 1e-08.
    Керас: lr = 0,001, beta_1 = 0,9, beta_2 = 0,999, epsilon = 1e-08, распад = 0,0.
  • Блоки: скорость обучения = 0,002, beta1 = 0,9, beta2 = 0,999, epsilon = 1e-08, decay_factor = 1.
  • Лазанья: скорость_учения = 0,001, бета1 = 0,9, бета2 = 0,999, эпсилон = 1e-08
  • Caffe: скорость_обучения = 0,001, бета1 = 0,9, бета2 = 0,999, эпсилон = 1e-08
  • MxNet: скорость_обучения = 0,001, бета1 = 0,9, бета2 = 0,999, эпсилон = 1e-8
  • Факел: скорость_обучения = 0,001, бета1 = 0,9, бета2 = 0,999, эпсилон = 1e-8

Вы знаете какие-либо другие стандартные конфигурации Адама? Дай мне знать в комментариях.

Дальнейшее чтение

В этом разделе перечислены ресурсы, чтобы узнать больше об алгоритме оптимизации Адама.

Вы знаете какие-нибудь другие полезные ресурсы об Адаме? Дай мне знать в комментариях.

Резюме

В этом посте вы открыли для себя алгоритм оптимизации Адама для глубокого обучения.

В частности, вы узнали:

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

У вас есть вопросы?
Задайте свои вопросы в комментариях ниже, и я постараюсь ответить.

Разрабатывайте лучшие модели глубокого обучения сегодня!

Лучшее глубокое обучение

Тренируйтесь быстрее, меньше перетяжек и ансамбли

... всего несколькими строками кода Python

Узнайте, как в моей новой электронной книге:
Лучшее глубокое обучение

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

Принесите более глубокое обучение в свои проекты!

Пропустите академики. Только результаты.

Посмотрите, что внутри

Вас также может заинтересовать