[Университет Искусственного Интеллекта] Курс Data Science и нейронные сети на Python 2020 (Дмитрий Романов)
Какие нейронные сети вы напишете:
1. Распознавание рукописных цифр
2. Распознавание марок машин
3. Классификация писателей
4. Классификация обращений в органы гос.власти по москве
5. Предсказание, выйдет ли рассказ в финал литературного конкурса
6. Определение стоимости машины по объявлению на юле
7. Определение зарплаты человека по резюме на hh.ru
8. Определение стоимости квартиры
9. Определение рейтинга статьи на habr.ru по тексту
10. Предсказание акций лукойл
11. Распознавание стилей музыки
12. Распознавание диктора по голосу
13. Определение мошеннических операций по картам
14. Генерация рукописных цифр
15. Генерация изображений неба и самолётов
16. Сегментация изображений с регистратора для автопилотов автомобилей
17. Сегментация самолётов
18. Интеллектуальный чат-бот
19. Сегментация договоров
20. Распределение грузов по фурам
21. Бот для прохождения лабиринта
22. Автоматический подбор архитектуры нейронной сети
23. Кластеризация резюме на hh.ru
24. Кластеризация продаж интернет-магазина косметики и умный upsale
25. Обучение нейронной сети игре в пинг-понг с помощью обучения с подкреплением
26. Перенос стиля изображения
27. Распознавание речи
28. Распознавание голосовых команд для умного дома
1.1 Введение в нейронные сети
Описание занятия: Введение в программу курса. Знакомство с нейронными сетями и методикой их написания на примере базы рукописных цифр. Работа с математической моделью. Прописание архитектуры, слоев. Пояснительные комментарии: что из себя представляют разные параметры и характеристики слоев. Рассмотрение элементов, входящих в нейронную сеть, обучение сети, проверка на работоспособность. Цель занятия - показать, что написание нейронных сетей помимо разработки математической модели включает в себя обработку базы данных, с помощью которых и будет происходить обучение.
1.2 Полносвязные сети, обучающая и тестовая выборки
Описание занятия: Знакомство с ключевыми понятиями теории обучения нейронных сетей. Примеры активационных функций, их назначение и особенности. Построение нейронных сетей с простыми архитектурами. Рассмотрение понятия нейрон смещения (bias), его назначение. Рассмотрение различных способов формирования обучающей и проверочной выборок с использованием набора рукописных цифр MNIST. Создание и обучение нейронной сети для распознавания рукописных цифр, проверка и визуализация качества обучения сети. Рассмотрение вопроса переобучения нейронной сети и способов борьбы с переобучением. Рассмотрение дополнительных возможностей по увеличению качества распознавания. Создание нейронной сети для решения реальной задачи: предсказание цен машин с сайта YOULA.RU.
1.3 Свёрточные нейронные сети
Описание занятия: Преимущества свёрточных нейронных сетей на фоне остальных архитектур по отношению к распознаванию объектов. Цель занятия - показать, что может включать предварительная обработка выборки, как привести ее к нужной форме для того, чтоб на ней проверить свёрточную нейронную сеть. Изучение архитектуры свёрточных нейронных сетей: какие элементы участвуют, что используется, зачем используется, как проверяются данные на этих архитектурах и сравнение результатов. Работа со стандартными наборами - базой рукописных цифр и базой Cifar10.
1.4 Обработка текстов с помощью нейросетей
Описание занятия: Рассмотрение основных задач, связанных с обработкой текстов, которые способны решать нейронные сети. Знакомство с основными архитектурами нейронных сетей, применяемых для обработки текстовых данных. Рассмотрение способов векторизации текста для преобразования текстовых данных в числовые (разряженные и плотные вектора, векторные представления слов). Демонстрация предварительно обученных векторных представлений слов: CloVe (Global Vectors), Word2Vec, FastText. Решение практической задачи по классификации текстов на базе обращений граждан: парсинг исходной базы для создания обучающей и проверочной выборок, создание полносвзяной сети и сети с Embedding-слоем для решения поставленной задачи, сравнение результатов работы сетей. Решение практической задачи по классификации писателей: парсинг базы писателей, создание обучающей и проверочной выборок, демонстрация преобразования данных по принципу BagOfWords, создание полносвязной сети и сети с Embedding-слоем для классификации писателей, распознавание проверочной выборки.
1.5 Рекуррентные нейронные сети и одномерные свёрточные сети для обработки текстов
Описание занятия: Преимущества рекуррентных нейронных сетей для решение задач на нахождение последовательностей. Рассмотрение устройства рекуррентной нейронной сети: что собой представляет элемент запоминания в этой сети, каким образом выстраивается архитектура рекуррентных сетей, что необходимо знать о работе с каждым из типов и как их можно комбинировать с другими архитектурами. Работа на базе писателей. Задача занятия - классификация писателей с помощью рекуррентной сети, которая за счет запоминания последовательности между словами, определит стиль каждого из писателей, также решение задачи классификации писателей с помощью одномерной свёрточной сети.
1.6 Нейронные сети для решения задачи регрессии
Описание занятия: Рассмотрение термина регрессия в области нейронных сетей. Выделение различий при решении задач регрессии и рассматриваемых ранее задач классификации. Решение практической задачи по определению стоимости квартир с использование набора данных Boston Housing. Решение аналогичной задачи по определению стоимости квартир на собственной информационной базе: парсинг базы, преобразование имеющихся данных (как числовых, так и текстовых) к требуемому числовому представлению, формирование обучающей выборки, нормирование данных. Построение нейронной сети для решения поставленной задачи и оценка полученных результатов. Решение практической задачи по оценке зарплаты по базе с HeadHunter: парсинг базы, создание обучающей выборки, создание различных архитектур нейронных сетей для решения задачи и сравнение результатов их работы.
1.7 Полносвязные и рекуррентные нейронные сети для прогнозирования временных рядов
Описание занятия: Временные ряды - это отдельная глава в изучении нейронной сети. С одной стороны, задача напоминает регрессию, так как необходимо предугадать число. Например, необходимо предугадать цену на бензин, трафик на сайте, какую-то переменную во времени. С другой стороны, необходимо учитывать, что происходило до этого. Рассмотрение какие из ранее изученных архитектур оптимальнее подходят для баз с временными рядами. Предсказывание значений временных рядов. Работа с базами прогнозирования акций 'Лукойла' и цен на бензин.
1.8 Прямые и свёрточные нейронные сети для обработки аудио сигналов
Описание занятия: Рассмотрение специфики обработки аудио с помощью нейронных сетей. Знакомство с популярными библиотеками по обработке аудио. Демонстрация работы с библиотекой librosa для параметризации аудио, извлечение признаков из аудиосигнала: пересечение с нулем, спектральный центроид, спектральный спад частоты, мел-частотные спектральные коэффициенты, частота цветности. Решение практической задачи по классификации жанров музыки.: формирование обучающей выборки, создание нейронной сети для решения поставленной задачи, проверка распознавания жанров музыки на основе различных признаков.
1.9 Автокодировщики
Описание занятия: После рассмотрения типов слоев и базовых архитектур возможен переход к более высокоуровневым архитектурам, которые выполняют конкретную функцию - к автокодировщикам. Знакомство с автокодировщиками. Рассмотрение особенностей и функций автокодировщиков. Пример: очищение от шума изображений рукописных цифр. Решение задачи на выявление мошеннических операций.
1.10 Вариационные автокодировщики, генеративные модели на базе автокодировщиков
Описание занятия: Рассмотрение различий вариационного и классического автокодировщиков. Задачи, решаемые на вариационном автокодировщике. Описание применения для решения задач вариационными автокодировщиками. Рассмотрение возможности задавать параметры и генерировать данные с заданными условиями.
1.11 Генеративные состязательные сети
Описание занятия: Рассмотрение вопроса генерации различного контента с использованием нейронных сетей (GAN). Выделений основных сложностей и способов их преодоления при решении задач генерации. Знакомство с принципиально новым подходом в построении архитектур нейронных сетей: создание двух 'конкурирующих' между собой частей одной сети (генератор и дискриминатор). Описание процесса обучения каждой из частей и формирования обучающих выборок. Рассмотрение генеративных состязательных сетей с условием (сGAN). Решение практической задачи по генерации рукописных цифр на основе набора MNIST. Создание различных архитектур дискриминатора и генератора и сравнение качества их работы. Решение аналогичной задачи для генерации изображение на основе набора CIFAR10. Создание генератора с условием для генерации рукописных цифр.
2. Продвинутые темы
2.1 Сегментация изображений
Описание занятия: Рассмотрение задачи сегментации изображений с использованием нейронных сетей. Знакомство с основными архитектурами, применяемыми для решения задачи сегментации: U-Net, SegNet, Linknet, PSPNet. Выявление особенностей каждой из архитектур, их положительных и отрицательных сторон. Рассмотрение вопроса по оптимизации процесса сегментации изображения: уменьшение выборки, аугментация изображения, разбиение изображения. Решение практической задачи по разметке фотографий с регистратора для создания автопилота автомобилей: создание обучающей и проверочной выборок, создание различных архитектур нейронной сети для решения поставленной задачи, сравнение результатов работы различных архитектур, проверка результатов работы на упрощенной выборке (3 класса объектов вместо 12).
2.2 Генерация текста
Описание занятия: Рассмотрение вопроса генерации текста с использованием нейронных сетей: области применения, реальные примеры. Выделение основных задач и проблем, возникающих при решении задачи генерации текста. Знакомство с популярными решениями в области генерации текста: Seq2Sqe (Sequence-to-Sequence), Word2Vec (Word-to-Vector), Doc2Vec (Document-to-Vector). Подробное рассмотрение модели Seq2Sqe. Решение практической задачи для создания чат-бота с использованием модели Seq2Seq: парсинг данных, создание выборки для обучения модели, создание архитектур энкодера и декодера (составных частей модели Seq2Seq), демонстрация работы чат-бота в режиме вопрос-ответ.
2.3 Cегментация текста
Описание занятия: Сегментация текста на базе договоров. Вычленение по смыслу нужных фрагменты из текста. Анализ нейронной сетью текста и понимание им его содержания. Рассмотрение практического применения сегментации текста: из текста нужно вычленить необходимое или при выдаче задания голосовому помощнику найти какой-то текст, помощник мог понять и найти необходимый текст.
2.4 Введение в генетические алгоритмы
Описание занятия: Генетические алгоритмы использовались, когда не было вычислительных мощностей для нейронных сетей. Их суть совпадает с названием. Работа по тем же принципам, что и в эволюции. Есть какая-то популяция, мутации, условия, в которых популяция живет. Находятся идеальные кандидаты, которые подходят для конкретной задачи, по принципу выживания. На этом занятии будут рассмотрены прикладные задачи. Например, игра в лабиринт: с помощью генетического алгоритма программа научится проходить лабиринт.
2.5 Генетические алгоритмы для обучения нейронных сетей
Описание занятия: Применение генетических алгоритмов для подбора оптимальной архитектуры нейронной сети. Решение практической задачи для подбора оптимальной архитектуры сети, решающей задачу распознавания рукописных цифр из набора MNIST: создание генетического алгоритма для подбора архитектуры сети, подбор архитектуры свёрточной нейронной сети с перебором параметров: нормализцая, размер первого свёрточного слоя, использование второго сверточного слоя, использование MaxPooling и др.
2.6 Алгоритмы кластеризации данных
Описание занятия: Задача кластеризации является одной из востребованных задач на рынке. Например, есть интернет-магазин, есть статистика заказов. По заказам клиентов и по характеристикам заказов этого магазина можно разделить базу клиентов. Работа с базами HeadHunter. Разделение на кластеры базы HeadHunter.
2.7 Object Detection (обнаружение объектов)
Описание занятия: Рассмотрение задачи обнаружения объектов с использованием нейронных сетей. Сравнение двух подходов к задаче обнаружения объектов: ObjectDetection и сегментация. Знакомство с алгоритмом Selective Search и первыми моделями, решающими задачи обнаружения объектов (RCNN, SPP). Сравнение производительности различных подходов. Описание идеи использования анкоров вместо Selective Search. Рассмотрение двух современных архитектур для решения задач обнаружения объектов YOLOv3 и RetinaNet: создание моделей, функции ошибок, обучение моделей на базе самолетов и демонстрации процесса обучения. Распознавание изображения с использованием обученных моделей.
2.8 Обучение с подкреплением
Описание занятия: Сравнение основных подходов к обучению нейронных сетей: с учителем, без учителя, с подкреплением. Описание основной идеи процесса обучения сети с подкреплением. Постановка основных задач, решаемых в процессе обучения с подкреплением. Рассмотрение основных алгоритмов, используемых в этой области: Police Gradient, Q-learning (выделение их положительных и отрицательных сторон). Решение практической задачи по обучению бота игре в Ping-Pong на игровой платформе 'gym' и использованием алгоритма PoliceGradient. Демонстрация игры обученного бота. Рассмотрение ограничений и проблем, возникающих в процессе обучения. Рассмотрение способов ускорения процесса обучения.
2.9 Распознавание речи
Описание занятия: Рассмотрение задачи преобразования речи в текст. Описание областей применения распознавателей речи. Выделение основных задач, решаемых в процессе создания нейронных сетей по распознаванию речи. Описание подхода и используемых акустических признаков для решения задачи распознавания речи. Построение акустической модели и оценка качества распознавания с помощью метрики WER (word error rate). Выделение основных проблем задачи распознавания речи. Демонстрация распознавания речи с помощью google API, демонстрация распознавания команды с микрофона. Решение практической задачи по распознаванию голосовых команд в потоке речи: создание аудиофрагментов для формирования обучающей выборки, парсинг данных, создание различных архитектур и сравнение качества их работы, демонстрация распознавания голосовых команд на тестовых данных.
3. Дополнительные темы
3.1 Интеграция нейронной сети в Production. Часть 1
Описание занятия: Интеграция нейронной сети в Production - это финальная точка, куда нейронная сеть приходит: приложение, веб-сервис и т.д. Рассмотрение различных стратегий, чтоб понять, где можно применить нейронные сети, и концентрация на прогонке нейронной сети в веб-сервисе: что нужно для создания запроса, что нужно для связывания с базами данных, как упаковывать, какая глобальная структура. Используемая база - база рукописных цифр. Создание веб-сервиса. Когда рисуешь рукописную цифру на странице, она делает предсказание. Другой гигант, зарекомендовавший себя, и который будет также рассмотрен на занятии - Apache Spark.
3.2 Интеграция нейронной сети в Production. Часть 2
Описание занятия: Занятие посвящено тем инструментам, которые нужны для конечного вывода в Production. Тема занятия - организация процесса. Рассмотрение контейнеризации: что такое контейнеры, какие бывают контейнеры, что с контейнерами делать, менеджеры, управляющие контейнерами, системы оркестрации, а также, где можно размещать модель. Рассмотрение перевода моделей из Python в С++.
3.3 Написание нейронных сетей с библиотекой PyTorch. Часть 1
Описание занятия: Особенности PyTorch, преимущества по сравнению Keras, насколько он низкоуровневый по сравнению Keras. Работа на GPU, CPU. Рассмотрение стандартных архитектур, таких как полносвязная сеть, свёрточная нейронная сеть - полностью прописанные на этом фреймворке.
3.4 Написание нейронных сетей с библиотекой PyTorch. Часть 2
Описание занятия: Рассмотрение какая математическая модель лежит под алгоритмом переноса стиля от одного изображения на другое и как это связано с нейронными сетями. Как с помощью свёрточных нейронных сетей можно перенести стиль на конкретное изображение. Рассмотрение использования предобученной модели сети в PyTorch.
3.5 Написание нейронных сетей с библиотекой Tensorflow. Часть 1
Описание занятия: Базовое знакомство с более глубокоуровневой (по сравнению с Keras) библиотекой TensorFlow. Рассмотрение понятия графов, как основных элементов TensorFlow. Работа с базовыми типами данных (константы, переменные, плейсхолдеры). Демонстрация совместимости с numpy. Рассмотрение возможностей работы с доступными устройствами (GPU, CPU) и выполнение вычислений на требуемом устройстве. Рассмотрение способов создания dataset'ов средствами TensorFlow. Описание понятия 'сессия' и демонстрация процесса создания и использования сессий. Демонстрация использования утилиты TensorBoard. Обучение нейрона с помощью TensorFlow для решения несложной задачи. Отслеживание процесса обучения с помощью TensorBoard.
3.6 Написание нейронных сетей с библиотекой Tensorflow. Часть 2
Описание занятия: Более глубокое погружение в TensorFlow. Написание полносвязных и сверточных нейронных сетей. Задание выбранной функции потерь (crossentropy) с помощью TensorFlow. Обучение сети и визуализация процесса обучения с помощью TensorBoard. Решение практической задачи по обработке текста с использованием модуля TF Hub. Демонстрация результатов применения модуля.