Курсы ШАДа
В течение семестра каждый учащийся должен успешно пройти как минимум три курса. Например, если в основной программе их два, то необходимо выбрать какой-нибудь из спецкурсов
При разработке высоконагруженных систем приходится обращать повышенное внимание на то, в каком окружении работает код. В компаниях типа Яндекса это, как правило, многочисленные сервера с несколькими многоядерными x86-процессорами под операционной системой Linux. Понимание того, как работает процессор и операционная система, позволяет понять некоторые особенности работы реального кода.
Основу курса составляет изложение теоретических и практических вопросов построения современных операционных систем, их концепций и алгоритмов. Изучаются аспекты взаимодействия с аппаратурой компьютера, организация виртуальной памяти, многозадачность и многопоточность, средства синхронизации, блочные устройства, файловые системы и т. п.
Практические задания строятся на учебной ОС Nikka. В качестве языка выбран Rust, но глубоких знаний по нему для прохождения курса не потребуется.
Программа:
Современные приложения строятся, как правило, поверх каких-нибудь СУБД. СУБД позволяют разработчикам не думать о том, как хранить данные на диске и как их искать, как обеспечить конкурентный доступ сразу многим пользователям, как оптимальнее воспользоваться ресурсами железа. Все эти сложности скрыты за простым интерфейсом языка запросов, как правило, какого-нибудь диалекта SQL. Тем не менее при построении высоконагруженных систем становится необходимым понимать, как работает СУБД и почему выполнение запросов занимает именно такое время. В курсе мы будем разбирать, как устроены СУБД изнутри: как хранить данные, как выполнять запросы, как реализовать транзакции. Предполагается, что слушатели уже знакомы с понятиями алгоритмов во внешней памяти, многопоточным программированием, распределёнными системами и умеют программировать на C++.
Программа:
Современные приложения строятся, как правило, поверх каких-нибудь СУБД. СУБД позволяют разработчикам не думать о том, как хранить данные на диске и как их искать, как обеспечить конкурентный доступ сразу многим пользователям, как оптимальнее воспользоваться ресурсами железа. Все эти сложности скрыты за простым интерфейсом языка запросов, как правило, какого-нибудь диалекта SQL. Тем не менее при построении высоконагруженных систем становится необходимым понимать, как работает СУБД и почему выполнение запросов занимает именно такое время. В курсе мы будем разбирать, как устроены СУБД изнутри: как хранить данные, как выполнять запросы, как реализовать транзакции. Предполагается, что слушатели уже знакомы с понятиями алгоритмов во внешней памяти, многопоточным программированием, распределёнными системами и умеют программировать на C++.
Модуль посвящён байесовскому подходу к теории вероятностей: инструменту, который помогает работать в условиях неопределённости. Учащиеся рассматривают интерпретацию вероятности как меры незнания, правила оперирования вероятностями и применение байесовского подхода в задачах машинного обучения. Особое внимание уделяется решению задач выбора параметров модели, селекции признаков, кластеризации, уменьшению размерности и интерпретации свойств, закладываемых в модели. Учащиеся строят вероятностные модели, выводят необходимые формулы и эффективно реализуют решения с учётом структуры прикладной задачи.
Программа:
Для современных приложений безопасность и стабильность — неотъемлемые составляющие качественного сервиса. Именно этими свойствами обеспечивается доступность серверных приложений, конфиденциальность и целостность данных, хранимых в серверной инфраструктуре и пользовательских устройствах.
Этот курс нацелен на то, чтобы погрузить слушателей в увлекательный мир информационной безопасности, расширить их кругозор, а также получить релевантные навыки для начинающего специалиста в ИБ.
Программа:
Модуль знакомит с основами лингвистики, разнообразием языков мира и устройством человеческого языка. Рассматриваются аспекты языков, доступные для автоматической обработки, и текущие ограничения в этой области. Практическая часть включает решение лингвистических задач различной сложности.
Программа:
Модуль посвящён основам криптографии и ключевым алгоритмам, используемым в современных криптопротоколах. Рассматриваются блочные шифры, хэш-функции, режимы шифрования, алгоритмы аутентификации сообщений и принципы их строения. Акцент сделан на фундаментальных криптографических идеях, а не на перечислении стандартов. Отдельное внимание уделяется методам современного криптоанализа и принципам создания надёжной криптографической инфраструктуры.
Программа:
Модуль посвящён современным нейросетевым методам в компьютерном зрении и в компьютерной графике. Студенты изучат основы построения и обучения нейронных сетей, современные свёрточные и трансформерные архитектуры и их применение к задачам детекции объектов, сегментации изображений, обучению представлений, переносу обучения (transfer learning) и интерпретации моделей. Кроме того, в курсе рассматриваются нейросетевые методы для генерации изображений, включая GAN, вариационные автоэнкодеры и диффузионные модели. Дополнительно изучаются подходы к генерации новых видов 3D-сцен, использующих как явную модель сцены, восстановленной нейросетевыми методами, так нейронные рендереры.
Программа:
Этот курс посвящён принципам и методам проектирования распределённых систем. Студенты изучают проблемы этих систем, включая ограничения CAP-теоремы и способы обеспечения согласованности и надёжности через идемпотентность и двухфазный коммит. Курс охватывает как высокоуровневые (CQRS, SAGA), так и низкоуровневые паттерны (sidecar, ambassador), а также специальные инструменты для распределённых сред. Завершается изучением преобразования монолитных приложений в модульные структуры с использованием Domain-Driven Design.
Программа:
Модуль посвящён методам компьютерного зрения для анализа изображений и видео. Рассматриваются ключевые задачи области, включая их постановку, метрики, актуальные датасеты и современные алгоритмы, основанные на свёрточных сетях и трансформерах. Акцент сделан на практическом освоении современных подходов, используемых в реальных проектах. Лекции сопровождаются лабораторными и домашними работами, которые позволяют применять изученные методы на практике с использованием Python и специализированных библиотек.
Программа:
Модуль знакомит с ключевыми концепциями и классическими алгоритмами, которые лежат в основе современных ML-решений. Учащиеся изучают принципы построения моделей, учатся применять их на практике и понимать, как улучшать и адаптировать алгоритмы для нестандартных задач. От классического ML до основ глубокого обучения — модуль даёт прочный фундамент для работы с данными и создания моделей машинного обучения.
Программа:
С++ — мощный язык с богатым наследием. Тем, кто только ступил на путь освоения этого языка, очень просто заблудиться в изобилии техник и приёмов, созданных за последние 30 лет. Курс посвящён современному подмножеству языка — Modern C++ (стандарты 11, 14, 17, 20). Много внимания уделяется инструментам и библиотекам, которые не являются частью языка, но без которых не получится построить большой и сложный проект.
Программа:
Распределённые системы появились, с одной стороны, чтобы справиться с нагрузкой, которую уже не выдержит отдельный узел. А с другой — чтобы быть более устойчивыми к выпадению отдельных узлов. На курсах по распределённым системам и базам данных вы познакомились с протоколами и алгоритмами, позволяющими системе выдерживать отказ отдельных узлов или накопителей данных. Но что при этом происходит с нагрузкой на систему?
Жизнь показывает, что одна из частых причин аварий в современных системах — перегрузка всей системы или отдельных узких мест. Командам, занимающимся эксплуатацией систем, приходится постоянно сталкиваться с перегрузками, быстро находить причину и принимать решение (например, если была внесена ошибка в конфигурацию сервиса, нужно конфигурацию как можно быстрее откатить назад). В некоторых компаниях решение подобных задач даже выделяется в отдельную профессию — site reliability engineer. В других — задачи SRE решают сами разработчики.
В этом курсе мы научимся оценивать производительность и разберём принятые в индустрии практики и методики, направленные на предупреждение подобных аварий.
Программа:
Дисциплина «Разработка распределённых систем» изучает подходы и технологии для создания масштабируемых и надёжных систем, работающих на нескольких взаимосвязанных компьютерах. Курс охватывает вопросы отказоустойчивости, репликации данных, алгоритмов консенсуса, управления транзакциями и параллельной обработки данных, а также современные технологии, такие как блокчейн.
Программа:
В этом модуле рассматриваются ключевые этапы работы с данными, необходимыми для создания ML/AI-решений. Студенты изучат проектирование и оптимизацию конвейеров сбора и разметки данных, методы автоматизации процессов и подходы к оценке и улучшению качества моделей. Модуль включает лекции, семинары, примеры из индустрии и проектную работу, давая возможность пройти полный цикл — от сбора данных до поддержки модели в условиях изменяющихся данных.
Программа:
Модуль посвящён теории игр — математическому подходу к анализу стратегических взаимодействий между сторонами. Участники изучат ключевые понятия и методы, включая концепции, предложенные Джоном Нэшем, а также научатся разрабатывать оптимальные стратегии с учётом действий оппонентов. Лекции сопровождаются практическими примерами и задачами из экономики, биологии и политологии, где теория игр находит успешное применение.
Программа:
Модуль охватывает изучение различных интерпретаций понятия информации, включая информацию по Хартли, энтропию Шеннона, Колмогоровскую сложность и коммуникационную сложность. Эти концепции рассматриваются как отражение разных граней интуитивного понимания информации. Участники узнают, как эти подходы используются для решения задач в различных областях.
Программа:
Курс охватывает широкий спектр тем и подходит для специалистов различных направлений. Его практическая направленность обеспечивает применение изученного материала в реальных рабочих задачах. Примеры для разъяснения основаны не только на базовых концепциях, но и на реальных кейсах из профессиональной практики. Высокая интенсивность курса подкрепляется домашними заданиями, которые охватывают основные темы лекций и помогают закрепить знания на практике.
Программа:
Rust — это молодой системный язык программирования, спроектированный с учётом богатой истории C и С++. За языком уже сейчас стоят большие игроки ИТ-индустрии: в Rust Foundation входят Google, Amazon, Microsoft, Huawei и Meta (признана в РФ экстремистской организацией) — эти компании спонсируют развитие языка и принимают активное участие в его развитии.
Rust сочетает в себе выразительность Python, безопасность Java и быстродействие C. По сравнению с С++ Rust является более безопасным языком, позволяющим доказуемо не допускать undefined behavior, при этом не уступая С++ в производительности. По сравнению с Go Rust позволяет статически предотвращать гонки и нежелательные захваты переменных, а также обладает повышенной производительностью за счёт отсутствия runtime. Такое сочетание скорости и безопасности достигается уникальной системой владения объектами и отслеживания их времени жизни, которая позволяет в момент компиляции выявлять баги, вызванные небезопасной работой с памятью.
А ещё Rust — это самый любимый язык разработчиков по результатам ежегодных опросов Stack Overflow последние восемь лет подряд. Вероятность того, что вы его полюбите, — больше 80%!
Программа:
Модуль посвящён обработке естественного языка (NLP) — области искусственного интеллекта, изучающей, как компьютеры могут понимать, анализировать и извлекать информацию из текстов на естественном языке. На курсе рассматриваются ключевые задачи NLP, такие как машинный перевод, анализ тональности, извлечение сущностей, генерация текста и многое другое. Особое внимание уделяется современным подходам: нейросетевым моделям, их архитектурам и обучению, а также эволюции статистических методов, которые находят новое применение в сочетании с нейросетями. Курс охватывает как теоретические аспекты, так и практические методы, что позволяет сформировать целостное понимание современных инструментов и подходов в обработке текста.
Программа:
Модуль посвящён современным подходам к 3D-реконструкции объектов и сцен с использованием методов глубокого обучения. Учащиеся изучают способы представления 3D-данных, такие как сетки, воксели и облака точек, а также применяют генеративные состязательные сети для обучения на непарных данных, что преодолевает ограничения классических методов, требующих размеченных наборов данных.
Программа:
Вторая часть курса по базам данных представляет собой более глубокое погружение в устройство современных СУБД. Будут разбираться темы, наиболее актуальные разработчикам СУБД на сегодняшний день, особое внимание уделено оптимизации выполнения SQL-запросов. На последних занятиях мы разберём, как устроены несколько реальных современных систем. У курса большая команда преподавателей — вот мы и расскажем, какие системы разрабатываем сами.
Ожидается, что слушатели прошли первую часть курса, умеют программировать на C++ и Rust, а также знакомы с распределёнными системами.
Программа:
Модуль продолжает изучение криптографии, сосредотачиваясь на асимметричных методах и криптографических протоколах. Учащиеся изучают шифрование с открытым ключом, схемы электронной подписи, протоколы согласования ключей и аутентифицированной выработки общего ключа. Особое внимание уделяется защите каналов связи, включая протокол TLS, вопросам доверия к открытым ключам, инфраструктуре PKI и методам хранения закрытых ключей. Завершающие лекции знакомят с современными направлениями, такими как квантовая криптография и блокчейн.
Программа:
Графические процессоры (GPU) предоставляют разумный компромисс между энергоэффективностью и лёгкостью программирования, поэтому без них сейчас сложно представить многие области, например, машинное обучение, компьютерную графику, биоинформатику и т. д.
В рамках курса мы посмотрим, как выглядит архитектура современных GPU, познакомимся с экосистемой CUDA — от компилятора и библиотек до профилировщика и дизассемблера, научимся писать параллельные алгоритмы на GPU и узнаем, на что стоит обращать особое внимание при максимизации производительности своего кода. Курс будет интересен тем студентам, которые хотят разобраться, в чём состоит принципиальное отличие GPU от традиционных CPU, понимать, какие вычислительные задачи идеальнее всего подходят для GPU, познакомиться с CUDA-экосистемой и разрабатывать эффективные алгоритмы для NVIDIA GPU с учётом их особенностей.
Для прохождения курса критически важным является знание C++.
Программа:
Модуль посвящён машинному обучению на данных с графовой структурой (graph machine learning). Мы изучим, как графы возникают в задачах машинного обучения и как эффективно работать с такими данными. Будут рассмотрены как классические подходы, так и современные графовые нейронные сети. Методы курса находят применение в рекомендациях, выявлении мошенничества, моделировании трафика, прогнозировании свойств молекул, комбинаторной оптимизации и в других областях.
Программа:
Модуль является продолжением курса теории игр и охватывает дополнительные разделы: теорию социального выбора, теорему Эрроу, игры с сигнализированием, кооперативную теорию игр, а также теорию аукционов и дизайн механизмов. Студенты узнают, как эффективно кооперироваться, справедливо делить прибыль, а также анализировать и проектировать аукционы, включая обобщённый аукцион второй цены и аукцион Вики, применяемые в продаже рекламы.
Программа:
На курсе рассмотрим, как работают сети и какие проблемы могут возникнуть в процессе работы с ними. Вы узнаете, как работает сеть на уровне машины, на уровне дата-центра и на уровне интернета, как можно обеспечить отказоустойчивость и надёжность канала сети, как использовать утилиты для диагностики сетевых проблем. Вряд ли у вас получится разрабатывать отказоустойчивые системы для одной машины, так что приходите изучать сети.
Программа:
Модуль знакомит учащихся с методами и теориями дискретной математики и компьютерных наук. Рассматриваются асимптотические методы в анализе, способы решения рекуррентных соотношений, комбинаторные оценки и приложения теории вероятностей. Студенты изучают числа Каталана, Стирлинга, Белла, диаграммы Юнга, многочлены и числа Бернулли, а также производящие функции. Основное внимание уделяется доказательству комбинаторных тождеств и применению предельных теорем.
Программа:
Модуль продолжает изучение машинного обучения, фокусируясь на глубоких нейронных сетях, обучении с подкреплением, компьютерном зрении и генеративных моделях. Учащиеся осваивают построение рекомендательных систем, анализ временных рядов и другие современные подходы, применяемые в машинном обучении.
Программа:
Модуль знакомит учащихся с основами прикладной статистики. Учащиеся изучают корреляционный, дисперсионный и регрессионный анализ, анализ временных рядов, методы понижения размерности, множественную проверку гипотез, критерии согласия и однородности, а также методы обнаружения выбросов. Особое внимание уделяется практическому применению статистических методов для решения различных задач.
Программа:
В рамках модуля рассмотрим широкий спектр подходов, применяемых в мультимодальных моделях. Мы начнём с изучения высокоуровневой классификации, основанной на методах смешивания различных модальностей входных данных. Мы детально рассмотрим ключевые подходы и фундаментальные архитектуры (такие как Flamingo, LLaVA, Qwen-VL), которые позволят легче перейти к пониманию более сложных модальностей.
От классических моделей, принимающих на вход текст и изображение, мы плавно перейдём к изучению других модальностей, включая видео, звук, модальность action, а также рассмотрим модели 3D-понимания (LLaVA-3D и SpatialRGPT). Особое внимание будет уделено интеграции генерации данных в мультимодальные LLM.
Программа:
Модуль посвящён методам обучения с подкреплением (Reinforcement Learning, RL) — подходу машинного обучения, позволяющему создавать программы, способные самостоятельно принимать решения для достижения оптимальных результатов. В рамках курса студенты изучат основные принципы RL, включая взаимодействие агента с окружающей средой, формирование стратегии на основе вознаграждений, и методы оптимизации политики. Особое внимание будет уделено практическому применению RL для решения задач, таких как управление роботами, игра в сложные стратегии и оптимизация бизнес-процессов.
Программа:
Вторая часть курса по C++ фокусируется на углублённом изучении многозадачности, синхронизации потоков, сетевого программирования и оптимизации кода. Студенты познакомятся с condition variables, атомарными переменными, методами отладки с использованием gdb и lldb, а также с продвинутыми техниками тестирования. Модуль включает изучение метапрограммирования, работы с CLang и LLVM, профилирование, сетевое программирование. Особое внимание уделяется развитию языка и новым стандрартам C++.
Программа:
Модуль посвящён изучению методов и алгоритмов, основанных на матричных операциях. Эти подходы находят широкое применение в вычислительной математике, линейной алгебре, машинном обучении и обработке данных, а также в решении прикладных задач в науке и технике.
Модуль посвящён современным методам статистики, которые выходят за рамки стандартных курсов математической статистики. Студенты изучат бутстреп, непараметрическую регрессию, сглаживание с использованием ортогональных базисов, методы снижения размерности и анализа чувствительности, а также узнают, как эти подходы применяются в машинном обучении для улучшения анализа данных. Особое внимание уделено созданию суррогатных моделей для ускорения сложных инженерных симуляций, что позволяет решать задачи оптимизации и анализа параметров на практике с иллюстрацией на реальных примерах из индустрии.
Программа
Модуль посвящён изучению алгоритмов рекомендательных систем, которые помогают пользователям находить релевантный контент в условиях информационного изобилия. Студенты познакомятся с классическими методами, такими как матричные факторизации, и современными нейросетевыми подходами, а также узнают, как применять эти алгоритмы на практике и запускать их в продакшн. Особое внимание будет уделено реальным кейсам использования рекомендательных систем в сервисах Яндекса и других компаний.
Программа
Модуль знакомит учащихся с современными технологиями обработки речи. Студенты узнают, как устроены системы распознавания и синтеза речи, эхо- и шумоподавление, голосовая активация и биометрия. Узнают про добавление аудиомодальности в LLM. Научатся работать с сырыми аудиоданными, обрабатывать их, узнают, как устроена речь человека. Курс включает практическую работу с алгоритмами и инструментами, лежащими в основе голосовых помощников, синхронного перевода и других речевых технологий.
Программа:
Курс знакомит с функциональными языками программирования, такими как Haskell, и их отличиями от традиционного императивного подхода. В теоретической части студенты изучают основы лямбда-исчисления, системы типов и алгоритм Хиндли — Милнера. Практическая часть включает изучение ленивой семантики, алгебраических типов данных, монад, функторов и аппликативных функторов. Слушатели научатся решать задачи ввода-вывода, управлять состоянием и комбинировать монадические эффекты, применяя эти знания на практике.
Программа:
Курс сосредоточен на практических аспектах глубинного обучения, позволяя эффективно решать задачи на всех этапах работы с моделями. Студенты изучат, как организовать распределённое обучение, работать с крупными моделями, оптимизировать их для быстрого инференса и развёртывать в облаке. Особое внимание будет уделено инструментам для поиска узких мест в коде, особенностям задач NLP и CV, а также принципам воспроизводимости и версионирования экспериментов. На практических занятиях студенты освоят использование современных фреймворков и автоматизацию процессов обучения и применения нейросетей.
Программа:
Курс знакомит с основами Go и учит применять язык на практике. На первый взгляд Go похож на C: он небольшой, похож по синтаксису и статически типизирован. Но на этом сходство заканчивается — Go заимствует хорошие идеи из других языков, но избегает усложняющих фич.
Курс охватывает следующие темы: стандартную библиотеку, инструменты языка (профайлер, race-детектор, пакетный менеджер и т. д.) и concurrency. Основной упор сделан на практическом применении и решении конкретных задач.
Программа:
В модуле рассматривается методология A/B-тестирования для оценки эффективности изменений в различных областях, таких как интерфейсы, модели поиска или новые продукты. Учащиеся изучают, как анализировать поведение пользователей и использовать A/B-тесты для проверки гипотез, которые выходят за рамки стандартных метрик, отражая реальное влияние изменений на удобство и прибыль.
Программа:
Курс посвящён теоретическим и практическим аспектам concurrency, включая многопоточное программирование. В курсе рассматриваются механика переключения контекста, планирование потоков в операционной системе и файберов в рантаймах языков программирования, запись в общие ячейки памяти внутри процессоров, когерентность кэшей, железные и аксиоматические модели памяти, многопоточные структуры данных и техники синхронизации, управление памятью в многопоточных структурах данных, конкурентные аллокаторы и сборка мусорка, изоляция транзакций в базах данных.
Программа:
В данном курсе мы рассмотрим способы писать эффективный многопоточный код. Научимся программировать с точки зрения тяжёлых вычислений (на CPU и GPU) и исполнения большого числа конкурентных задач (сетевое взаимодействие в микросервисных архитектурах).
Программа:
Модуль посвящён изучению беспилотных автомобилей — одного из самых сложных и востребованных технологических вызовов последних десятилетий. Студенты познакомятся с основными компонентами беспилотных систем, типичными задачами, возникающими при их разработке, и методами их решения. А также узнают о современном состоянии индустрии, ключевых участниках и их достижениях на пути к полностью автономному транспорту.
Программа: