Глубокие нейронные сети (deep neural networks) в настоящее время становятся одним из самых популярных методов машинного обучения.

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

Преимущества глубоких нейронных сетей

Работа традиционных алгоритмов машинного обучения существенно зависит от того, какие данные из общего объема доступных данных будут выбраны для решения задачи. Такие данные называются признаки (features). Существует целое направление, посвященное выбору признаков, которое называется feature engineering. Однако до сих пор нет конструктивных рекомендаций по эффективному выбору признаков. Если для задачи получилось подобрать нужные признаки, то ее удается решить. В противном случае задача остается нерешенной.

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

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

Использование глубоких нейронных сетей

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

  • Оформление фото или видео в стиле изображений известных художников (мобильные приложения Prisma и Artisto).
  • Сочинение музыки
  • Анализ медицинских изображений

Почему глубокие нейронные сети популярны сейчас

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

  1. В последнее время накоплено много данных большого объема (Big Data). Так как глубокая нейронная сеть устроена сложно и содержит большое количество параметров, для ее обучения требуется много данных. Имеющихся раньше данных было недостаточно для обучения сетей, способных решать практически полезные задачи.
  2. Производительность компьютеров резко возросла. Появились многоядерные процессоры и графические ускорители (GPU), которые по производительности превосходят суперкомпьютеры, доступные ученым в 80-е и 90-е годы прошлого века. Такие вычислительные мощности нужны для того, чтобы обучать глубокие нейросети на большом объеме данных.
  3. Методы глубокого обучения нейронных сетей были усовершенствованы. В последнее время было предложено много небольших улучшений, таких как методы нормализованной инициализации весов, слои пакетной нормализации и многое другое. Это позволило успешно применять глубокие нейронные сети для решения большого количества практических задач, что раньше не удавалось сделать из-за проблемы исчезающего градиента.
  4. Появилось большое количество готовых к использования программ глубокого обучения нейронных сетей. Уже не требуется реализовывать глубокое обучение самостоятельно, можно взять готовую библиотеку и сразу использовать ее для решения практических задач.

Особенности курса

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

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

Курс является практически ориентированным. Теория нейронных сетей рассматривается в минимальном объеме. Большая часть времени уделяется разработке программ на Python, в которых глубокие нейронные сети применяются для решения практических задач. Чтобы понять детали работы глубоких нейронных сетей, мы будем проводить эксперименты с созданными программами.

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

Структура курса

Курс включает три вида занятий:

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

Курс состоит из трех основных частей:

  1. Общая часть, посвященная устройству глубоких нейронных сетей, разным архитектурам сетей (полносвязные, сверточные, рекуррентные), существующим программным системам для глубокого обучения и основам их применения для решения практических задач. Рассматриваются подходы к оценке качества обучения и его увеличению.
  2. Компьютерное зрение. В этой части подробно рассматривается применение глубоких нейронных сетей для решения задач компьютерного зрения: классификация и сегментация изображений, использование сетей, предварительно обученных на наборе данных ImageNet, подготовка своего набора данных из изображений и т.п.
  3. Обработка естественного языка с помощью глубоких нейронных сетей. Рассматриваются различные варианты представления данных на естественном языке в виде, пригодном для использования нейронной сетью (векторное представление слов и т.п.). Решаются задачи определения тональности текста, темы текста, а также автоматической генерации текста.

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

Все примеры программ курса доступны в репозитории GitHub.

Желаю успехов в изучении и практическом применении глубоких нейронных сетей!

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