Введение

Эта статья является продолжением этого.
Изучив классическое машинное обучение, я изучил глубокое обучение. Помимо машинного обучения, целью было изучение нескольких методов глубокого обучения и понимание того, как найти лучшую модель. В прошлом я читал несколько книг об DL, но на самом деле я никогда не использовал его только по знанию. Как правило, обработка изображений часто используется в исследованиях глубокого обучения, но на этот раз это регрессионная модель, которая прогнозирует цены на основе 91 характеристики объявлений Airbnb. Были какие-то фреймворки и я не знал с чего начать, поэтому по совету ментора решил использовать Keras со ссылкой на блог[1]. Я использовал Адама, хотя были разные оптимизаторы, потому что на этот раз нужно знать основы использования.

Спецификации машины были следующими.
ПК: MacBook Air (Retina, 13 дюймов, 2018 г.)
Процессор: Intel Core i5 1,6 ГГц
Память: 16 ГБ

Полученные знания

Некоторые фреймворки

  • научное обучение
  • SparkML
  • Керас
  • ТензорФлоу
  • ПиТорч
  • быстрый.ай
  • Теано

Слой

  • свертка
  • РеЛУ
  • Объединение

Тип

Выбывать

Чтобы предотвратить переоснащение, намеренно деактивируйте определенный процент нейронов.

Ранняя остановка

Ранняя остановка — это метод, который позволяет вам указать произвольно большое количество эпох обучения и остановить обучение, как только производительность модели перестанет улучшаться в наборе данных проверки задержки.[2]

Оптимизатор

Оптимизаторы обновляют параметры веса, чтобы минимизировать функцию потерь.

  • сингапурский доллар
  • ИмпульсSGD
  • НАГ
  • АдаГрад
  • RMSprop
  • АдаДельта
  • Адам
  • РАДам
  • RMSpropGraves
  • СМОРМС3
  • Адамакс
  • Надам

Настройка параметров

визуализировать

Инструменты

  • TensorBoard
  • Бакке

Понимание обучения через интерпретируемость

Трансферное обучение

Классификатор

  • ВГГ-16
  • ВГГ-19
  • InseptionV3
  • XПоддержка
  • Реснет-50

НЛП

Модели для СМИ

  • Глубокий сон
  • Преобразование изображения в изображение с условными состязательными сетями
  • Пикс2Пикс
  • ЦиклГАН
  • Захват экрана
  • Волновая сеть
  • Генерация подписей к изображениям ACS

Практические советы по построению моделей глубокого обучения[3]

  • Используйте оптимизатор ADAM.
  • ReLU — хорошая нелинейность (функция активации).
  • НЕ используйте функцию активации на выходном слое.
  • ОБЯЗАТЕЛЬНО добавляйте смещение в каждом слое.
  • Используйте инициализацию в масштабе дисперсии.
  • Отбелите (нормализуйте) ваши входные данные.
  • Масштабируйте входные данные таким образом, чтобы разумно сохранить их динамический диапазон.
  • Не беспокойтесь о снижении скорости обучения (обычно).
  • Если ваш слой свертки имеет 64 или 128 фильтров, этого, вероятно, достаточно.
  • Объединение предназначено для инвариантности преобразования.

Техника

Весь Jupyter Notebook здесь.

Моделирование

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

Результаты

Изменение размера партии в базовой модели

Сначала я попробовал модель с одним скрытым слоем со 100 эпохами. Изменение размера партии с 50 до 150 улучшило значение r2 проверки с 0,615 до 0,620, а также сократило время обучения с 2 часов 44 минут 44 секунд до 1 часа 19 минут 14 секунд. Кажется, что количество данных, которые нужно изучить в каждой партии, лучше, когда они собраны в определенной степени, а время сокращается, потому что уменьшается количество повторений. Когда размер был увеличен до 300, он был улучшен таким же образом, но улучшение замедлилось, поэтому я решил продолжить размер партии 300.

Стандартизация

