Перевод | База технологий искусственного интеллекта
Участвовать | Лю Чанг
[Введение в базовый лагерь технологий ИИ]В 2017 году было отработано и применено множество алгоритмов искусственного интеллекта. Брайан Мухиа, автор известного блога Hack Noon, считает, что если вы хотите играть в искусственный интеллект, вы должны не только обладать необходимыми математическими знаниями, но и иметь реальный опыт работы с искусственным интеллектом.
Поэтому Мухиа принял участие в конкурсе искусственного интеллекта под названием AI Grant, а в сентябре прошлого года подал заявку на «Практическое глубокое обучение для программистов», которое преподавал Джереми Ховард на сайте fast.ai (второе издание).
Всего за 7 недель Мухия научился использовать 8 методов искусственного интеллекта в инженерной практике и обобщил их.
Для каждого практического метода Мухия обрисовывает общую идею с помощью короткого кода fastai и указывает, применима ли методика в целом, например: для распознавания и классификации изображений, обработки естественного языка, моделирования структурированных данных или совместной фильтрации), или для конкретного глубокого применения. обучающий тип данных.
Оригинальное примечание автора: в этом сообщении в блоге наборы данных, используемые для методов распознавания изображений, взяты из двух соревнований на Kaggle.
Dogs vs. Cats: Kernels Edition, Dog Breed Identification
Ссылка: https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/
Planet: Understanding the Amazon from Space
Ссылка: https://www.kaggle.com/c/planet-understanding-the-amazon-from-space
Все практические методы, упомянутые в статье, выполняются через эффективный интерфейс Jupyter Notebook, который поддерживается как самим PyTorch, так и библиотекой глубокого обучения fastai.
Мухиа разработал классификационную задачу, аналогичную соревнованию собак и кошек «Пауки против скорпионов». Погуглив «паук» и «пустынный скорпион», автор загрузил около 1500 изображений из Google Images, из которых автор затем удалил изображения не в формате jpg и неполные изображения. Около 815 изображений остаются в качестве данных для классификации задач.
В обучающем наборе есть 290 изображений для каждого класса [пауки, скорпионы], а в тестовом/проверочном наборе — 118 изображений пауков и 117 изображений скорпионов. После серии тренировок принятая авторами модель имеет точность классификации до 95%.
БытьБыть
Как создать классификатор изображений мирового уровня
▌Восемь лучших практик глубокого обучения
1. Полное трансферное обучение с точно настроенными моделями VGG-16 и ResNext50 (для компьютерного зрения и классификации изображений).
В целом, для задач классификации изображений лучше работают архитектуры нейронных сетей.Для конкретных задач можно значительно повысить производительность классификатора, настроив нейронную сеть на более высокую производительность. .
50-слойная сверточная нейронная сеть-остаточная сеть ResNext50 — хороший выбор. Сеть была предварительно обучена 1000 классам в наборе данных ImageNet и работала очень хорошо. Он может извлекать функции из данных изображения и использовать их несколько раз.
Когда мы хотим использовать его для решения практических задач, нам нужно только заменить последний выходной слой, то есть заменить 1000-мерный выходной слой в исходной задаче ImageNet двумерным выходным слоем. Эти две категории вывода существуют в папке PATH во фрагменте кода выше.
Я думаю, что для решения задачи классификации пауков и скорпионов необходимо отметить следующие моменты:
БытьБыть
Обратите внимание, что два содержимого папки тренировочного набора сами по себе являются папками, и каждая папка содержит 290 изображений.
На следующем рисунке показан пример графика процесса тонкой настройки, который масштабирует окончательный вывод слоя с 1000-мерного на 10-мерный:
БытьБыть
2. Циклическая скорость обучения (обычно применимо)
Скорость обучения должна быть самым важным гиперпараметром для обучения глубоких нейронных сетей. Обычная практика такова: в неадаптивных условиях (т. е. алгоритмы, которые не используют Adam, AdaDelta или их варианты) инженер/исследователь глубокого обучения проводит наборы параллельных экспериментов, каждый из которых имеет небольшую разницу в скорости обучения. Этот подход чрезвычайно требователен как к данным, так и к участникам, а отсутствие опыта или большой набор данных, подверженный ошибкам, может сделать весь процесс более трудоемким.
Однако в 2015 году Лесли Н. Смит из Исследовательской лаборатории ВМС США нашла способ автоматического поиска наилучшей скорости обучения, начиная с минимального значения и запуская в сети несколько мини-пакетов данных. регулировка скорости обучения до тех пор, пока значение потерь не начнет уменьшаться.
Вот два блога студентов fast.ai, объясняющих метод периодической скорости обучения.
http://teleported.in/posts/cyclic-learning-rate/
https://techburst.io/improving-the-way-we-work-with-learning-rate-5e99554f163b
В fastai вы просто запускаете функцию lr_find() для изученного объекта, и алгоритм отжига скорости обучения будет работать. В то же время функцию sched.plot() можно использовать для определения точек, совпадающих с оптимальной скоростью обучения.
БытьБыть
0,1 кажется хорошей скоростью обучения
Данные в приведенной ниже статье показывают, что скорость обучения, равная 0,1, работает лучше, обеспечивает наивысшую точность и затухает в два раза быстрее, чем исходная и экспоненциальная скорость обучения.
БытьБыть
Смит (2017) «Циклические скорости обучения для обучения нейронных сетей».
3. Перезапускаемый стохастический градиентный спуск
БытьБыть
SGD vs. snapshot ensembles (Huang et al., 2017)
Еще один способ ускорить стохастический градиентный спуск — постепенно снижать скорость обучения по мере прохождения обучения. Этот подход помогает увидеть, согласуется ли изменение скорости обучения с улучшением значения потерь. Когда параметры модели близки к оптимальным весам, необходимо делать меньшие шаги перемещения, поскольку при слишком большом размере шага можно пропустить оптимальную площадь поверхности значений потерь.
Если взаимосвязь между скоростью обучения и значением потерь нестабильна, то есть если небольшое изменение скорости обучения приводит к большому изменению значения потерь. Это говорит о том, что текущая оптимальная точка еще не находится в стабильной области (как показано на рисунке 2 выше). Стратегия выживания заключается в периодическом увеличении скорости обучения.
«Периоды» здесь относятся к тому, сколько раз увеличивается скорость обучения. В фастае Learner.fit можно установить с помощью параметров cycle_len и cycle_mult.
На рисунке 2 выше скорость обучения сбрасывалась 3 раза. При использовании обычного графика скорости обучения поиск оптимальной потери обычно занимает больше времени. В этом случае разработчик ждет завершения всех временных точек, прежде чем пробовать разные скорости обучения.
БытьБыть
4. Увеличение данных (задачи компьютерного зрения и классификации изображений — текущие методы)
Расширение данных можно использовать для увеличения объема существующих данных для обучения и тестирования. Для проблем с изображениями это зависит от количества изображений в наборе данных с симметричными свойствами.
Примером может служить задача классификации изображений паука и скорпиона. В этом наборе данных многие изображения трансформированы по вертикали, а животные внутри по-прежнему отображаются нормально. Это называется transforms_side_on.
БытьБыть
Сверху вниз обратите внимание на масштабирование и отражение картинки с разных ракурсов
5. Увеличение данных во время тестирования (задачи компьютерного зрения и классификации изображений — текущие методы)
Мы также можем использовать увеличение данных во время вывода (или во время тестирования). При выводе прогнозов вы можете выполнять аугментацию данных, используя одно изображение в тестовом наборе. Однако процесс становится более надежным, если для каждого изображения в посещаемом тестовом наборе случайным образом генерируются несколько дополнительных изображений. В fastai я использовал 4 случайных приращения каждого тестового изображения при прогнозировании и использовал среднее значение отдельных прогнозов в качестве прогноза для этого изображения.
6. Замена векторов слов предварительно обученными RNN
Это метод структуры анализа настроений для получения произвольных категорий без использования векторов слов. Его принцип заключается в централизации всех обучающих данных, которые необходимо проанализировать, и построении на их основе языковой модели глубокой рекуррентной нейронной сети. Когда точность обученной модели повышается, кодировщик модели в это время сохраняется, а встраивание, полученное от кодировщика, используется для построения модели анализа тональности.
Матрицы встраивания, полученные с помощью RNN, превосходят векторы слов, которые могут отслеживать зависимости на большом расстоянии лучше, чем векторы слов.
7. Обратное распространение во времени (BPTT) (для НЛП)
Скрытые состояния глубоких рекуррентных нейронных сетей имеют тенденцию становиться раздутыми и неуправляемыми со временем обучения обратного распространения.
Например, при работе с рекуррентной нейронной сетью персонажей, если у вас есть миллион персонажей, вам нужно построить миллион скрытых векторов состояния и соответствующую им историческую информацию. Чтобы обучить нейронную сеть, нам также нужно выполнить цепное правило одного порядка для каждого символа. Это потребует огромных затрат памяти и вычислительных ресурсов.
Итак, чтобы уменьшить требования к памяти, мы устанавливаем максимальное расстояние обратного распространения. Поскольку каждый цикл в рекуррентной нейронной сети эквивалентен временному шагу, задача ограничения обратного распространения и сохранения количества исторических слоев скрытых состояний называется временным обратным распространением. Хотя значение этого числа определяет требования к времени и памяти для вычислений модели, оно одновременно улучшает способность модели обрабатывать длинные предложения или последовательности действий.
8. Векторизация сущности категориальной переменной. (для структурированных данных и НЛП)
Когда глубокое обучение выполняется на структурированных наборах данных, метод может различать столбцы, содержащие непрерывные данные, такие как информация о ценах в интернет-магазине, и столбцы с категориальными данными, такими как даты и места получения. Процесс быстрого кодирования этих категориальных столбцов затем преобразуется в таблицу поиска, указывающую на полностью связанные слои нейронной сети. Таким образом, у модели нейронной сети есть возможность обойти категориальный характер столбцов и узнать об этих игнорируемых категориальных переменных/столбцах.
Этот подход можно использовать для изучения периодических моделей наборов данных за многие годы, например, в какой день недели больше всего продаж и что происходит до и после государственных праздников.
Конечным результатом этого является очень эффективный метод, который помогает в совместной фильтрации и прогнозировании оптимальных цен на продукты. Это также текущий метод стандартного анализа данных и прогнозирования для всех компаний с табличными данными.
БытьБыть
▌Эпилог
За последний год глубокое обучение добилось больших успехов. Усилия большого числа исследователей и практиков сделали наборы данных и процессоры все более и более полными, и доступно все больше и больше сред и инструментов глубокого обучения с открытым исходным кодом.
В настоящее время мы не создали общий искусственный интеллект, но уже можем применять глубокое обучение в разных областях. Однако я больше жду применения искусственного интеллекта в образовании и медицине, особенно возрождения биотехнологий. Потому что это создает больше возможностей.
Автор | Брайан Мухиа
Оригинальная ссылка
https://medium.com/@muhia/8-deep-learning-best-practices-i-learned-about-in-2017-700f32409512