Учебник Методы оптимизации для начинающих
Курс уровня Nocedal–Wright и Boyd, но объяснённый интуитивно и с исполнимым кодом. Оптимизация — это математика поиска лучшего: лучшего веса нейросети, лучшего портфеля, лучшего маршрута, лучшего расписания. Мы начинаем с постановки задачи $\min_x f(x)$, допустимых множеств и понятия минимума, разбираем матанализ оптимизации (градиент $\nabla f$, гессиан $\nabla^2 f$, условия оптимальности), одномерный поиск (золотое сечение), затем ядро курса — градиентный спуск $x_{k+1}=x_k-\alpha\nabla f(x_k)$ и его ускорения (Momentum, Нестеров, Adam), метод Ньютона и квазиньютоновские идеи, теорию выпуклости, линейное программирование и симплекс-метод, задачи с ограничениями (множители Лагранжа, ККТ, штрафные функции), метаэвристики (имитация отжига, генетические алгоритмы), дискретную оптимизацию (рюкзак, коммивояжёр), стохастический спуск (SGD) и практику выбора метода. Почти каждый метод реализован на чистом stdlib Python и печатает сходимость прямо в браузере. Курс опирается на «Математику для ML», «Численные методы», «Машинное обучение» и «Обучение с подкреплением».
Курс «Методы оптимизации» состоит из 11 разделов и 31 урока: Что такое оптимизация, Матанализ для оптимизации, Одномерная оптимизация, Градиентный спуск, Ускорения градиентного спуска, Метод Ньютона и второй порядок, Линейное программирование, Оптимизация с ограничениями, Метаэвристики, Дискретная и комбинаторная оптимизация и Стохастика, практика и инструменты. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Что такое оптимизация
- Оптимизация вокруг нас
Что такое оптимизация на интуитивном уровне: поиск наилучшего решения среди допустимых, примеры из ML, экономики, логистики.
- Целевая функция и ландшафт
Геометрическая интуиция оптимизации: целевая функция как ландшафт, линии уровня, долины и хребты, минимум как дно впадины.
- Зоопарк задач оптимизации
Классификация задач оптимизации: непрерывные и дискретные, выпуклые и невыпуклые, с ограничениями и без, гладкие и негладкие.
- Оптимизация вокруг нас
2 Матанализ для оптимизации
- Градиент — направление наискорейшего роста
Градиент функции многих переменных: что это, почему он указывает в сторону роста и как посчитать его численно на чистом Python.
- Гессиан и кривизна
Матрица вторых производных (гессиан): что она говорит о кривизне функции, выпуклости и почему важна для метода Ньютона.
- Условия оптимальности
Необходимое условие минимума $\nabla f=0$ и достаточное условие через гессиан: как математически распознать оптимум.
- Выпуклость с точки зрения анализа
Определение выпуклой функции через хорду и через гессиан, почему выпуклость гарантирует, что локальный минимум глобален.
- Градиент — направление наискорейшего роста
3 Одномерная оптимизация
- Зачем уметь искать минимум по одной переменной
Одномерная оптимизация как кирпичик многомерных методов: линейный поиск длины шага, унимодальность, интервал неопределённости.
- Метод золотого сечения
Метод золотого сечения для поиска минимума унимодальной функции: идея сужения интервала, коэффициент $\varphi$ и исполнимая реализация.
- Зачем уметь искать минимум по одной переменной
4 Градиентный спуск
- Идея и формула спуска
Градиентный спуск: почему шаг против градиента уменьшает функцию, формула $x_{k+1}=x_k-\alpha\nabla f(x_k)$ и первая реализация.
- Learning rate: между медленно и расходится
Как длина шага влияет на градиентный спуск: малый шаг тормозит, большой расходится; критический шаг и идея адаптации.
- Овраги и осцилляция
Почему градиентный спуск медленно ползёт в вытянутых оврагах, что такое плохая обусловленность и как зигзаг убивает скорость.
- Идея и формула спуска
5 Ускорения градиентного спуска
- Momentum — инерция спуска
Метод момента: накопление скорости как у шарика, скатывающегося по склону; формула, гашение осцилляций и реализация.
- Ускорение Нестерова и Adam
Метод Нестерова (взгляд вперёд) и Adam (адаптивный шаг на координату): два главных ускорителя современного обучения, с реализацией Adam.
- Momentum — инерция спуска
6 Метод Ньютона и второй порядок
- Ньютон: учитываем кривизну
Метод Ньютона для минимизации: квадратичная модель функции, формула шага через обратный гессиан и квадратичная сходимость с реализацией.
- Квазиньютоновские методы и BFGS
Квазиньютоновские методы строят приближение обратного гессиана по градиентам: идея BFGS, L-BFGS для больших задач, баланс цены и скорости.
- Ньютон: учитываем кривизну
7 Линейное программирование
- Геометрия линейных задач
Линейное программирование: целевая и ограничения линейны, допустимое множество — многогранник, оптимум всегда в вершине.
- Симплекс-метод
Симплекс-метод: движение по рёбрам многогранника от вершины к вершине с улучшением цели, симплекс-таблица и реализация на малой задаче.
- Двойственность и интерпретация
Двойственность в линейном программировании: прямая и двойственная задача, теневые цены ресурсов и слабая/сильная двойственность.
- Геометрия линейных задач
8 Оптимизация с ограничениями
- Множители Лагранжа
Метод множителей Лагранжа для задач с равенствами: условие касания $\nabla f=\lambda\nabla g$, геометрическая интуиция и пример.
- Условия Каруша–Куна–Таккера
Условия ККТ обобщают Лагранжа на неравенства: стационарность, допустимость, неотрицательность множителей и дополняющая нежёсткость.
- Штрафные функции
Метод штрафных функций: превращаем задачу с ограничениями в безусловную, добавляя штраф за нарушение, с реализацией и анализом.
- Множители Лагранжа
9 Метаэвристики
- Имитация отжига
Имитация отжига (simulated annealing): температура, вероятностный приём ухудшающих шагов и побег из локальных минимумов на примере коммивояжёра.
- Генетические алгоритмы
Генетический алгоритм: популяция решений, отбор, скрещивание и мутация по аналогии с эволюцией, с исполнимой реализацией.
- Роевые методы и обзор PSO
Метод роя частиц (PSO): частицы летают в пространстве решений, ориентируясь на свой и общий лучший опыт; место PSO среди метаэвристик.
- Имитация отжига
10 Дискретная и комбинаторная оптимизация
- Задача о рюкзаке и динамическое программирование
Задача о рюкзаке: выбрать предметы максимальной ценности при ограничении веса; точное решение динамическим программированием с реализацией.
- Коммивояжёр и NP-трудность
Задача коммивояжёра, понятие NP-трудности, почему точные методы экспоненциальны и когда переходить к эвристикам и приближениям.
- Задача о рюкзаке и динамическое программирование
11 Стохастика, практика и инструменты
- Стохастический градиентный спуск
SGD и мини-батчи: почему в машинном обучении считают градиент по части данных, шум как помощник и реализация на линейной регрессии.
- Многокритериальная оптимизация и Парето
Многокритериальная оптимизация: конфликтующие цели, доминирование по Парето, Парето-фронт и способы свести задачу к однокритериальной.
- Как выбрать метод оптимизации
Практическое руководство по выбору метода оптимизации под задачу: дерево решений по выпуклости, размерности, ограничениям и наличию градиента.
- Инструменты и применения
Обзор солверов оптимизации: scipy.optimize, cvxpy, OR-Tools, PuLP — что и когда использовать, и где оптимизация работает в реальном мире.
- Стохастический градиентный спуск