Аннотации курсов
Математика для анализа данных
Курс проходит в формате blended, то есть, студенты будут проходить онлайн-курс “Математика для анализа данных”, и в дополнение к нему будут слушать семинары в режиме реального времени в Zoom. Онлайн-курс ориентирован на практическое применение методов и инструментов высшей математики и содержит примеры и задания в Python, а также проектные задания по анализу данных. На семинарах в Zoom будут разобраны темы, не освещенные в онлайн-курсе, по ним также будут теоретические, практические и проектные задания.
Курс проводится в первом модуле на первом году обучения.
В курсе “Математика для анализа данных” можно выделить четыре блока: дискретная математика, линейная алгебра, математический анализ для работы с данными, теория вероятностей и ее приложения
В блоке дискретной математики предполагается покрыть следующие темы: перечислительная комбинаторика, производящие функции, комбинаторика в Python, дискретная вероятность, графы, ориентированные графы, компоненты сильной связности, поиск в глубину и ширину, ациклические графы, деревья, остовные деревья, клики и независимые множества, эйлеровы и гамильтоновы циклы, потоки и разрезы, двудольные графы, паросочетания, случайные блуждания в графах, рекомендательные системы на основе подсчета truncated hitting distance.
В блоке линейной алгебры предполагается покрыть следующие темы: линейная алгебра в Python, матрицы и определители, методы их подсчета, системы линейных уравнений, собственные векторы и спектральное разложение, квадратичные формы, QR, LU, сингулярное разложение, псевдообратные матрицы, точность и стабильность, разреженные матрицы, матричное дифференцирование, тензорные разложения, нормы, матричные нормы.
В блоке математического анализа планируется покрыть следующие темы: математический анализ в Python, пределы, непрерывность, выпуклость, ряды, сходимость, производные, численные методы вычисления производных, ряды Тейлора, гладкая оптимизация, интегрирование, численные методы вычисления интегралов, ряды Фурье, преобразование Фурье, векторные поля: градиент, ротор и дивергенция, поток векторного поля через поверхность, теорема Остроградского-Гаусса, теорема Стокса.
В блоке теории вероятностей планируется покрыть следующие темы: вероятность в Python, классическая вероятность, условная вероятность и независимость, теорема Байеса и основы байесовского подхода, непрерывные распределения, свертка распределений, математическое ожидание, дисперсия, ковариация, моменты высших порядков, условное математическое ожидание и условное распределение, предельные теоремы: Пуассона, Муавра-Лапласа, закон больших чисел, центральная предельная теорема, неравенства концентрации меры.
Для успешного прохождения курса требуется знание основ высшей математики, а именно тем, покрываемых адаптационным курсом “введение в математику для анализа данных”; также для прохождения курса необходимо владеть базовыми навыками программирования на языке Python.
После прохождения курса студенты овладеют инструментами и методами основных разделов высшей математики (математический анализ, линейная алгебра, дискретная математика и теория вероятностей) на уровне, достаточном для нужд современного анализа данных.
Основы программирования на Python
Язык программирования Python является одним из самых простых в освоении и популярных языков программирования. Целью курса является изучение основных конструкций языка Python, которые пригодятся при решении широкого круга задач – от анализа данных до разработки новых программных продуктов. В результате освоения курса слушатели научатся обрабатывать и хранить числа, тексты и их наборы, освоят стандартную библиотеку языка Python и смогут автоматизировать задачи по сбору и обработке данных. Курс дает необходимую базу для освоения более специализированных областей применения языка Python, таких как машинное обучение, статистическая обработка данных, визуализация данных и многих других. Также слушатели познакомятся с основами различных парадигм программирования: процедурным, функциональным и объектно-ориентированным программированием. В курсе предлагается большое количество задач по программированию, расположенных по нарастанию сложности, что позволяет закреплять на практике изучаемый материал. К каждому занятию прилагается полный конспект, это делает изучение курса удобнее.
Курс проводился в оффлайн варианте для студентов бакалавриата факультета компьютерных наук НИУ ВШЭ. Курс проводится в первом модуле на первом году обучения. В конце курса студенты готовят индивидуальные проекты.
Основные разделы курса:
- Целые числа, ввод-вывод, простые операции со строками
- Условный оператор и цикл while
- Вещественные числа
- Функции и рекурсия
- Кортежи, цикл for, списки
- Сортировка
- Множества и словари
- Функциональное программирование
- Классы
- Проект
Для успешного освоения курса достаточно знания математики на уровне средней школы, опыта программирования не требуется.
Introduction to software engineering (основы промышленной разработки, курс читается на русском языке)
Курс читается во втором модуле на первом году обучения.
Для успешного освоения курса никаких предварительных знаний не требуется.
Курс предназначен для освоения работы с командной строкой, использования мощного текстового редактора, использования необычных функций систем контроля версий и многого другого. Мы рассмотрим дизайн и внутренности этих инструментов, чтобы студенты в будущем свободно владели и понимали остальных разработчиков, а также думали в рамках этих инструментов наиболее гибко. Студенты проводят сотни часов, используя эти инструменты в процессе обучения (и тысячи часов в течение своей карьеры), поэтому имеет смысл сделать процесс обучения максимально плавным и простым. Овладение этими инструментами не только позволяет вам тратить меньше времени на выяснение того, как подчинить ваши инструменты своей воле, но также позволяет решать проблемы, которые раньше казались невероятно сложными.
Алгоритмы и структуры данных
Алгоритмы и структуры данных являются основой для любой программной системы: распределенной системы, мобильного приложения, базы данных, web приложения. В данном курсе студент освоит основные структуры данных и алгоритмы, которые послужат фундаментом для всех дальнейших знаний в области компьютерных наук и программной инженерии.
Курс проходит в третьем модуле на первом году обучения.
Для успешного освоения курса необходимо знание базовых понятий высшей математики; также необходимо умение программировать на языке С++ - пререквизитом служит курс “основы программирования на С++”.
Программа курса:
Модель вычислений, введение в асимптотический анализ
Очередь, Стек, список и динамический массив
Сортировки
Бинарные деревья поиска
Хэш-таблицы
Графы и алгоритмы на них
Алгоритмы на строках
По окончании курса студенты будут владеть основными подходами к решению практических задач с помощью классических алгоритмов и структур данных. Также студенты будут уметь работать со стандартными контейнерами и анализировать алгоритмы,оценивать эффективность их работы.
Полученные знания пригодятся как в работе, так и при прохождении собеседований на позиции в IT-компаниях.
Машинное обучение (современные методы)
Курс пригодится всем, кто хочет погрузиться в область машинного обучения, разобраться в теории и прорешать много практических задач.
По результатам слушатели освоят способы предобработки и визуализации данных, изучат основные методы машинного обучения (линейные и метрические модели, решающие деревья и их композиции), научатся оценивать качество моделей.
Курс проводится во втором и третьем модуле на первом году обучения.
Для успешного прохождения курса требуются знания основ высшей математики, а также навыки программирования на Python. Пререквизиты: курс “математика для анализа данных” и курс “основы программирования на Python”.
Основные темы курса:
Обучение с учителем — линейные модели, решающие деревья, композиции моделей на основе бэггинга и бустинга.
Обучение без учителя — кластеризация и визуализация многомерных данных.
Подготовка данных — отбор признаков, обработка категориальных и текстовых признаков
Глубинное обучение
В последние годы методы глубинного обучения (нейросети) позволили достигнуть впечатляющих успехов в решении прикладных задач из таких областей как компьютерное зрение, обработка естественного языка, обработка аудио. В рамках данного онлайн курса мы рассмотрим основные нейросетевые модели, а также способы их применения и обучения. Студенты получат навыки использования этих технологий в стандартных задачах, а также разработки и модификации методов для новых задач.
Курс проводится в четвертом модуле на первом году обучения и в первом модуле на втором году обучения.
Пререквизитами являются курсы “математика для анализа данных”, “основы программирования на Python”, “машинное обучение”.
Тематический план:
Введение в глубинное обучение
Механика нейросетей и алгоритм обратного распространения ошибок Основные виды нейросетей
Обучение и регуляризация нейросетей
Глубинное обучение для задач компьютерного зрения
Глубинное обучение для задач обработки текстов
Глубинное обучение для построения вероятностных моделей
Непрямые способы использования нейросетей
Встраивание алгоритмов в слои нейросетей
Недифференцируемые модели и глубинное обучение с подкреплением
В результате освоения курса студент должен:
- знать основные принципы построения моделей на основе нейросетей;
- знать наиболее часто используемые стандартные архитектуры и области их применимости;
- знать стандартные алгоритмы обучения и регуляризации нейросетей; виды задач, которые уместно решать при помощи методов глубинного обучения;
- уметь распознавать задачи, которые потенциально можно решить при помощи методов глубинного обучения;
- уметь подбирать наиболее подходящий набор алгоритмов;
- уметь обучать нейросетевые модели на новых наборах данных;
- владеть навыками работы с библиотекой pytorch и ее документацией;
- владеть навыками реализации систем для обучения и использования нейросетей;
- владеть навыками тестирования и отладки существующих систем.
Прикладная статистика в машинном обучении
Курс состоит из трех частей (трех курсов): разведочный анализ данных (2 модуль), прикладная статистика 1 (3 модуль) и прикладная статистика 2 (4 модуль)
Ни одно важное решение в крупных компаниях не принимается без А/B теста. Довольно часто в дизайне эксперимента и интерпретации результатов допускаются ошибки. В рамках онлайн-курса «Анализ данных и прикладная статистика» мы расскажем о том, как аккуратно переводить повседневные задачи на язык статистики и выбирать методы для проверки своих идей.
Студенты научатся математически формализовать свои повседневные задачи и освоят набор необходимых статистических методов для их решения.
Курс проходит в первом модуле на втором году обучения.
Пререквизитами являются курсы “математика для анализа данных” и “основы программирования на Python”
В результате освоения курса студенты будут уметь применять изученные в рамках дисциплины методы к решению прикладных задач анализа данных.
Тематический план:
- Работа с табличными данными в pandas.
- От случайных величин к описательной статистике. Её применение для анализа признаков и поиска аномалий. Работа с пропусками в данных.
- Разработка сложных признаков: groupby, join. Примеры feature engineering.
- Визуализация данных: matplotlib, seaborn, wordcloud.
- Визуализация данных: что такое хорошие и плохие графики, как рассказать историю с помощью визуализации
- Репрезентативность. Точечные оценки. Свойства оценок: несмещенность, состоятельность и асимптотическая нормальность в картинках и примерах. Кейсы про не очень удачные выборки и исследования.
- Откуда берутся точечные оценки? Метод моментов и метод максимального правдоподобия.
- Доверительные интервалы на основе ЦПТ. Разные союзники для строительства доверительных интервалов: распределения хи-квадрат, Стьюдента и Фишера, теорема Фишера.
- От доверительных интервалов к проверке гипотез. Постановка задачи. p-value, ошибки I и II рода. Параметрические критерии. Строительство асимптотического критерия для долей и для пары долей на основе ЦПТ. Гипотезы о среднем, разбросе, доле. Критерий отношения правдоподобий.
- Непараметрические критерии. Критерии согласия. Бутстрап. Проверка нормальности. Саммари о том, что проверка гипотез это лишь разные способы измерять расстояния и делать выводы.
- А/B-тесты. Планирование эксперимента, обсчет результатов. Бизнес-метрики.
- Корреляции: Пирсона, ранговая, Мэтьюса, частная, множественная. Проверка гипотез о независимости.
- Модели временных рядов. Временные ряды как тип данных. Корреляции временных рядов, DTW.
- Введение в байесовскую статистику.
Компьютерное зрение
Развитие методов машинного обучения, вычислительного оборудования, технологий цифровой фото- и видео-съемки, и интернета привели в последние годы к стремительному улучшению качества работы систем компьютерного зрения. Сегодня компьютерное зрение активно применяется в таких областях, как медицина, картография, поиск, видеонаблюдение и беспилотные автомобили. В рамках онлайн курса «Компьютерное зрение» будут подробно разобраны решения основных задач компьютерного зрения: классификация изображений, распознавание и детекция объектов, сегментация изображений и др. Студенты получат навыки использования этих технологий в стандартных задачах, а также разработки и модификации методов для новых задач.
Курс проводится в первом модуле на втором году обучения.
Пререквизитами являются курсы “математика для анализа данных”, “основы программирования на Python”, “машинное обучение”, “глубинное обучение”.
Тематический план:
- Введение в компьютерное зрение. Цифровое изображение и тональная коррекция.
- Основы обработки изображений
- Совмещение изображений и локальные особенности.
- Классификация и поиск по изображениям
- Сверточные нейросети для классификации и поиска похожих изображений
- Детекторы объектов
- Сегментация изображений
- Преобразование и генерация изображений
- Основы обработки видео
- Трёхмерная реконструкция по изображениям
В результате освоения дисциплины студенты будут:
- знать основные современные математические модели и алгоритмы анализа изображений,
- уметь формулировать, решать и оценивать результат решения задач компьютерного зрения,
- уметь оценивать качество решения основных задач компьютерного зрения и обработки изображений,
- владеть навыками реализации алгоритмов решения задач компьютерного зрения на языке Python с использованием библиотек машинного обучения и обработки изображений,
- владеть аппаратом нейросетевых моделей для решения задач анализа и обработки изображений.
Анализ временных рядов
Курс читается представителями компании SAS.
Данный курс предполагает познакомить студентов с особенностями обработки данных, содержащих в себе временные зависимости. Будут рассмотрены разносторонние подходы к моделированию временных рядов, включающие в себя статистические модели, байесовские методы и иные альтернативные концепции. Временные ряды являются широко распространённой структурой данных в задачах, решаемых в самых разных отраслях: начиная от анализа физических процессов и заканчивая прогнозированием спроса на какие-либо товары в розничных сетях. Данный курс поможет сформировать унифицированную базу знаний о временных рядах, которая будет применима в любом из направлений.
Курс проходит в первом модуле на втором году обучения. Курс является курсом по выбору.
Пререквизиты: курс “математика для анализа данных”.
Тематический план:
- Общее про ряды: сезонность, цикличность, тренд, стационарность.
- Характеристики рядов: автокорреляция, частная автокорреляция, DTW
- Преобразование Фурье для визуализации
- Модель ETS
- Модель ARIMA Тесты на единичные корни: KPSS, DW
- Теорема Вольда, Модель ARMA
- Модели ARIMA и SARIMA
- Байесовский подход на примере prophet
- Модели GARCH, EGARCH
- Анализ временных рядов в финансах, в ритейле и в медицине
По окончании курса студенты будут:
- Уметь распознавать необходимость применения моделей с ненаблюдаемыми компонентами.
- Уметь использовать фильтр Калмана для оценки моделей.
Автоматическая обработка текста
Цель курса — ознакомление студентов с задачами и современными технологиями Natural Language Processing. Планируется ознакомление со статистическими и нейросетевыми подходами в NLP, приобретение навыков их использования в реальных практических задачах, в частности, с помощью библиотеки tensorflow. Особое внимание будет уделено приложениям к задаче машинного перевода
Методы оптимизации в машинном обучении
Методы оптимизации лежат в основе решения многих задач компьютерных наук. Например, в машинном обучении задачу оптимизации необходимо решать каждый раз при настройке какой-то модели алгоритмов по данным. Причём от эффективности решения соответствующей задачи оптимизации зависит практическая применимость самого метода машинного обучения. Данный курс посвящен изучению классических и современных методов решения задач непрерывной оптимизации (в том числе невыпуклой), а также особенностям применения этих методов в задачах оптимизации, возникающих в машинном обучении. Основной акцент в изложении делается на практические аспекты реализации и использования методов. Целью курса является выработка у слушателей навыков по подбору подходящего метода для своей задачи, наиболее полно учитывающего её особенности.
Курс проводится во втором модуле на втором году обучения. Курс является курсом по выбору.
Тематический план:
- Основные понятия и примеры задач.
- Методы одномерной оптимизации
- Методы многомерной оптимизации
- Методы оптимизации с использованием глобальных верхних оценок, зависящих от параметра
- Методы внутренней точки.
- Разреженные методы машинного обучения
- Методы отсекающих плоскостей
- Стохастическая оптимизация
В результате освоения курса студенты будут:
- Знать основные методы непрерывной оптимизации, в том числе невыпуклой.
- Уметь толковать задачи машинного обучения как задачи оптимизации и применять релевантные задаче методы.
- Владеть методами теоретического исследования оптимизационного процесса.
- Владеть навыками обработки и интерпретации результатов эксперимента.
- Уметь находить градиенты и гессианы функций от многих переменных.
- Уметь примененять методы оптимизации с использованием глобальных верхних оценок.
- Уметь определять возможности применения того или иного метода оптимизации.
- Уметь ориентироваться в потоке научной информации для использования новых методах оптимизации в отсекающих плоскостей.
Обработка и анализ больших массивов данных (full stack data engineering)
В этом курсе мы научимся применять алгоритмы машинного обучения к большим объемам данных. Курс разбит на три части: в первой изучаются методы работы с данными, во второй сконцентрируемся на изменениях в алгоритмах машинного обучения, в третьей части изучим применение навыков и алгоритмов из первых двух блоков в реальных сервисах.
Для успешного прохождения курса слушатели должны иметь базовые представления о линейной алгебре (курс “математика для анализа данных”), классических моделях машинного обучения и нейронных сетях (курсы “машинное обучение” и “глубинное обучение”), знакомы с классическими базами данных.
Полученные знания будут проверяться тестами и практическими заданиями. Для прохождения курса потребуется доступ в интернет, все материалы будут доступны онлайн.
После прохождения курса студенты будут уметь эффективно использовать большие объемы данных, обучать модели машинного обучения и создавать сервисы, использующие большие объемы данных и полученные модели для решения практических задач.
Тематический план:
- Базовые подходы к хранению и извлечению информации
- Bash для инженера
- Начало работы с большим объемом данных
- Знакомство со Spark
- Продвинутое использование Spark
- Подготовка данных к обучению
- Обучение классических моделей на больших данных
- Построение рекомендательных систем
- Анализ больших объемов текстовой информации
- Обучение глубоких нейронных сетей
- Развертывание ML моделей
- Анализ системы и аналитика
- End-To-End pipeline, system evolution
- Оптимизация моделей, исполнение на клиенте
- Поиск приближенного ответа
Обучение с подкреплением
Цель курса — ознакомление студентов с основными подходами и алгоритмами обучения с подкреплением. Планируется дать понимание того, какие существуют подходы к решению задач обучения с подкреплением, научить выбирать подход и алгоритм, наиболее подходящий для рассматриваемой студентом задачи, научить обучать модели с использованием современных нейросетевых библиотек.
Курс читается в третьем модуле на втором году обучения.
Пререквизиты: курсы “Математика для анализа данных” и “Машинное обучение”.
Тематический план:
- RL как blackbox optimization
- Value-based методы
- Model-free методы
- Приближённое обучение с подкреплением
- Exploration в обучении с подкреплением
- Policy gradient методы, часть 1
- Рекуррентные нейронные сети
- Partially observable MDPs
После прохождения курса студенты будут:
- знать что такое среда, состояние и агент в обучении с подкреплением
- уметь сформулировать задачу обучения с подкреплением и выбрать эффективный способ её решения
- уметь распознавать ситуации, в которых уместно применение методов обучения с подкреплением
- уметь обучить по возможности оптимального агента для решения задачи, оценить его эффективность
- знать основные парадигмы обучения с подкреплением и границы их применимости
- владеть методами теоретического исследования используемых алгоритмов
- уметь применять различные трюки для ускорения и оптимизации обучения
- уметь достигать баланса между exploration и exploitation
- уметь выбирать архитектуру рекуррентной нейронной сети и обучать её
Проектный семинар “Сбор и обработка больших данных”
В рамках данного курса каждый студент выбирает себе задачу по теме курса и решает её. Проекты могут быть индивидуальные или групповые. Подготовка к проекту осуществляется лично студентами и на проектном семинаре.
Курс проходит в третьем модуле на втором году обучения.
Пререквизиты: курсы “машинное обучение” и “full stack data engineering”.
В результате прохождения курса у каждого студента (или группы студентов) будет законченный проект по сбору и обработке больших данных. Успешные проекты можно добавить в свое портфолио.
Распределенные системы
Дисциплина направлена на изучение основных алгоритмов, лежащих в основе распределённых систем, а также на получение практического опыта работы с технологиями для создания распределённых и высоконагруженных приложений.
План дисциплины:
- Введение. Распределенные системы. Примеры, преимущества, особенности, требования.
- Варианты взаимодействия между процессами. Обмен сообщениями. Синхронные и асинхронные операции. Гарантии доставки, сохранение порядка. Модель запрос-ответ, RPC, идемпотентность.
- Дизайн прикладного протокола, сериализация данных. Эволюция протокола HTTP, стиль REST. WebSockets. Bidirectional streaming в gRPC.
- Взаимодействия в группе. Многоадресная рассылка (multicast). Гарантии и варианты реализации. Оверлейные сети. Распространение информации. Epidemic protocols, gossip, anti-entropy, rumor spreading.
- Непрямое взаимодействие. Message queue, pubsub, DSM, tuple space.
- Отказы. Обнаружение отказов. Свойства детектора отказов. Примеры реализации детектора. Сервис group membership.
- Именование и поиск. Типы и варианты реализации. Поиск в локальной сети. DNS. Поиск в P2P-системах. DHT.
- Высоконагруженные сервисы. Масштабирование. Репликация сервисов, балансировка нагрузки. Шардинг, consistent hashing и другие подходы.
- Распределенные вычисления. Параллельная обработка запросов на кластере, закон Амдала, stragglers. Пакетная обработка данных, модель MapReduce.
- Репликация данных. Варианты реализации (один лидер, несколько лидеров, кворумные чтения и запись). Согласованность, линеаризуемость, другие модели и гарантии.
- Порядок событий. Физические и логические часы. Обнаружение конфликтов. Version vectors. CRDT.
- Обзор некоторых классических распределенных алгоритмов. Mutual exclusion, consistent snapshots, leader election.
- Координация и консенсус. Примеры задач, сводимых к консенсусу. Total Order Broadcast. 2PC. Задача консенсуса. FLP Impossibility. Обзор алгоритмов консенсуса, Paxos, Raft. Практические реализации, ZooKeeper.