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

В этом сообщении блога представлен обзор глубокого обучения в 7 архитектурных парадигмах со ссылками на руководства по TensorFlow для каждой из них. Он сопровождает следующую лекцию Основы глубокого обучения в рамках курса MIT 6.S094:

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

Мой любимый пример первого - это публикация Коперником в 1543 году гелиоцентрической модели, которая поместила Солнце в центр «Вселенной» в отличие от предыдущей геоцентрической модели. которые поставили Землю в центр. В лучшем случае глубокое обучение позволяет нам автоматизировать этот шаг, удаляя Коперника (то есть опытных людей) из процесса «разработки функций»:

На высоком уровне нейронные сети являются либо кодировщиками, либо декодерами, либо их комбинацией:

  • Кодировщики находят шаблоны в необработанных данных, чтобы сформировать компактные и удобные представления.
  • Декодеры генерируют данные с высоким разрешением из этих представлений. Сгенерированные данные представляют собой либо новые примеры, либо описательные знания.

Остальное - это умные методы, которые помогают нам эффективно работать с визуальной информацией, языком, звуком (№1–6) и даже действовать в мире, основанном на этой информации и периодических вознаграждениях (№7). Вот общая картина:

В следующих разделах я кратко опишу каждую из 7 архитектурных парадигм со ссылками на иллюстративные руководства по TensorFlow для каждой из них. См. Раздел «Помимо основ» в конце, в котором обсуждаются некоторые захватывающие области глубокого обучения, которые не попадают в эти семь категорий.

1. Нейронные сети прямого распространения (FFNN)

FFNN, история которых восходит к 1940-м годам, - это просто сети, у которых нет никаких циклов. Данные передаются от ввода к выводу за один проход без какой-либо «памяти состояний» того, что было раньше. Технически, большинство сетей в глубоком обучении можно рассматривать как FFNN, но обычно «FFNN» относится к его простейшему варианту: многослойному персептрону с плотными связями (MLP).

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

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

2. Сверточные нейронные сети (CNN)

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

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

Учебное пособие по TensorFlow: См. часть 2 нашего Руководства по основам глубокого обучения, где приведен пример CNN, используемых для классификации рукописных цифр в наборе данных MNIST с красивым сказочным поворотом, где мы тестируем наш классификатор на высоком уровне. сгенерированное разрешение, преобразование рукописных цифр вне набора данных:

3. Рекуррентные нейронные сети (RNN)

RNN - это сети, которые имеют циклы и, следовательно, имеют «память состояний». Их можно вовремя развернуть, чтобы они стали сетями прямого распространения, в которых веса разделяются. Подобно тому, как CNN разделяют веса в «пространстве», RNN разделяют веса во «времени». Это позволяет им обрабатывать и эффективно представлять шаблоны в последовательных данных.

Было разработано множество вариантов модулей RNN, включая LSTM и GRU, чтобы помочь изучать шаблоны в более длинных последовательностях. Приложения включают моделирование естественного языка, распознавание речи, генерацию речи и т. Д.

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

4. Архитектура кодировщика-декодера

FFNN, CNN и RNN, представленные в первых трех разделах, представляют собой просто сети, которые делают прогноз с использованием либо плотного кодировщика, либо сверточного кодировщика, либо рекуррентного кодировщика соответственно. Эти кодировщики можно комбинировать или переключать в зависимости от типа необработанных данных, которые мы пытаемся представить в удобном виде. Архитектура «кодировщик-декодер» - это концепция более высокого уровня, которая строится на этапе кодирования, вместо того, чтобы делать прогноз, для генерации выходных данных большой размерности через этап декодирования путем повышения дискретизации сжатого представления.

Обратите внимание, что кодировщик и декодер могут сильно отличаться друг от друга. Например, сеть субтитров к изображениям может иметь сверточный кодировщик (для ввода изображения) и рекуррентный декодер (для вывода на естественном языке). Приложения включают семантическую сегментацию, машинный перевод и т. Д.

Учебное пособие по TensorFlow: См. наше руководство Сегментация сцены вождения, которое демонстрирует современную сеть сегментации для проблемы восприятия автономного транспортного средства:

5. Автоэнкодеры

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

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

Учебное пособие по TensorFlow: В этом Руководстве по TensorFlow Keras вы можете изучить способность автоэнкодеров как (1) удалять входные данные, так и (2) формировать вложения в набор данных MNIST.

6. Генеративные состязательные сети (GAN)

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

За последние несколько лет было предложено множество вариантов и улучшений для GAN, в том числе возможность генерировать изображения из определенного класса, возможность отображать изображения из одного домена в другой и невероятное повышение реалистичности сгенерированных изображений. См. Лекцию Современное состояние глубокого обучения, в которой рассматривается и контекстуализируется быстрое развитие сетей GAN. Например, взгляните на три образца, сгенерированные из одной категории (мухомор) с помощью BigGAN (arXiv paper):

Учебное пособие по TensorFlow: См. руководства по условным GAN и DCGAN, где приведены примеры ранних вариантов GAN. По мере прохождения курса мы будем публиковать учебник по новейшим достижениям в GAN на нашем GitHub.

7. Глубокое обучение с подкреплением (Deep RL)

Обучение с подкреплением (RL) - это структура для обучения агента тому, как действовать в мире таким образом, чтобы получить максимальное вознаграждение. Когда обучение осуществляется нейронной сетью, мы называем это глубоким обучением с подкреплением (Deep RL). Существует три типа структур RL: на основе политик, ценностей и моделей. Разница в том, что нейронной сети нужно обучать. См. Лекцию Введение в Deep RL для курса MIT 6.S091 для получения более подробной информации. Deep RL позволяет нам применять нейронные сети в смоделированных или реальных средах, когда необходимо принять последовательность решений. Сюда входят игры, робототехника, поиск нейронной архитектуры и многое другое.

Учебное пособие: наша среда DeepTraffic предоставляет учебное пособие и образцы кода для быстрого изучения, обучения и оценки агентов Deep RL в браузере, и вскоре мы выпустим учебные пособия по TensorFlow для графического процессора. -подключенное обучение на GitHub:

Помимо основ

Некоторые важные концепции глубокого обучения напрямую не представлены в архитектурах, указанных выше. Примеры включают вариационные автоэнкодеры (VAE), идеи памяти в контексте LSTM / GRU или нейронной машины Тьюринга, капсульные сети и в целом идеи внимания, трансферного обучения, мета- обучение, а также различие между методами, основанными на моделях, ценностями, политиками, и методами критики субъектов в RL. Наконец, многие системы глубокого обучения комбинируют эти архитектуры сложным образом, чтобы совместно учиться на мультимодальных данных или совместно учиться решать несколько задач. Многие из этих концепций рассматриваются в других лекциях курса, и в ближайшее время будут добавлены другие:

От себя лично, как я сказал в комментариях, для меня унизительно иметь возможность преподавать в Массачусетском технологическом институте и интересно быть частью сообщества AI и TensorFlow. Спасибо всем за поддержку и отличные обсуждения в течение последних нескольких лет. Это была потрясающая поездка. Если у вас есть предложения по темам, которые я должен затронуть в будущих лекциях, дайте мне знать (в Twitter или LinkedIn).