Специальные курсы

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

Первый семестр
Теория игр
В математике игрой называется стратегическое взаимодействие сторон — например, людей, животных, фирм, стран. Теория игр занимается тем, что пытается предсказать исход подобного взаимодействия. Задача теории игр — найти такую стратегию, которая позволит игроку достичь наилучшего результата. При этом нужно учитывать, что исход игры зависит не только от действий самого игрока, но и от действий его оппонентов. Основной подход к «решению» игр предложил американский математик Джон Нэш, получивший в 1994 году Нобелевскую премию по экономике. На лекциях мы с вами изучим основные понятия теории игр, поиграем в игры и рассмотрим задачи из разных областей знаний (экономика, биология, политология), которые теория игр помогает решить.
01
Введение в теорию игр. Применение теоретико-игровых моделей в различных областях. Основные понятия: игрок, стратегия, платеж. Примеры игр в нормальной и развернутой форме. Случайный выбор (функция полезности фон Неймана-Моргенштерна).
02
Игры в развернутой форме. Дерево игры. Совершенная информация. Информационные множества. Случайный выбор (функция полезности фон Неймана-Моргенштерна).
03
Игры в нормальной форме. Построение нормальной формы игры по развернутой и обратно. Смешанные стратегии. Поведенческие стратегии. Игры с совершенной памятью. Связь между поведенческими и смешанными стратегиями.
04
Игры с одновременными ходами. Строгое и слабое доминирование. Последовательное исключение строго доминируемых стратегий. Примеры не интуитивных профилей стратегий, остающихся после исключения по строгому доминированию.
05
Наилучший ответ. Последовательное исключение стратегий, не являющихся наилучшим ответом. Цепочка оправданий и рационализируемые стратегии. Равновесие Нэша в чистых и смешанных стратегиях. Теоремы существования равновесия Нэша. Метод стакана для вычисления равновесий Нэша для игр с двумя игроками и 2M стратегиями.
06
Игры с нулевой суммой. Минимакс и максимин. Осторожные стратегии и гарантированный результат. Седловая точка. Цена игры. Антагонистические игры. Связь цены игры и существования седловой точки. Седловая точка и равновесие Нэша. Склонность к риску.
07
Динамические игры. Неубедительные угрозы. Рафинирование равновесия Нэша. Равновесия совершенные по подыграм. Метод обратной индукции в конечных играх с совершенной информацией. Дуополия Курно. Модель Штакельберга. Критика метода обратной индукции и равновесий совершенных по подыграм.
08
Многопериодные игры с наблюдаемыми действиями. Принцип однократного отклонения. Повторяющиеся игры. Повторяющаяся конечное и бесконечное число раз дилемма заключенных. Дележ пирога. Последовательный торг по Рубинштейну.
09
Игры с неполной информацией. Дуополия Курно с неполной информацией, задача простого торга, вложение в общественное благо. Равновесие Байеса-Нэша.
10
Эксперимент. Ultimatum Bargaining Game (Guth et al. 1982).
11
Введение в теорию аукционов.
12
Мэтчинг или теория паросочетаний (Matching theory) - бонусная лекция про женитьбу.
Обучение языку С++, часть 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.
Теория информации
В науке не существует единого подхода к определению понятия информации. В разных областях это понятие трактуется по-разному. Имеются информация по Хартли, энтропия Шеннона, Колмогоровская сложность, коммуникационная сложность. Каждое из этих понятий отражает некоторую грань интуитивного понятия информации. В курсе будет рассказано об этих понятиях и как они применяются в решении разных задач.
01
Информация по Хартли (двоичный логарифм количества возможных исходов).
02
Применения информационного подхода для решения задач о взвешиваниях (сортировки): нижняя оценка n log n для количества сравнений, необходимых для сортировки n чисел, оценка количества сравнений необходимых для нахождения фальшивой монетки (или радиоактивного элемента).
03
Применения информационного подхода в коммуникационной сложности: метод прямоугольников.
04
Распределения вероятностей на буквах данного алфавита (случайные величины со значениями в данном конечном множестве). Однозначные и префиксные бинарные коды букв данного алфавита. Средняя длина кода одной буквы.
05
Определение энтропии Шеннона и ее связь со средней длиной оптимального префиксного кода. Код Шеннона-Фано.
06
Неравенство Крафта-Макмиллана и нижняя оценка средней длины любого однозначного кода.
07
Реальные тексты, как марковские цепи небольшого порядка и верхняя оценка количества информации в них. Избыточность.
08
Пары совместно распределенных случайных величин с конечными множествами исходов. Неравенство для энтропии Шеннона пары.
09
Условная энтропия Шеннона и ее свойства.
10
Независимость и энтропия. Информация в одной случайной величине о другой. Коммутативность информации.
11
Игра по угадыванию исхода случайной величины. Стоимость инсайдерской информации и энтропия Шеннона. Использование экспертов и аггрегационный алгоритм Вовка.
12
Информационные неравенства. Базисные неравества и их следствия (шенноновские неравенства).
13
Близкие случайные величины и неравенство Фано.
14
Классификаторы и их информативность.
15
Теорема Шеннона о блочном кодировании (Shannon noiseless coding theorem).
16
Пропускная способность канала с шумом и теорема о блочном кодировании для каналов с шумом (без полного доказательтсва).
17
Передача информации при наличии исходной информации у потребителя. Теорема Вольфа-Слепяна (без полного доказательтсва).
18
Предсказание с использованием экспертов.
19
PAC learning: нахождение значения одной одной случайной величины по известному значению другой при неизвестном заранее совместном распределении вероятностей. Размерность Вапника-Червоненкиса.
20
Бустинг.
21
Сжатие информации и универсальные декомпрессоры. Количество информации в данном тексте (файле) по Колмогорову (колмогоровская сложность)
22
Свойства колмогоровской сложности: сложность не превосходит длины, сложность не увеличивается при алгоритмических преобразованиях, сложность невычислима, но перечислима сверху.
23
Количество слов малой сложности, несжимаемые слова.
24
Применения колмогоровской сложности для оценки времени работы алгоритмов (оценка количества шагов для копирования одноленточной машиной Тьюринга)
25
Условная колмогоровская сложность. Сложность пары слов и теорема Колмогорова-Левина.
26
Аналогия между колмогороской сложностью, шенноновской энтропией и информацией по Хартли.
27
Связь колмогоровской сложности и энтропии Шеннона: колмогоровская сложность слова, состоящего из последовательности независимых одинаково распределенных букв равна его энтропии Шеннона.
28
Подход Р. Соломонова к прогнозировании битов последовательности, случайной по данному неизвестному распределению вероятностей; универсальные предсказатели.
Введение в лингвистику
Курс «Введение в лингвистику» рассчитан на тех, кто не учился лингвистике, но хочет узнать о разнообразии языков мира, о том, как устроен человеческий язык, и о том, что в нем доступно для автоматической обработки, а что пока недоступно. В рамках курса предусматривается решение лингвистических задач разных типов (самодостаточных и не совсем).
01
Вводная часть: язык как система
02
Происхождение, функционирование и развитие естественных языков
03
Языки мира
04
Грамматика и лексика
05
Фонетика
06
Морфология
07
Синтаксис
08
Лексическая семантика
09
Лексикография
10
Корпусная лингвистика
11
Машинный перевод
Язык Python
Широкий и разносторонний. Не заточен ни под одну специализацию. Мы зовем лекторов разных специализаций, чтоб они рассказали про выбранную технологию через призму своего опыта.Практичный. Все что мы рассказываем полезно в дальнейшей работе. Мы не рассказываем о том, что знает полтора человека и усложняет жизнь. Мы рассказываем не только на тривиальных примерах, но и на примерах из рабочих процессов.Интенсивный. Подавляющая часть того, что будет рассказано на лекциях, будет покрыта в домашних задачках.Про обратную связь. Каждую лекцию мы будем выбирать из решенных вами задачек несколько штук и вместе разбирать ошибки. Также лекторы отвечают на вопросы в чате, если появляются трудности с пониманием материала.
01
Введение в курс. Простые типы. Управляющие конструкции.
02
Введение в инфраструктуру курса.
03
Структуры данных в Python.
04
Функции, ввод-вывод, строки, файлы.
05
Numpy, pandas.
06
Неймспейсы, замыкания, декораторы.
07
Введение в bytecode.
08
Классы.
09
Datetime.
10
Модули, пакеты, импорт, setup.py.
11
Исключения, контекстные менеджеры.
12
Итераторы. Генераторы.
13
Typing.
14
Визуализация в Python.
15
Работа с ветками в гите.
16
MapReduce и Streaming.
17
Тестирование. Логгирование. Сериализация/десериализация.
18
Subprocess, threading, multiprocessing. Web, Http, Api.
19
Корутины. async/await. asyncio. Протобуфы, флетбуфы, биндинги.
20
Коннекторы к базам данных. ORM. Как писать прикладное API.
21
Простые паттерны проектирования. Метаклассы, дескрипторы.
22
Ускорение вычислений. Утечки памяти. Биндинги для факторов машинного обучения. Обзор библиотеки Tensorflow.
Архитектура компьютера и операционные системы
При разработке высоконагруженных систем невозможно не обращать внимание на то, в каком окружении работает код. В компаниях типа Яндекса это как правило многочисленные сервера с несколькими многоядерными x86 процессорами под операционной системой Linux. Понимание того как работает процессор и операционная система позволяет понять некоторые особенности работы реального кода. В курсе будет разобрана работа ядра миниатюрной UNIX-подобной операционной системы — xv6. Начнём с того как работает процессор и языка ассемблера, далее разберём управление процессами, памятью, работу в мультипроцессорной среде.
01
Введение в курс, знакомство с IBM PC.
02
Процессы в UNIX. Системные вызовы.
03
Сегменты в x86. Изоляция.
04
Виртуальная память. Таблицы страниц.
05
Исключения и прерывания.
06
Использование памяти в многопроцессорной среде.
07
Примитивы синхронизации.
08
Планирование исполнения процессов.
09
Постоянная память: HDD и SSD.
10
Файловая система.
11
Виртуализация.
12
Масштабирование блокировок.
Второй семестр
Язык Python
Широкий и разносторонний. Не заточен ни под одну специализацию. Мы зовем лекторов разных специализаций, чтоб они рассказали про выбранную технологию через призму своего опыта.Практичный. Все что мы рассказываем полезно в дальнейшей работе. Мы не рассказываем о том, что знает полтора человека и усложняет жизнь. Мы рассказываем не только на тривиальных примерах, но и на примерах из рабочих процессов.Интенсивный. Подавляющая часть того, что будет рассказано на лекциях, будет покрыта в домашних задачках.Про обратную связь. Каждую лекцию мы будем выбирать из решенных вами задачек несколько штук и вместе разбирать ошибки. Также лекторы отвечают на вопросы в чате, если появляются трудности с пониманием материала.
Обучение языку С++, часть 2
Вторая часть курса по С++, в которой разбираются продвинутые темы и возможности языка.
01
Многопоточное программирование. Синхронизация потоков с использованием мьютексов и условных переменных.
02
Атомарные переменные. Модель памяти С++. Примеры лок-фри структур данных.
03
Продвинутые техники мета-программирования в С++. Метафункции, SFINAE, концепты.
04
Конкурентное программирование, взаимодействие с сетью.
05
Архитектура llvm. Работа с синтаксическим деревом разбора С++. Разработка инструментов для анализа С++ кода.
Дополнительные главы теории игр и дизайн механизмов
Данный курс является продолжением курса теории игр. Он будет посвящен дополнительным главам теории игр и теории аукционов. С помощью аукционов можно продать практически все что угодно. Начиная с цветов и заканчивая скелетом 50-тысячелетнего мамонта. В нашем курсе мы разберем самые известные виды аукционов, поговорим об эффективном vs оптимальном способе продажи товара. Рассмотрим обобщенный аукцион второй цены, с помощью которого ведущие поисковые системы, в том числе Яндекс, продают рекламу.
01
Игры с неполной информацией. Равновесие Байеса-Нэша.
02
Теория эволюции.
03
Секвенциальные равновесия.
04
Сигналинг.
05
Голосование.
06
Модель хотеллинга.
07
Coalition Formation in Nondemocracies.
08
Переговоры и формирование коалиций.
09
Введение в теорию аукционов. Аукцион одного товара. Аукцион второй цены, первой цены.
10
Принцип эквивалентности доходов. Основная теорема. Применение: необычные аукционы. Применение: неизвестное число конкурентов.
11
Ограниченный бюджет, отвращение к риску, асимметрия.
12
Дизайн механизмов. Механизмы (The Revelation Principle, IC, IR). Оптимальные механизмы. Эффективные механизмы.
13
Аукционы с зависимыми ценностями. Аукционы второй цены, первой цены, английский аукцион.
14
Эффективность.
15
Задача о коллективной ответственности и теория построения механизмов.
Сложность вычислений
Как правильно оценить время работы данного алгоритма? Как можно доказать, что для данной задачи не существует быстрых алгоритмов ее решения? Что такое "проблема перебора" (P=NP), что такое NP полнота и зачем её доказывают. Есть ли какая-то польза от труднорешаемых задач? Обо всем этом будет рассказано в курсе лекций.
01
Вычислительные модели: многоленточные машины Тьюринга, равнодоступные адресные машины. Оценка времени и памяти, необходимых для реализации основных арифметических алгоритмов.
02
Классы NC, задаваемые схемами логарифмической глубины.
03
Вероятностно проверяемые доказательства и PCP-теорема о существовании вероятностно проверяемых доказательств для любого языка из NP. Применение вероятностно проверяемых доказательств для доказательства трудности приблизительного вычисления оптимизационных задач.
04
Сложность в среднем. Теорема об NP-трудности в среднем задачи о замощении.
05
Необратимые и односторонние функции. Генераторы псевдослучайных чисел. Использование необратимых перестановок для построения генераторов псевдослучайных чисел.
Комбинаторная оптимизация
Цель данного курса – дать слушателям математическую базу и инструменты, для того, чтобы решать достаточно сложные комбинаторные задачи как в теории, так и на практике. В рамках курса вы научитесь формулировать задачи в виде целочисленных линейных программ, изучать свойства и структуру этих линейных программ и тем самым строить эффективные алгоритмы для решения комбинаторных задач. Кроме того, мы изучим разные практические подходы для решения NP-трудных задач на практике.
01
Линейные программы, полиэдры и их свойства. Целочисленные вершины и тотальная унимодулярность.
02
Построение двойственных программ, конусы, лемма Фаркаша.
03
Симплекс метод решения линейных программ, метод branch&cut для решения целочисленных линейных программ.
04
Техника Primal-Dual для решения комбинаторных задач, ей применения к разным задачам.
05
Задача о максимальном паросочетании в графе общего вида, алгоритм Эдмондса.
06
Задача о взвешенном максимальном паросочетании и её решения с помощью Primal-Dual алгоритма.
07
Метод эллипсоидов для решения линейных программ, применений идей метода для приближенного решения задач с помощью SDP-программ.
08
Свойства тотальной двойственной целочисленности, поиск максимальных цепей и антицепей в частично-упорядоченных множествах.
09
Матроиды и их свойства, жадный алгоритм оптимизации по матроиду.
10
Пересечение матроидов, алгоритм для оптимизации на пересечении двух матроидов.
11
Метод branch&bound для поиска с отсечениями. Локальный поиск и метод отжига для поиска оптимального решения на практике.
Theory and Practice of Concurrency
Курс посвящен конкурентным системам и задачам в самом широком понимании: от уровня конкуренции ядер процессора за запись в одну ячейку памяти до распределенных систем, которые хотят отказоустойчиво и согласованно реплицировать свое состояние между несколькими серверами.
Глубинное обучение
Курс посвящен "глубинному обучению", т.е. новому поколению методов, основанному на многослойных нейронных сетях и позволившему радикально улучшить работу систем распознавания образов и искусственного интеллекта. В начале курса мы рассмотрим основы глубинного обучения и посмотрим на алгоритмы стохастической оптимизации. Следующие пять лекции будут посвящены детальному рассмотрению сверточных нейросетей и их применениям в области компьютерного зрения (на данный момент сверточные нейросети в компьютерном зрении — самый бесспорный и громкий успех глубинного обучения) и синтеза изображений. Затем мы рассмотрим подходы глубинного обучения к моделированию и обработке последовательностей, прежде всего последовательностей слов и букв. Последняя лекция будет посвящена глубинному обучению с подкреплением.
01
Introduction, backpropagation algorithm
02
Optimization for deep learning
03
Convolutional networks (ConvNets), classifying images
04
ConvNet architectures, representations inside CNNs: visualizing networks/inceptionism, transfer learning
05
"Deep" computer vision beyond classification: Verification tasks, object detection architectures, semantic segmentation
06
Deep image processing and generation: generative ConvNets, perceptual loss functions
07
Latent image models, autoencoders, variational autoencoders, image analogies
08
Generative Adversarial Networks
09
Deep learning for NLP, convolutional networks for natural language, Word embeddings
10
Recurrent neural networks, sequence models
11
Sequence2sequence, architectures with attention and long-term memory
12
Deep architectures for 3D data and graphs
Основы статистики в машинном обучении
В типичных курсах математической статистики основное внимание уделено теоретическим основам классической статистики. Однако, на практике зачастую применяются современные методы статистики, например, бутстреп, непараметрическое оценивание, сглаживание на основе разложения по ортогональным базисам, методы снижения размерности и анализа чувствительности и т.д. Понимание теории, лежащей в основе этих методов, а также умение применить их на практике, абсолютно необходимо каждому, кто занимается математической статистикой и анализом данных. Именно поэтому и был разработан предлагаемый курс, отличающийся от стандартных курсов математической статистики
01
Проверка гипотез. Линейная регрессия.
02
Линейная регрессия.
03
Линейная регрессия. Непараметрическое оценивание.
04
Непараметрическое оценивание.
05
Нелинейные регрессионные модели. Байесовский подход к регрессии.
06
Байесовский подход к регрессии. Методы планирования экспериментов.
07
Методы снижения размерности. Оценка чувствительности модели. Примеры индустриальных приложений.
Язык Go
Цель курса — познакомить студентов с языком Го и научить применять язык на практике. На поверхности, Го похож на С. Он небольшой, похож по синтаксису и статически типизирован. Но на этом сходство заканчивается. Го заимствует хорошие идеи из других языков, но избегает фичей, которые усложняют язык.В курсе рассказано про сам язык. Будут подробно разобраны стандартная библиотека и стандартные инструменты (профайлер, race-детектор, пакетный менеджер и т.д.). Много внимания будет уделяться теме concurrency. Основной упор будет делаться на практическом применении и решении конкретных задач.
01
Введение. Философия дизайна. if, switch, for. Hello, world. Command line arguments. Word count. Animated gif. Fetching URL. Fetching URL concurrently. Web server. Tour of go. Local IDE setup. Submitting solutions to automated grading. gofmt. goimports. linting. Submitting PR's with bug fixes.
02
Базовые конструкции языка. names, declarations, variables, assignments. type declarations. packages and files. scope. Zero value. Выделение памяти. Стек vs куча. Basic data types. Constants. Composite data types. Arrays. Slices. Maps. Structs. JSON. text/template. string и []byte. Работа с unicode. Unicode replacement character. Функции. Функции с переменным числом аргументов. Анонимные функции. Ошибки.
03
Методы. Value receiver vs pointer receiver. Embedding. Method value. Encapsulation. Интерфейсы. Интерфейсы как контракты. io.Writer, io.Reader и их реализации. sort.Interface. error. http.Handler. Интерфейсы как перечисления. Type assertion. Type switch. The bigger the interface, the weaker the abstraction. Обработка ошибок. panic, defer, recover. errors.{Unwrap,Is,As}. fmt.Errorf. %w.
04
Горутины и каналы. clock server. echo server. Размер канала. Блокирующее и неблокирующее чтение. select statement. Channel axioms. time.After. time.NewTicker. Pipeline pattern. Cancellation. Parallel loop. sync.WaitGroup. Обработка ошибок в параллельном коде. errgroup.Group. Concurrent web crawler. Concurrent directory traversal.
05
Продвинутое тестирование. Subtests. testing.B. (T).Logf. (T).Skipf. (T).FailNow. testing.Short(), testing flags. Генерация моков. testify/{require,assert}. testify/suite. Test fixture. Интеграционные тесты. Goroutine leak detector. TestingMain. Coverage. Сравнение бенчмарков.
06
Concurrency with shared memory. sync.Mutex. sync.RWMutex. sync.Cond. atomic. sync.Once. Race detector. Async cache. Работа с базой данных. database/sql. sqlx.
07
Package context. Passing request-scoped data. http middleware. chi.Router. Request cancellation. Advanced concurrency patterns. Async cache. Graceful server shutdown. context.WithTimeout. Batching and cancellation.
08
Работа с базами данных. database/sql, sqlx, работа с базами данных, redis.
09
Reflection. reflect.Type and reflect.Value. struct tags. net/rpc. encoding/gob. sync.Map. reflect.DeepEqual.
10
Ввод-вывод. Пакет io, реализации Reader и Writer из стандартной библиотеки. Low-level programming. unsafe. Package binary. bytes.Buffer. cgo, syscall.
11
Архитектура GC. Write barrier. Stack growth. GC pause. GOGC. sync.Pool. Шедулер горутин. GOMACPROCS. Утечка тредов.
12
Go tooling. pprof. CPU and Memory profiling. Кросс-компиляция. GOOS, GOARCH. CGO_ENABLED=0. Build tags. go modules. godoc. x/analysis. Code generation.
13
Полезные библиотеки. CLI applications with cobra. Protobuf and GRPC. zap logging.
Третий семестр
Алгоритмы во внешней памяти
Курс знакомит студентов с основными принципами построения алгоритмов для работы с данными, которые не помещаются в оперативную память компьютера.
01
Алгоритмы во внешней памяти.
02
Cache-oblivious алгоритмы.
03
Алгоритмы потоковой обработки данных.
Компьютерное зрение
Курс посвящен методам и алгоритмам компьютерного зрения, т.е. извлечения информации из изображений и видео. Рассмотрим основы обработки изображений, классификацию изображений, поиск изображений по содержанию, распознавание лиц, сегментацию изображений. Затем поговорим про алгоритмы обработки и анализа видео. Последняя часть курса посвящена трёхмерной реконструкции. Для большинства задач будем обсуждать существующие нейросетевые модели. В курсе мы стараемся уделять внимание только наиболее современным методам, которые используются в настоящее время при решении практических и исследовательских задач. Курс в большей степени является практическим, а не теоретическим. Поэтому все лекции снабжены лабораторными и домашними работами, которые позволяют попробовать на практике большинство из рассматриваемых методов. Работы выполняются на языке Python, с использованием различных библиотек.
01
Цифровое изображение и тональная коррекция.
02
Основы обработки изображений.
03
Совмещение изображений.
04
Классификация изображений и поиск похожих.
05
Сверточные нейросети для классификации и поиска похожих изображений.
06
Детектирование объектов.
07
Семантическая сегментация.
08
Перенос стиля и синтез изображений.
09
Распознавание видео.
10
Разреженная трёхмерная реконструкция.
11
Плотная трёхмерная реконструкция.
12
Реконструкция по одному кадру и облакам точек, параметрические модели.
Natural Language Processing
Данный курс является первой частью годового курса NLP. Вторая часть — проектная.NLP (Natural Language Processing) — это подмножество более широкой области AI, которая пытается научить компьютер понимать и обрабатывать сырые данные на естественном языке. Большая часть доступной сегодня информации — это не структурированвые тексты. Нам, как людям, конечно не составляет труда их понять (хотя бы на родном языке), но мы не способны обработать такое количество данных, какое могла бы машина. Но как заставить машину понимать эти данные и, более того, извлекать из них какую-то информацию?В 2018 году на открытии ACL (одной из основных, если не самой главной NLP-конференции) в своей президентской речи Marti Hearst призналась, что больше не может давать студентам свое любимое упражнение. На примере HAL 9000 (один из примеров искусственного интеллекта в научной фантастике) она спрашивала студентов, что машина может делать как HAL, а что пока нет. Сейчас это уже не такое хорошее упражнение, так как почти все из этого сейчас под силу компьютеру. Поразительно, насколько быстро развивается область, и как многого мы достигли. И это было еще до тех существенных изменений, которые случились за последние 2 года!В курсе мы постараемся дать вам понять и почувствовать, что происходит в мире. Какие задачи решаются, как это происходит; как некоторые статистические подходы (которые полностью занимали собой предыдущие курсы) получают новую жизнь и новую интерпретацию в нейросетях, а какие постепенно отмирают. Мы покажем, что NLP это не набор пар (задача, решение), а общие идеи, которые проникают в разные задачи и отражают некоторую общую концепцию. Вы также узнаете, что происходит на практике, когда какие подходы более применимы.Это то, что мы делаем, то, что мы любим, и мы готовы поделиться этим с вами :)И да, все это вы пощупаете руками!
01
Word Embeddings.
02
Text classification.
03
Language models.
04
Seq2seq and Attention.
05
Transfer Learning and Pretrained Models.
06
Generative models and EM.
07
Machine Translation.
Введение в функциональный анализ
Классический, обычно читающийся на математических специальностях университетов, курс функционального анализа включает в себя общую теорию метрических и нормированных пространств, теорию операторов в нормированных пространствах. Будут затронуты аспекты спектральной теории операторов и преобразования Фурье. По возможности будет дано представление о приложениях функционального анализа к анализу данных, машинному обучению и т.д.
01
Метрические и нормированные пространства.
02
Свойства полных метрических пространств: теорема о сжимающих отображениях, теорема о вложенных шарах.
03
Гильбертовы пространства.
04
Введение в теорию меры и интеграл Лебега.
05
Пространства Соболева.
06
Базисы в нормированных пространствах. Ортонормированные базисы в гильбертовых пространствах.
07
Линейные ограниченные операторы в нормированных пространствах.
08
Линейные непрерывные функционалы. Сопряженные пространства.
09
Сопряженные операторы, самосопряженные и нормальные операторы. Ортогональные проекторы.
10
Теорема Хана Банаха для нормированных сепарабельных пространств.
11
Введение в спектральную теорию линейных ограниченных операторов в банаховом пространстве.
12
Компактные множества в метрических пространствах. Компактные операторы.
13
Интегральные операторы. Теорема Гильберта-Шмидта и теория Фредгольма.
14
Преобразование Фурье в L1(R) и в L2(R).
Байесовские методы в машинном обучении
Курс посвящен байесовским методам решения различных задач машинного обучения (классификации, восстановления регрессии, уменьшения размерности, разделения смесей, тематического моделирования и др.), которые в настоящее время активно развиваются в мире. Большинство современных научных публикаций по машинному обучению используют вероятностное моделирование, опирающееся на байесовский подход к теории вероятностей. Последний позволяет эффективно учитывать различные предпочтения пользователя при построении решающих правил прогноза. Кроме того, он позволяет решать задачи выбора структурных параметров модели. В частности, здесь удается решать без комбинаторного перебора задачи селекции признаков, выбора числа кластеров в данных, размерности редуцированного пространства при уменьшении размерности, значений коэффициентов регуляризации и пр. В байесовском подходе вероятность интерпретируется как мера незнания, а не как объективная случайность. Простые правила оперирования с вероятностью, такие как формула полной вероятности и формула Байеса, позволяют проводить рассуждения в условиях неопределенности. В этом смысле байесовский подход к теории вероятностей можно рассматривать как обобщение классической булевой логики.
01
Байесовский подход к теории вероятностей, примеры байесовских рассуждений.
02
Аналитический байесовский вывод, сопряжённые распределения, экспоненциальный класс распределений, примеры.
03
Задача выбора модели по Байесу, принцип наибольшей обоснованности, примеры выбора вероятностной модели.
04
Метод релевантных векторов для задачи регрессии, автоматическое определение значимости. Матричные вычисления.
05
Метод релевантных векторов для задачи классификации, приближение Лапласа.
06
Обучение при скрытых переменных, ЕМ-алгоритм в общем виде, байесовская модель метода главных компонент.
07
Вариационный подход для приближённого байесовского вывода.
08
Методы Монте-Карло с марковскими цепями (MCMC).
09
Гибридный метод Монте-Карло с марковскими цепями и его масштабируемые обобщения.
10
Гауссовские процессы для регрессии и классификации.
11
Процессы Дирихле и непараметрические байесовские модели.
12
Модель LDA для тематического моделирования.
Распределённые системы
Курс посвящен архитектуре современных инфраструктурных распределенных систем. Мы рассмотрим общие принципы и популярные распределенные алгоритмы, лежащие в основе таких систем, и обсудим, как они применяются в реальных промышленных продуктах. Поговорим о сложностях при разработке таких систем, уделив особое внимание вопросам консистентности, масштабируемости и отказоустойчивости.
01
Время в распределенных системах. Отношение happens-before. Lamport-clock, vector clock.
02
Модели консистентности, линеаризуемость. CAP.
03
Отказоустойчивая разделяемая память в модели передачи сообщений.
04
Задача консенсуса. Atomic broadcast. Replicated state machine. Алгоритм Raft.
05
Шардирование. DHT.
06
Распределенные транзакции.
07
Peer-to-peer системы.
08
Распределенная обработка данных, Map-Reduce.
Сбор и обработка данных с помощью краудсорсинга
В настоящее время практически любая содержательная задача по анализу данных или ML требует сбора размеченных данных, которые, как правило, нужны в большом количестве и требуют привлечения ручного труда. Работа с краудом является одним из востребованных и ключевых навыков, которыми необходимо уметь пользоваться специалистам по анализу данных, если они хотят расти и решать все более крупные и амбициозные задачи.Краудсорсинг применяется не только на стадии анализа и при построении ML-моделей, но также в замкнутых производственных и продуктовых процессах (парадигма human-in-the-loop). Наиболее яркими продуктами Яндекса, в боевых процессах которых используется "крауд'', являются: голосовой помощник Алиса, Поиск, Яндекс.Переводчик, Яндекс.Драйв, Яндекс.Справочник, Яндекс.Картинки и др.Специалисты по краудсорсингу уже остро востребованы как на российском, так и на зарубежном рынке. Из нашего опыты выпускники нашего курса востребованы как в Яндексе, так и в других российских компаниях, таких как Ozon, Авито, Сбер. На международном рынке Google, Facebook, Huawei, Tesla, Amazon, Netflix, Microsoft тоже постоянно решают подобные задачи, требующие знаний методов краудсорсинга.Наши преподаватели — специалисты из разных сервисов Яндекса, которые регулярно используют краудсорсинг для решения таких задач как определение релевантности поисковой выдачи, тестирования и распознавание речи или объектов на изображениях.
01
Введение и общая концепция краудсорсинга 2. Декомпозиция задачи.
02
Основные компоненты краудосринга: инструкция и интерфейс заданий.
03
Основные компоненты краудосринга: Контроль качества.
04
Классификация.
05
Методы агрегации результатов.
06
Динамическое перекрытие и ценообразование.
07
Краудсорсинг для компьютерного зрения: Беспилотники и e-commerce.
08
Генерация контента.
09
Попарное сравнение SbS.
10
Пешеходные задания. Гео-аналитика.
11
Аннотирование звучащей речи для Голосовых Технологий. Агрегация ответов в аннотировании аудиозаписей.
12
Тестирование.
Стойкость криптографических систем
Данный курс посвящен базовым криптографическим алгоритмам и схемам, которые лежат в основе всех основных прикладных криптопротоколов и систем. Рассматриваются блочные шифры, хэш-функции, режимы шифрования, схемы выработки кодов аутентификации сообщений и другие симметричные криптографические алгоритмы. Обсуждаются основные принципы их строения и те задачи, которые могут быть решены с их помощью. Особенностью курса является то, что изложение ведется не с точки зрения реализации и перечисления как можно больше количества непонятных аббревиатур (SHA1, MD5, AES и т.п.), а с точки зрения фундаментальных криптографических идей, лежащих в основе, как самих схем, так и требований, которые к ним предъявляются. Освещаются основные идеи, лежащие в основе современного криптографического анализа, и принципы построения надежной криптографической инфраструктуры.
01
Основные подходы и принципы современной криптографии Модель противника, формализация понятия стойкости, задача оценки стойкости и сопутствующие проблемы, разделение на примитивы и протоколы, этапы жизни криптографической системы.
02
Блочные шифры Основные параметры блочных шифров. Принципы построения. Сеть Фейстеля и LSX-схема. Модели PRP-CPA и PRP-CCA. Стойкость сетей Фейстеля с 1, 2 и 3-мя раундами. Общие подходы к анализу блочных шифров, принципы линейного криптоанализа. Модель PRF, PRP-PRF-Лемма.
03
Конфиденциальность Бытовые определения конфиденциальности, подходы к формализации (теоретико-информационная модель противника, модели KR, PR, LOR, ROR, IND, CPA, CCA), симметричная система шифрования, применение теоретико-сложностных сведений для определения соотношения между моделями.
04
Режимы шифрования Основные режимы шифрования: ECB, CBC, CFB, OFB, CTR. Основные эксплуатационные свойства. Стойкость CTR в LOR-CPA, нестойкость ECB в LOR-CPA. Нестойкость базовых режимов в CCA-моделях.
05
Целостность Определение понятия целостности. Подходы к формализации (модель UF-CMA, модели на основе задачи различения, модель PRF). Коды аутентификации сообщений и функции выработки имитовставки. Конструкции на основе блочных шифров: CBC-MAC, XCBC, TMAC, OMAC. Уязвимые режимы.
06
Хэш-функции Определение, основные свойства, подходы к построению, формализация и сопутствующие проблемы. Примеры применения хэш-функций: хэширование паролей, извлечение энтропии. Построение коллизий и прообраза из множества малой мощности.
07
Схемы HMAC, KDF, PRF, DRNG Схема HMAC, основные шаги получения оценки стойкости. Диверсификация ключа и принцип разделения ключей, схемы KDF и PRF. Псевдослучайный генератор, схемы DRNG.
08
Нагрузка на ключ Проблема нагрузки на ключ. Основные методы уменьшения нагрузки на ключ: внешнее и внутреннее преобразования ключа. Схемы parallel и serial re-keying, основные свойства. Ключевое дерево. Внутренняя смена ключа и режим CTR-ACPKM.
09
Шифрование с имитозащитой Формулировка задачи. Общие конструкции (EtA, AtE, A&E) и их свойства. Примеры уязвимых режимов обеспечения конфиденциальности и целостности с помощью одного ключа. AEAD-режимы шифрования: GCM, MGM.
10
Защищенный канал связи Понятие защищенного канала связи: типы каналов, основные свойства (целостность и конфиденциальность потока данных). Примеры уязвимых протоколов. Протокол Record TLS.
Четвёртый семестр
Глубинное обучение
Курс посвящен "глубинному обучению", т.е. новому поколению методов, основанному на многослойных нейронных сетях и позволившему радикально улучшить работу систем распознавания образов и искусственного интеллекта. В начале курса мы рассмотрим основы глубинного обучения и посмотрим на алгоритмы стохастической оптимизации. Следующие пять лекции будут посвящены детальному рассмотрению сверточных нейросетей и их применениям в области компьютерного зрения (на данный момент сверточные нейросети в компьютерном зрении -- самый бесспорный и громкий успех глубинного обучения) и синтеза изображений. Затем мы рассмотрим подходы глубинного обучения к моделированию и обработке последовательностей, прежде всего последовательностей слов и букв. Последняя лекция будет посвящена глубинному обучению с подкреплением.
01
Introduction, backpropagation algorithm.
02
Optimization for deep learning.
03
Convolutional networks (ConvNets), classifying images.
04
ConvNet architectures, representations inside CNNs: visualizing networks/inceptionism, transfer learning.
05
"Deep" computer vision beyond classification: Verification tasks, object detection architectures, semantic segmentation.
06
Deep image processing and generation: generative ConvNets, perceptual loss functions.
07
Latent image models, autoencoders, variational autoencoders, image analogies.
08
Generative Adversarial Networks.
09
Deep learning for NLP, convolutional networks for natural language, Word embeddings.
10
Recurrent neural networks, sequence models.
11
Sequence2sequence, architectures with attention and long-term memory.
12
Deep architectures for 3D data and graphs.
Обучение с подкреплением
Обучение с подкреплением — это машинное обучение методом проб и ошибок. Если приглядеться к нашей с вами жизни, можно заметить, что мы (люди) занимаемся не отображением ""X -> y"" для минимиации эмпирического риска: мы существуем в мире, на который можно влиять, и который в свою очередь влияет на нас. А хотим мы в этом мире добиваться каких-то результатов: дойти до “из точки A точки B” и не упасть, заработать побольше денег, перевести предложение, привлечь и удержать пользователя — кому что ближе. Задачи эти объединяет то, что в них вам придётся двигаться методом проб, ошибок, шишек и новых проб — у вас просто нет всеобъемлющей выборки, в которой есть правильная стратегия поведения во всех ситуациях. А ещё эти задачи объединяет то, что их можно решать автоматически. Да-да, творческий поиск решения задачи, выбор дизайна страницы или повышение мастерства в любимой игрушке — машины это уже умеют. Курс очень хочет дать своим слушателям понимание и практические навыки использования таких “машин”, именуемых “Алгоритмами обучения с подкреплением” или “Reinforcement learning”. В меню — теоретическая база, практические задания, инженерные хаки и неординарные предметные области. Даже машинный перевод завезли. А ещё этот курс немного связан с методами глубокого обучения — их тут около половины. Так уж вышло, что многие задачи Reinforcement Learning сейчас лучше всего решаются с применением нейронок. Если Вы их не знаете — не бойтесь, научим.
Нейробайесовские методы
Курс посвящен применению байесовских методов в глубинном обучении. На лекциях будет рассказано о применении вероятностного моделирования для построения порождающих моделей данных, использованию состязающихся сетей для приближенного вывода, моделированию неопределенности в параметрах нейронной сети и о некоторых открытых проблемах глубинного обучения.
01
Стохастический вариационный вывод.
02
Дважды стохастический вариационный вывод.
03
Вариационный автокодировщик, нормализующие потоки для вариационного вывода.
04
Методы снижения дисперсии в моделях со скрытыми переменными.
05
Оценка отношения плотностей распределений, применение на примере \alpha-GAN.
06
Байесовские нейронные сети.
07
айесовское сжатие нейронных сетей.
08
Полунеявный вариационный вывод.
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
Нелинейные регрессионные модели. Байесовский подход к регрессии.
06
Байесовский подход к регрессии. Методы планирования экспериментов.
07
Методы снижения размерности. Оценка чувствительности модели. Примеры индустриальных приложений.
Базы данных
Современные web-приложения строятся, как правило, поверх каких-нибудь СУБД. СУБД позволяют разработчикам не думать о том, как хранить данные на диске и как их искать, как обеспечить конкурентный доступ сразу многим пользователям, как оптимальнее воспользоваться ресурсами железа. Все эти сложности скрыты за простым интерфейсом языка запросов, как правило какого-нибудь диалекта SQL. Тем не менее при построении высоконагруженных систем становится необходимым понимать, как работает СУБД и почему выполнение запросов занимает именно такое время. К тому же есть люди, которые пишут эти самые СУБД. Мы будем разбирать, как устроены СУБД изнутри: как хранить данные, как выполнять запросы, как реализовать транзакции. В Яндексе есть несколько команд, занимающихся разработкой СУБД или очень на них похожего: Postgres, ClickHouse, YDB и YT. В первую очередь курс рассчитан на тех, кто хочет присоединиться к этим командам, но также будет полезен и тем, кто собирается в своей работе использовать хранилища данных с доступом в реальном времени.Предполагается, что слушатели уже знакомы с понятиями алгоритмов во внешней памяти, многопоточным программированием, распределенными системами и умеют программировать на C++.
01
Реляционная алгебра, язык SQL.
02
Организация классической реляционной субд: страницы, пул страниц, блокировки.
03
Парсинг и выполнение SQL запросов.
04
Индексы, вторичные индексы.
05
Джойны, сложность джойнов с точки зрения I/O complexity.
06
Поддержка транзакций, типы изоляции, MVCC.
07
Восстановление после аварии.
08
Хранение данных методом Log-Structured Merge Tree.
09
Поколоночные базы данных.
10
Базы данных, располагающиеся в основной памяти.
11
Распределенные базы данных.
Компьютерные сети
Цель курса — показать общую картину современных сетевых технологий: какие проблемы мы пытаемся решить, основные идеи и подходы, почему протоколы и протокольные стеки устроены так, как устроены, компоненты и типовые шаблоны дизайна, компромиссы, предположения и что может быть улучшено или оптимизировано. Также будет рассмотрено развитие сетевых технологий в исторической перспективе: почему и в каком контексте принимались те или иные технические решения, какие идеи выдержали испытание временем и по большей части работают, а какие, хоть и казались интересными, в итоге оказались тупиковыми, какие предположения были разумными в свое время, но больше не верны. Основной фокус сделан на понимании компонентов, движущихся частей и их взаимодействия в достаточно больших и сложных сетях и способности распознать ключевые технические решения, ограничения и компромиссы, а не на умении конфигурировать сетевые устройства.
01
Введение в сетевые технологии. История возникновения сетей, сетевые протоколы, организация сетевого взаимодействия в одноранговой сети и объединение одноранговых сетей друг с другом.
02
Transport. Сетевая модель OSI/ISO. TCP, установление сетевого соединения, сравнение TCP и UDP. Анализ tcpdump – графики bytes in fly, retransmits. Методы управления потоком данных в TCP сессии. Разные типы TCP сессий и управление полосой передаваемых данных в пакетных сетях.
03
Routing. Понятие маршрутизации в сетях. Статическая и динамическая маршрутизация. Основы динамической маршрутизации. Протокол динамической маршрутизации — OSPF. Дистанционно-векторные протоколы маршрутизации. Обзор протокола маршрутизации BGP — типы сообщений, атрибуты BGP, выбор оптимального маршрута в BGP.
04
Как работает Интернет: BGP и DNS. Маршрутизация в сети Интернет. Обзор протокола DNS.
05
Сети в больших дата-центрах. Особенности архитектуры сетей дата-центров. Требования к сетям дата-центров. Архитектура CLOS для сетей дата-центров.
06
Задержки в сетях. Особенности построения больших магистральных сетей. Причины возникновения задержки при передаче данных по магистральным сетям.
07
Масштабирование и доступность сервисов интернета. Технологии балансировки нагрузки и сервисная архитектура.
08
MPLS и SR, Network Programmability. Технологии MPLS и Segment Routing для построения магистральных сетей. Назначение технологии MPLS, протоколы используемые для обмена метками.
09
Принципы работы сетевых устройств. Архитектура маршрутизатора, особенности обработки сетевого трафика внутри сетевых устройств.
10
Облака. Основы программно-определяемых сетей — протоколы, используемые для построения программно определяемых сетей. Интеграция платформ виртуализации и сетевой инфраструктуры.
Язык Go
Цель курса — познакомить студентов с языком Го и научить применять язык на практике. На поверхности, Го похож на С. Он небольшой, похож по синтаксису и статически типизирован. Но на этом сходство заканчивается. Го заимствует хорошие идеи из других языков, но избегает фичей, которые усложняют язык.В курсе рассказано про сам язык. Будут подробно разобраны стандартная библиотека и стандартные инструменты (профайлер, race-детектор, пакетный менеджер и т.д.). Много внимания будет уделяться теме concurrency. Основной упор будет делаться на практическом применении и решении конкретных задач."
01
Введение. Философия дизайна. if, switch, for. Hello, world. Command line arguments. Word count. Animated gif. Fetching URL. Fetching URL concurrently. Web server. Tour of go. Local IDE setup. Submitting solutions to automated grading. gofmt. goimports. linting. Submitting PR's with bug fixes.
02
Базовые конструкции языка. names, declarations, variables, assignments. type declarations. packages and files. scope. Zero value. Выделение памяти. Стек vs куча. Basic data types. Constants. Composite data types. Arrays. Slices. Maps. Structs. JSON. text/template. string и []byte. Работа с unicode. Unicode replacement character. Функции. Функции с переменным числом аргументов. Анонимные функции. Ошибки.
03
Методы. Value receiver vs pointer receiver. Embedding. Method value. Encapsulation. Интерфейсы. Интерфейсы как контракты. io.Writer, io.Reader и их реализации. sort.Interface. error. http.Handler. Интерфейсы как перечисления. Type assertion. Type switch. The bigger the interface, the weaker the abstraction. Обработка ошибок. panic, defer, recover. errors.{Unwrap,Is,As}. fmt.Errorf. %w.
04
Горутины и каналы. clock server. echo server. Размер канала. Блокирующее и неблокирующее чтение. select statement. Channel axioms. time.After. time.NewTicker. Pipeline pattern. Cancellation. Parallel loop. sync.WaitGroup. Обработка ошибок в параллельном коде. errgroup.Group. Concurrent web crawler. Concurrent directory traversal.
05
Продвинутое тестирование. Subtests. testing.B. (T).Logf. (T).Skipf. (T).FailNow. testing.Short(), testing flags. Генерация моков. testify/{require,assert}. testify/suite. Test fixture. Интеграционные тесты. Goroutine leak detector. TestingMain. Coverage. Сравнение бенчмарков.
06
Concurrency with shared memory. sync.Mutex. sync.RWMutex. sync.Cond. atomic. sync.Once. Race detector. Async cache. Работа с базой данных. database/sql. sqlx.
07
Package context. Passing request-scoped data. http middleware. chi.Router. Request cancellation. Advanced concurrency patterns. Async cache. Graceful server shutdown. context.WithTimeout. Batching and cancellation.
08
Работа с базами данных. database/sql, sqlx, работа с базами данных, redis.
09
Reflection. reflect.Type and reflect.Value. struct tags. net/rpc. encoding/gob. sync.Map. reflect.DeepEqual.
10
Ввод-вывод. Пакет io, реализации Reader и Writer из стандартной библиотеки. Low-level programming. unsafe. Package binary. bytes.Buffer. cgo, syscall.
11
Архитектура GC. Write barrier. Stack growth. GC pause. GOGC. sync.Pool. Шедулер горутин. GOMACPROCS. Утечка тредов.
12
Go tooling. pprof. CPU and Memory profiling. Кросс-компиляция. GOOS, GOARCH. CGO_ENABLED=0. Build tags. go modules. godoc. x/analysis. Code generation.
13
Полезные библиотеки. CLI applications with cobra. Protobuf and GRPC. zap logging.
Криптографические протоколы
Данный курс является продолжением курса первого семестра. Эта часть курса посвящена асимметричной криптографии и криптографическим протоколам. Будут рассматриваться схемы шифрования с открытым ключом, схемы электронной подписи, протоколы согласования ключей. Большое внимание будет уделено протоколам аутентифицированной выработки общего ключа и защиты канала связи. В частности, будет рассмотрен базовый криптографический протокол современного интернета — TLS. Также будут рассмотрены проблемы доверия к открытым ключам, инфраструктура открытых ключей PKI и методы защищенного хранения закрытых ключей. Заключительные лекции курса обычно посвящены новым направлениям в криптографии, таким как, например, квантовая криптография и блокчейн.
01
Базовые идеи асимметричной криптографии
02
Стойкость основных схем асимметричной криптографии. Формальное определение стойкости: модели UF-CMA, IND-CPA, DLP, CDH, DDH. Соотношения между ними. Стойкость схемы шифрования Эль-Гамаля. Нестойкость схемы подписи RSA без использования хэш-функции.
03
Дополнительные сведения об асимметричной криптографии. Подпись Лэмпарта, схема Меркля. Атака DSKS.
04
Алгебраические и теоретико-числовые основы асимметричной криптографии.
05
Эллиптические кривые.
06
Теорема Хассе. Сложение точек эллиптической кривой. Группа точек эллиптической кривой. Схема подписи ГОСТ Р 34.10-2012.
07
Дискретное логарифмирование. Алгоритмы дискретного логарифмирования (Ро-метод Полларда, метод согласования, метод Полига-Хеллмана, метод исчисления индексов).
08
Технология PKI.
09
Протокол TLS.
10
Основы построения AKE-протоколов.
11
Безопасное хранение ключей.
12
Основные концепции технологии блокчейн.