Разработка машинного обучения

Создание высокотехнологичных сервисов и приложений на основе машинного обучения.
Для кого
Это направление подойдёт тем, кому нравится программировать и создавать сервисы и приложения, которыми смогут пользоваться тысячи и миллионы людей.
Чему мы учим
Писать эффективный код, строить и оптимизировать промышленно-эффективные data-driven системы.
Где применять эти знания
В разработке высокотехнологичных продуктов на основе машинного обучения.

Программа

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

Знания проверяются в первую очередь с помощью домашних заданий — экзамены и контрольные проводятся только по некоторым предметам.

Первый семестр
Обязательные
Алгоритмы и структуры данных, часть 1
01
Сложность и модели вычислений. Анализ учетных стоимостей (начало)
02
Анализ учетных стоимостей (окончание)
03
Алгоритмы Merge-Sort и Quick-Sort
04
Порядковые статистики. Кучи (начало)
05
Кучи (окончание)
06
Хеширование
07
Деревья поиска (начало)
08
Деревья поиска (продолжение)
09
Деревья поиска (окончание). Система непересекающихся множеств
10
Задачи RMQ и LCA
11
Структуры данных для геометрического поиска
12
Задача о динамической связности в ненаправленном графе
Обучение языку C++, часть 1
С++ — мощный язык с богатым наследием. Тем, кто только ступил на путь освоения этого языка, очень просто заблудиться в изобилии техник и приёмов, созданных за последние 30 лет. Курс учит "Modern C++" — современному подмножеству языка (стандарты 11, 14 и 17). Много внимания уделяется инструментам и библиотекам — вещам которые не являются частью языка, но без которых не получится построить большой и сложный проект.
01
Введение в С++.
02
Константы. Указатели и ссылки. Передача аргументов в функцию.
03
Классы.
04
Динамическое управление памятью.
05
Переменные, указатели и ссылки.
06
Управление памятью, умные указатели, RAII.
07
Стандартная библиотека шаблонов.
08
Наследование и виртуальные функции.
09
Обработка ошибок.
10
Паттерны проектирования.
11
Пространства имен Move‑семантика Perfect forwarding.
12
Представление структур и классов в памяти. Выравнивание данных. Указатели на члены/методы класса. Variadic templates.
Машинное обучение, часть 1
01
Основные понятия и примеры прикладных задач
02
Метрические методы классификации
03
Логические методы классификации и решающие деревья
04
Градиентные линейные методы классификации
05
Метод опорных векторов
06
Многомерная линейная регрессия
07
Нелинейная и непараметрическая регрессия, нестандартные функции потерь
08
Прогнозирование временных рядов
09
Байесовские методы классификации
10
Логистическая регрессия
11
Поиск ассоциативных правил
Второй семестр
Обязательные
Машинное обучение, часть 2
01
Нейросетевые методы классификации и регрессии
02
Композиционные методы классификации и регрессии
03
Критерии выбора моделей и методы отбора признаков
04
Ранжирование
05
Обучение с подкреплением
06
Обучение без учителя
07
Задачи с частичным обучением
08
Коллаборативная фильтрация
09
Тематическое моделирование
На выбор
Алгоритмы и структуры данных, часть 2
01
Обход в ширину. Обход в глубину (начало)
02
Обход в глубину (продолжение)
03
Обход в глубину (окончание). 2-разрезы
04
Поиск кратчайших путей (начало)
05
Поиск кратчайших путей (продолжение)
06
Минимальные остовные деревья
07
Минимальные разрезы. Поиск подстрок (начало)
08
Поиск подстрок (продолжение)
09
Поиск подстрок (окончание)
10
Суффиксные деревья (начало)
11
Суффиксные деревья (окончание). Суффиксные массивы (начало)
12
Суффиксные массивы (окончание)
13
Длиннейшие общие подстроки. Приближенный поиск подстрок.
или
Язык Python
01
Основы языка (часть 1)
02
Основы языка (часть 2)
03
Объектно-ориентированное программирование
04
Обработка ошибок
05
Оформление и тестирование кода
06
Работа со строками
07
Модель памяти
08
Функциональное программирование
09
Обзор библиотек (часть 1)
10
Обзор библиотек (часть 2)
11
Параллельные вычисления в Python
12
Расширенная работа с объектами
или
Обучение языку C++, часть 2
Вторая часть курса по С++, в которой разбираются продвинутые темы и возможности языка.
01
Многопоточное программирование. Синхронизация потоков с использованием мьютексов и условных переменных.
02
Атомарные переменные. Модель памяти С++. Примеры лок-фри структур данных.
03
Продвинутые техники мета-программирования в С++. Метафункции, SFINAE, концепты.
04
Конкурентное программирование, взаимодействие с сетью.
05
Архитектура llvm. Работа с синтаксическим деревом разбора С++. Разработка инструментов для анализа С++ кода.
Третий семестр
На выбор
Natural Language Processing
"NLP (Natural Language Processing) — это подмножество более широкой области AI, которая пытается научить компьютер понимать и обрабатывать сырые данные на естественном языке. Большая часть доступной сегодня информации — это не структурированные тексты. Нам как людям, конечно, не составляет труда их понять (если они на родном языке), но мы не способны обработать такое количество данных, какое могла бы обработать машина. Но как заставить машину понимать эти данные и, более того, извлекать из них какую-то информацию? Несколько лет назад на открытии ACL (одной из основных, если не самой главной NLP-конференции) в своей президентской речи Marti Hearst призналась, что больше не может давать студентам свое любимое упражнение. На примере HAL 9000 (один из примеров искусственного интеллекта в научной фантастике) она спрашивала студентов, что машина может делать, как HAL, а что пока нет. Сейчас это уже не такое хорошее упражнение, так как почти все из этого сейчас под силу компьютеру. Поразительно, насколько быстро развивается область и как многого мы достигли. В курсе мы постараемся дать вам понять и почувствовать, что происходит в мире. Какие задачи решаются, как это происходит; как некоторые статистические подходы (которым почти полностью были посвящены курсы по NLP ещё несколько лет назад) получают новую жизнь и новую интерпретацию в нейросетях, а какие постепенно отмирают. Мы покажем, что NLP это не набор пар (задача, решение), а общие идеи, которые проникают в разные задачи и отражают некоторую общую концепцию. Вы также узнаете, что происходит на практике, когда какие подходы более применимы. Это то, что мы делаем, то, что мы любим, и мы готовы поделиться этим с вами :)"
или
Компьютерное зрение
"Курс посвящен методам и алгоритмам компьютерного зрения, т.е. извлечения информации из изображений и видео. Рассмотрим основы обработки изображений, классификацию изображений, поиск изображений по содержанию, распознавание лиц, сегментацию изображений. Затем поговорим про алгоритмы обработки и анализа видео. Последняя часть курса посвящена трёхмерной реконструкции. Для большинства задач будем обсуждать сущестующие нейросетевые модели. В курсе мы стараемся уделять внимание только наиболее современным методам, которые используются в настоящее время при решении практических и исследовательских задач. Курс в большей степени является практическим, а не теоретическим. Поэтому все лекции снабжены лабораторными и домашними работами, которые позволяют попробовать на практике большинство из рассматриваемых методов. Работы выполняются на языке Python, с использованием различных библиотек."
01
Цифровое изображение и тональная коррекция
02
Основы обработки изображений
03
Совмещение изображений
04
Классификация изображений и поиск похожих
05
Сверточные нейросети для классификации и поиска похожих изображений
06
Детектирование объектов
07
Семантическая сегментация
08
Перенос стиля и синтез изображений
09
Распознавание видео
10
Разреженная трёхмерная реконструкция
11
Плотная трёхмерная реконструкция
12
Реконструкция по одному кадру и облакам точек, параметрические модели
или
Байесовские методы в машинном обучении
01
Байесовский подход к теории вероятностей
02
Аналитический байесовский вывод
03
Байесовский способ выбора модели
04
Автоматическое определение релевантности
05
Метод релевантных векторов для задачи классификации
06
Вероятностные модели с латентными переменными
07
Вариационный байесовский вывод
08
Байесовская модель разделения смеси гауссиан
09
Методы Монте-Карло с марковскими цепями
10
Латентное размещение Дирихле
11
Гауссовские процессы для регрессии и классификации
12
Непараметрические байесовские методы
Четвёртый семестр
Обязательные
ML Engineering Practice
Курс представляет собой проектную работу по разработке ML-проектов в командах.
ML Research Practice
Курс представляет собой работу над командными исследовательскими проектам в области машинного обучения.
Рекомендуемые спецкурсы
Глубинное обучение
Обучение с подкреплением
Self Driving Cars
В курсе рассматриваются основные компоненты беспилотных технологий: локализация, перцепция, предсказание, уровень поведения и планирование движения. Для каждой из компонент будут описаны основные подходы. Кроме того, студенты познакомятся с текущим состоянием рынка и технологическими вызовами.
01
Обзор основных компонент и сенсоров беспилотного автомобиля. Уровни автономности. Drive by Wire. Беспилотные автомобили как бизнес-продукт. Способы оценки прогресса в создании беспилотников. Основы локализации: gnss, колесная одометрия, байесовские фильтры.
02
Методы лидарной локализации: ICP, NDT, LOAM. Введение в визуальный SLAM на примере ORB-SLAM. Постановка задачи GraphSLAM. Сведение задачи GraphSLAM к нелинейному МНК. Выбор правильной параметризации. Системы с особой структурой в GraphSLAM. Архитектурный подход: frontend и backend.
03
Задача распознавания в беспилотном автомобиле. Статические и динамические препятствия. Сенсоры для системы распознавания. Представление статических препятствий. Детекция статических препятствий по лидару (VSCAN, нейросетевые методы). Использование лидара совместно с изображениями для детекции статики (семантическая сегментация изображений, depth completion). Стерео камера и получение глубины из картинки. Stixel World.
04
Представление динамических препятствий в беспилотном автомобиле. Нейросетевые методы детекции объектов в 2D. Детекция на основе Bird-eye view представления лидарного облака. Использование лидара совместно с изображениями для детекции динамических препятствий. Детекция автомобилей в 3D на основе картинок (3D boxes fitting, CAD models). Детекция динамических препятствий на основе радара. Трекинг объектов.
05
Модели движения автомобиля: rear wheel, front wheel. Планирование траекторий. Понятие конфигурационного пространства. Графовые методы построения траекторий. Траектории, минимизирующие рывок. Оптимизационные методы построения траекторий.
06
Планирование скорости в динамическом окружении. ST-планирование. Предсказание поведения других участников дорожного движения
Нейробайесовские методы
Курс посвящен применению байесовских методов в глубинном обучении. На лекциях будет рассказано о применении вероятностного моделирования для построения порождающих моделей данных, использованию состязающихся сетей для приближенного вывода, моделированию неопределенности в параметрах нейронной сети и о некоторых открытых проблемах глубинного обучения.
01
Стохастический вариационный вывод
02
Дважды стохастический вариационный вывод
03
Вариационный автокодировщик, нормализующие потоки для вариационного вывода
04
Методы снижения дисперсии в моделях со скрытыми переменными
05
Оценка отношения плотностей распределений, применение на примере \alpha-GAN
06
Байесовские нейронные сети
07
Байесовское сжатие нейронных сетей
08
Полунеявный вариационный вывод