Добавлен стандартизирующий слой перед входным слоем. Значение r2 при проверке было 0,62, то же самое, что и раньше, но на этот раз я увеличил количество эпох до 300. Кривая обучения была не очень стабильной и не давала хороших результатов. Я уже внес коррективы в значение цены, взяв лог, поэтому решил, что нормализация не нужна, и решил провести последующие испытания.

Настройте топологию нейронной сети

Было проведено сравнение между более глубокой сетью и более широкой сетью. В случае добавления одного скрытого слоя проверка r2 составляет 0,648. С другой стороны, количество нейронов увеличилось с 91 до 150, что составило 0,629. Оба улучшились, но лучший результат был получен с более глубокими слоями. Поскольку время обучения не отличалось, я решил после этого использовать более глубокую модель.

Регуляризация отсева

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

Более глубокая модель

Это был хороший результат углубления сети, поэтому я решил углубиться для дальнейшего улучшения. Во-первых, когда был добавлен один скрытый слой, проверка r2 улучшилась с 0,648 до 0,664. Время обучения также увеличилось с 3 ч 1 мин 34 с до 3 ч 42 мин 19 с, что было хорошим результатом. Добавив еще один скрытый слой, r2 стал немного лучше — 0,665, но время обучения составило 4 часа 43 минуты 29 секунд. Я решил, что увеличивать количество слоев сверх этого значения неэффективно. Однако было подтверждено, что углубление настолько, насколько позволяют ресурсы, имеет определенный эффект.

Ранняя остановка

Вышеупомянутая пятислойная модель (deeper_deeper_deeper_model) была изучена за 300 эпох, но, похоже, она еще не достигла плато. Поэтому я увеличил количество эпох и использовал раннюю остановку. Правила ранней остановки дают представление о том, сколько итераций можно выполнить, прежде чем учащийся начнет переобуваться. Однако эта модель остановилась, не достигнув предыдущего лучшего результата. Модель можно улучшить, установив базовый параметр, но ожидается, что она остановится сразу после превышения базового уровня, поэтому я подумал, что это бессмысленно, поскольку необходимо знать лучший результат. Я решил не использовать его в последующих испытаниях и, как и раньше, сравнил результаты на определенном количестве эпох.

Снижение скорости обучения

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

Вывод

Я изучил основы построения моделей глубокого обучения с помощью Keras. Чтобы получить наилучшие результаты обучения, было много настойчивых вещей, таких как структура слоев и настройка некоторых параметров. Это то же самое, что и предыдущее классическое машинное обучение. Есть еще части, которые я не очень понимаю в результатах, поэтому я буду продолжать учиться. Поле AutoML, кажется, развивается в последнее время. Я также понял важность автоматизации этой работы по настройке и получения хороших результатов, не завися от опыта мастеров DL. Лично я получил удовольствие от процесса настройки и получения хороших результатов. Однако время ожидания очень велико, поэтому в будущем я хотел бы использовать SaaS или облачные сервисы, чтобы использовать среду с более высокими характеристиками и проводить больше проб и ошибок. Кроме того, трансферное обучение имеет широкий спектр применений. На самом деле, поскольку у Google нет конкурирующего объема данных и ресурсов, я также заинтересован в использовании общедоступной модели в качестве практического сервиса. Что касается моего собственного обучения, мне потребуется время, чтобы решить проблемы Kaggle.

использованная литература

[1] Учебное пособие по регрессии с библиотекой глубокого обучения Keras на Python
https://machinelearningmastery.com/regression-tutorial-keras-deep-learning-library-python/

[2] Используйте раннюю остановку, чтобы остановить обучение нейронных сетей в нужное время
https://machinelearningmastery.com/how-to-stop-training-deep-neural-networks-at-the-right- время, использующее раннюю остановку/

[3] Практические советы по созданию глубоких нейронных сетей
https://pcc.cs.byu.edu/2017/10/02/practical-advice-for-building-deep-neural-networks/