www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Оценка оптимальной скорости обучения для глубокой нейронной сети

Дата публикации Nov 13, 2017

Источник:https://www.hellobc.com.au/british-columbia/things-to-do/winter-activities/skiing-snowboarding.aspx

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

В этом посте я описываю простой и эффективный способ найти разумную скорость обучения, на которой я училсяfast.ai Курс глубокого обучения, Я принимаю новую версию курса лично вУниверситет Сан-Франциско, Это еще не доступно для широкой публики, но будет в конце года вcourse.fast.ai(которая в настоящее время имеет прошлогоднюю версию).

Как скорость обучения влияет на обучение?

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

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

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

Градиентный спуск с малой (сверху) и большой (снизу) скоростью обучения. Источник: курс машинного обучения Эндрю Нг на Coursera

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

Есть несколько способов выбрать хорошую отправную точку для скорости обучения. Наивный подход состоит в том, чтобы попробовать несколько разных значений и посмотреть, какое из них дает вам наилучшую потерю, не жертвуя скоростью обучения. Мы могли бы начать с большого значения, такого как 0,1, затем попробовать экспоненциально более низкие значения: 0,01, 0,001 и т. Д. Когда мы начинаем обучение с большой скоростью обучения, потери не улучшаются и, вероятно, даже растут, пока мы выполняем первые несколько итераций подготовка. При обучении с меньшей скоростью обучения, в какой-то момент значение функции потерь начинает уменьшаться в первые несколько итераций. Эта скорость обучения - это максимум, который мы можем использовать, любое большее значение не позволяет обучению сходиться. Даже это значение слишком велико: оно не будет достаточно хорошим, чтобы готовиться к нескольким эпохам, потому что со временем сети потребуются более точные обновления веса. Следовательно, разумная скорость обучения, с которой можно начать обучение, будет, вероятно, на 1–2 порядка ниже.

Там должно быть умнее

Лесли Н. Смит описывает мощный метод выбора диапазона скоростей обучения для нейронной сети в разделе 3.3 статьи 2015 года «Циклические учебные курсы для обучения нейронных сетей»

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

Скорость обучения увеличивается после каждой мини-партии

Запишите скорость обучения и потери обучения для каждой партии. Затем составьте график потерь и скорости обучения. Как правило, это выглядит так:

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

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

Нам нужно выбрать точку на графике с самым быстрым уменьшением потерь. В этом примере функция потерь быстро уменьшается, когда скорость обучения составляет от 0,001 до 0,01.

Еще один способ взглянуть на эти числа - вычислить скорость изменения потерь (производную функции потерь по числу итераций), затем построить график изменения скорости по оси Y и скорости обучения по оси X.

Скорость изменения убытков

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

Скорость изменения убытка, простая скользящая средняя

Это выглядит лучше На этом графике нам нужно найти минимум. Это близко к lr = 0,01.

Реализация

Джереми Ховард и его команда вUSF Data Instituteразработаныfast.aiбиблиотека глубокого обучения, представляющая собой абстракцию высокого уровня поверх PyTorch. Это простой в использовании и в то же время мощный набор инструментов для обучения современным моделям глубокого обучения. Джереми использует библиотеку в последней версии курса Deep Learning (fast.ai).

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

В библиотеке нет кода для определения скорости изменения функции потерь, но вычислить тривиально:

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

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

Я не видел готовых использовать реализации этого метода поиска скорости обучения для других библиотек, таких как Keras, но писать его было бы тривиально. Просто запустите тренировку несколько раз, по одной мини-партии за раз. Увеличьте скорость обучения после каждой мини-партии, умножив ее на небольшую константу. Остановите процедуру, когда потеря становится намного выше, чем ранее наблюдаемое наилучшее значение (например, когда потеря тока> лучшая потеря * 4).

Это еще не все

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

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

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


Смотрите также:

Fast.ai: чему я научился на уроках 1–3

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

hackernoon.com

Лучшие источники глубоких новостей обучения

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

medium.com

Разговор Джеффа Дина о широкомасштабном глубоком обучении

Джефф Дин - старший научный сотрудник Google. Он возглавляет проект Google Brain. Он говорил в Y Combinator в августе 2017 года.…

becominghuman.ai

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map