Нейронные сети

О курсе:

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

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

Инструментарий:

Язык программирования: Python3

Библиотека: TensorFlow

Среда разработки: Jupyter

Программа курса (осенний семестр):

Занятие 1 - Введение

Постановка задач обучения по прецедентам. Объекты и признаки с примерами. Устройство нейронной сети. Слои, функция активации. Метод градиентного спуска. Метод стохастического градиента. Шаг оптимизатора, тип оптимизатора, функция потерь. Переобучение. Обучающая и тестовая выборка. Типы нейронных сетей (линейные, DNN, бинарные, сверточные, GAN, рекуррентные).

Занятие 2 - Системы контроля версий

Зачем нужно контролировать версии. Понятие коммита, ветви в version control system (VCS). Проблема коллективной разработки без VCS. Синхронизация с центральным сервером. Понятие затягивания и проталкивания изменений. Слияние ветвей. Разрешение конфликтов. Ресурсы для VCS. Проблема бинарных файлов. Примеры VCS: git, mercurial, subversion, CVS. Github, клонирование репозиториев и пул-реквесты. Readme.md и формат markdown.

Занятие 3 - Многослойный персептрон

Готовые обучающие выборки и их важность (MNIST, ImageNet, CIFAR-10, CIFAR-100, FashionMNIST, COCO, ...). Tensorflow и Python. Способы ускорения вычисления нейронных сетей. Примеры применения нейронных сетей в науке.
Многослойная сеть. Алгоритм обратного распространения ошибки и его ограничения. Глубинное обучение. Выбор функции активации: сигмоида, ReLU, гиперболический тангенс, функция Хевисайда. Преимущества ReLU. Проблема исчезающего градиента и паралич сети. Проблема инициализации сети. Нормировка выборки.
Измерение качества обучения. Кроссвалидация. Бинарная кроссэнтропия как функция потерь. Понятия эпох, итераций, бэтча в обучении нейронной сети. Методы борьбы с переобучением: прореживание выходов, стохастические выборки, искусственные выборки. Выбросы в обучающей выборке. Причины появления выбросов. Фильтрация выбросов. Метод регулировки весов обучающей выборки.

Занятие 4 - Сверточные сети

Анализ изображений. Как животные видят. Трансляционная инвариантность свёрточных нейронных сетей. Определение свёртки. Строительные блоки для сверточных сетей: свёртка, активация, субдискретизация. Maxpooling, padding. Какие параметры подбираются при обучении сверточных сетей. Как работает свёртка с набором изображений на выходе предыдущего свёрточного слоя. Визуализация выходов скрытых слоёв в tensorflow. Автоэнкодеры. Две фазы обучения сверточных сетей.

Занятие 5 - Генеративно-соревновательные сети GAN

Принцип работы соревновательных генеративных сетей. Структурная схема. Генератор и дискриминатор. Латентное пространство. Виды GAN: cвёрточный DCGAN, условный CGAN, цикличный CycleGAN, парные CoGAN, ProGAN устойчивого роста, Вассерштейновские WGAN. Повышение качества распознования за счет дообучения.

Занятие 6 - Условные генеративно-соревновательные сети CGAN

Использование gan для генерации изображений. Зачем нужен условный GAN. Сложности обучения GAN, проблемы сходимости, проблемы устойчивости, проблемы коллапса распределения. Эмпирические трюки, позволяющие бороться с этими проблемами: использование leakyReLU; downsampling и upsampling с использованием strided convolution; нормализация данных (и преобразование пикселей исходных картинок к диапазону [-1,1]), использование момента в градиентном спуске.

Занятие 7 - Использование обученных сетей

Вычислительная сложность обучения против вычислительной сложности использования. Типы готовых сетей: классификаторы, поиск объектов, распознавание лиц, семантическая сегментация, семантическое описание. Готовые нейронные сети: YOLO, VGG16, R-CNN, (Mask R-CNN, Fast R-CNN, Faster R-CNN), AlexNet, Resnet50/101/152/200..., DenseNet121/169/201, MobileNet25/50/... Связь ResNet с решением системы линейных дифференциальных уравнений. Библиотека tensornets.

Занятие 8 - Рекуррентные сети

Устройство и область применения рекуррентных сетей. Сети Элмана и Джордана. Расчет количества параметров слоя. Долгая краткосрочная память (LSTM) и принцип её работы. Экспоненциальное сглаживание в блоке памяти LSTM. Функции активации LSTM. Управляемый рекуррентный блок (GRU). Машинный перевод, как частный случай задачи Seq2Seq. Архитектура Transformer и Universal transformer.

Занятие 9 - Автоэнкодеры

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

Занятие 10 - Обучение с подкреплением

Обучение с подкреплением (RL). OpenAI и gym. Обучение без учителя. Агент, функция награды, состояние среды. Типовые среды: Atari, шахматы, Go, gym. Классификация алгоритмов RL. Q-learning. Reward shaping. Типовые ошибки при обучении с подкреплением и их причины. Важность отсутствия априорных знаний при обучении. Experience replay. Double DQN. Эпсилон-жадный алгоритм. Выборки случайных фрагментов записей для обучения.Занятие 12 - Перенос обучения

Занятие 11 - Перенос обучения

Зачем нужен перенос обучения. Примеры переноса обучения: изображения, работа с естественным языком. Тонкая настройка.

Занятие 12 - Отбор и генерация признаков

Зачем нужен отбор признаков. Методы отбора признаков: фильтрация, построение семейств, регуляризация. Хэширование признаков для больших таблиц. Почему можно генерировать признаки. Аугментация. Примеры неинформативных признаков. Работа с событиями во времени. Библиотека featuretools для генерации признаков.

Весенний семестр:

Выполняется курсовая работа. Она может быть совмещена с обязательной курсовой работой по физике, выполняемой в лаборатории физического факультета МГУ на втором курсе. Примерные темы работ представлены ниже. Жирным отмечены работы, совмещенные с курсовой по физике:

    • Машинное обучение антропоморфных робототехнических систем на примере модели роботизированной руки с тактильной обратной связью
    • Предсказание сейсмической активности на основе сейсмических журналов и нейронных сетей
    • Генерация изображений шельфовых доломитов с помощью генеративно-состязательных сетей
    • Методы применения нейронных сетей к анализу данных современных коллайдеров
    • Автоматический подсчёт эритроцитов на микрофотографии крови
    • Поиск и распознавание компонентов на печатной плате
    • Создание торгового бота на основе нейронных сетей
    • Предсказание отказов блоков питания РЛС дальнего обнаружения по температурным измерениям
    • Бинаризация нейронных сети для переноса их в интегральную схему
    • Определение параметров эквивалентной электрической цепи по вольамперной характеристике
    • Предсказание пульсаров на основе датасета HTRU2
    • Восстановление цвета в чернобелых фильмах и фотографиях
    • Генерация сверхразрешения в изображениях на основе нейронных сетей
    • Перенос стиля изображения с использованием нейронных сетей
    • Атака вредоносного примера на нейронные сети и защита от него
    • Поиск раковых метастаз по гистологическим микроснимкам
    • Поиск новой физики (распад таурона на 3 мюона) в экспериментальных данных с большого адронного коллайдера (LHC)
    • Дообучение нейронных сетей на одном объекте