Глава 218: Многоцелевой поиск нейронных архитектур (NAS)
1. Введение
Поиск нейронных архитектур (Neural Architecture Search, NAS) произвёл революцию в проектировании моделей глубокого обучения, автоматизировав традиционно ручной процесс разработки архитектур. В ранних формулировках NAS поиск управлялся одной целевой функцией — как правило, точностью предсказаний на валидационном наборе. Однако реальное развёртывание моделей машинного обучения в торговых системах требует одновременной оптимизации по множеству конкурирующих целей.
Рассмотрим задачи, стоящие перед квантовой торговой фирмой при развёртывании модели. Модель должна быть достаточно точной для генерации прибыльных сигналов, достаточно быстрой для исполнения в рамках жёстких ограничений по задержке, достаточно компактной для размещения в памяти колокированных серверов, достаточно устойчивой к смене рыночных режимов и достаточно интерпретируемой для понимания риск-менеджерами. Оптимизация по любой одной из этих целей при игнорировании остальных приводит к непрактичным решениям: высокоточная модель, которая тратит секунды на предсказание, бесполезна для высокочастотной торговли, а крошечная быстрая модель с случайными сигналами столь же бесполезна.
Многоцелевой NAS (MO-NAS) решает это фундаментальное противоречие, осуществляя поиск архитектур, представляющих наилучшие компромиссы между всеми целями одновременно. Вместо единственной «лучшей» архитектуры MO-NAS выдаёт множество Парето-оптимальных архитектур — фронт решений, в котором ни одна архитектура не может быть улучшена по одной цели без ухудшения по другой. Это даёт практикам возможность выбрать архитектуру, наиболее соответствующую их конкретным ограничениям развёртывания.
В этой главе мы разрабатываем полноценную систему многоцелевого NAS на Rust, спроектированную специально для торговых приложений. Мы интегрируем рыночные данные в реальном времени с биржи Bybit и демонстрируем поиск архитектур, балансирующих точность предсказаний, скорость вывода и компактность модели.
2. Математические основы
2.1 Парето-оптимальность и доминирование
Основой многоцелевой оптимизации является концепция Парето-доминирования. Для двух векторов решений x и y в пространстве целей мы говорим, что x доминирует y (записывается x ≺ y) тогда и только тогда, когда:
- x не хуже y по всем целям: f_i(x) ≤ f_i(y) для всех i ∈ {1, …, M}
- x строго лучше y хотя бы по одной цели: ∃ j такое, что f_j(x) < f_j(y)
Здесь предполагается минимизация; для целей, которые нужно максимизировать (точность, коэффициент Шарпа), мы меняем их знак.
Решение x* называется Парето-оптимальным, если никакое другое допустимое решение не доминирует его. Множество всех Парето-оптимальных решений — это множество Парето, а его образ в пространстве целей — фронт Парето. Фронт Парето представляет наилучшие достижимые компромиссы — перемещение вдоль фронта всегда включает жертву производительности по одной цели ради улучшения другой.
2.2 Алгоритм NSGA-II
Генетический алгоритм недоминируемой сортировки II (NSGA-II), предложенный Deb и др. (2002), остаётся одним из наиболее широко используемых многоцелевых эволюционных алгоритмов. Его ключевые нововведения:
Недоминируемая сортировка: Популяция разбивается на последовательные фронты. Первый фронт F₁ содержит все недоминируемые решения. Второй фронт F₂ содержит решения, доминируемые только членами F₁, и так далее.
Алгоритм работает следующим образом:
- Инициализировать популяцию P₀ размера N
- Для каждого поколения t: a. Создать потомственную популяцию Q_t с помощью селекции, скрещивания и мутации b. Объединить R_t = P_t ∪ Q_t c. Выполнить недоминируемую сортировку R_t d. Заполнить следующую популяцию P_{t+1}, включая полные фронты по порядку e. Если фронт превышает N, использовать расстояние скученности для выбора лучших членов
Расстояние скученности (Crowding Distance): Когда фронт должен быть частично включён, расстояние скученности определяет, какие решения сохранить. Для каждой цели решения сортируются, и граничные решения получают бесконечное расстояние. Внутренние решения получают расстояние, пропорциональное промежутку между их соседями:
d_i = Σ_m (f_m(i+1) - f_m(i-1)) / (f_m_max - f_m_min)Это сохраняет разнообразие, предпочитая решения в менее заполненных областях фронта.
2.3 NSGA-III и селекция на основе опорных точек
NSGA-III расширяет NSGA-II для задач с многими целями (обычно более 3) путём замены расстояния скученности на селекцию на основе опорных точек. Набор равномерно распределённых опорных точек размещается на нормализованной гиперплоскости, и решения ассоциируются с ближайшей опорной точкой.
2.4 Индикатор гиперобъёма
Индикатор гиперобъёма (HV) измеряет объём пространства целей, доминируемый приближением фронта Парето, ограниченный опорной точкой. Это единственный унарный индикатор качества, строго монотонный относительно Парето-доминирования.
Для множества точек S и опорной точки r:
HV(S, r) = volume( ∪_{s ∈ S} [s₁, r₁] × [s₂, r₂] × ... × [s_M, r_M] )3. Целевые функции для торговли
Торговые приложения представляют богатый набор целей, которые часто конфликтуют друг с другом:
3.1 Точность предсказаний
Фундаментальная цель — насколько хорошо модель предсказывает будущие движения цен, доходности или сигналы. Измеряется через MSE, MAE, направленную точность или метрики классификации.
3.2 Задержка вывода
В торговле, чувствительной к задержке, каждая микросекунда имеет значение. Более крупные и сложные архитектуры обычно более точны, но медленнее.
3.3 Размер модели
Объём занимаемой памяти важен для развёртывания на колокированных серверах, FPGA или встроенных системах. Меньшие модели также склонны лучше обобщать благодаря неявной регуляризации.
3.4 Устойчивость
Рынки переживают смены режимов — от трендовых к возвратным к среднему, от низкой к высокой волатильности. Устойчивая модель поддерживает приемлемую производительность в различных рыночных условиях.
3.5 Интерпретируемость
Риск-менеджеры и регуляторы могут требовать объяснения решений модели. Более простые, интерпретируемые архитектуры предпочтительны, когда необходима прозрачность.
3.6 Коэффициент Шарпа
Вместо чистой точности предсказаний трейдеры часто заботятся о доходности с учётом риска. Коэффициент Шарпа SR = (E[R] - R_f) / σ(R) напрямую измеряет качество торговой стратегии.
3.7 Максимальная просадка
Наибольшее снижение от пика до дна стоимости портфеля. Модель с высоким коэффициентом Шарпа, но случайными катастрофическими просадками может быть неприемлемой для портфелей с ограничениями по риску.
4. Торговые приложения
4.1 Баланс между точностью и скоростью исполнения
Наиболее распространённый компромисс в торговом NAS — между качеством предсказаний и задержкой. Рассмотрим стратегию маркет-мейкинга, где модель должна предсказывать краткосрочные движения цен. Модель на основе трансформера с 12 слоями внимания может достичь 62% направленной точности, но потребует 5 мс на предсказание. Простой двухслойный MLP может достичь только 55% точности, но ответит за 50 микросекунд.
Многоцелевой NAS исследует пространство между этими крайностями, находя архитектуры, подобные трёхслойной сети с одной головой внимания, которая достигает 59% точности за 200 микросекунд.
4.2 Устойчивость к смене рыночных режимов
Однокритериальный NAS, оптимизирующий точность на последних данных, переобучится под текущий рыночный режим. Включая устойчивость как явную цель, MO-NAS находит архитектуры, которые по своей природе более стабильны.
Фронт Парето в этом случае показывает стоимость устойчивости: насколько нужно пожертвовать точностью в текущем режиме, чтобы поддержать производительность при смене режимов.
4.3 Развёртывание нескольких стратегий
Торговый деск, управляющий несколькими стратегиями на разных временных горизонтах, может использовать MO-NAS для поиска портфеля архитектур. Краткосрочные стратегии требуют низкой задержки; долгосрочные могут позволить более крупные модели.
5. Скаляризация vs. истинная многоцелевая оптимизация
5.1 Взвешенная сумма (скаляризация)
Простейший подход преобразует несколько целей в один скаляр:
F(x) = Σ_i w_i * f_i(x)где w_i — заданные пользователем веса. Это легко реализовать, но имеет фундаментальные ограничения:
- Невыпуклые фронты Парето: Скаляризация может находить решения только на выпуклой оболочке фронта Парето.
- Чувствительность к весам: Небольшие изменения весов могут привести к кардинально разным решениям.
- Единственное решение: Каждый вектор весов даёт только одно решение.
5.2 Парето-подходы
Истинные многоцелевые методы, такие как NSGA-II, поддерживают популяцию разнообразных решений и эволюционируют весь фронт Парето одновременно. Преимущества:
- Полный фронт: Один запуск даёт множество компромиссных решений.
- Без задания весов: Не нужно a priori указывать относительную важность.
- Невыпуклые фронты: Может находить решения в невыпуклых областях.
- Гибкость решений: Практики изучают полный фронт и выбирают на основе ограничений развёртывания.
5.3 Гибридные подходы
На практике хорошо работают гибридные подходы. Начальный запуск MO-NAS выявляет фронт Парето, за которым следует сфокусированный однокритериальный поиск в наиболее перспективной области.
6. Описание реализации
Наша реализация на Rust предоставляет полноценную систему многоцелевого NAS на основе NSGA-II.
6.1 Представление архитектуры
Каждая архитектура-кандидат представляется вектором категориальных и непрерывных параметров: количество слоёв, размерности скрытых слоёв, функции активации, головы внимания, коэффициенты dropout и т.д.
6.2 Многоцелевая оценка
Каждая архитектура оценивается по всем целям одновременно. Тип ObjectiveValues — это вектор значений float, по одному на цель. Меньшие значения лучше.
6.3 Парето-доминирование и сортировка
Функция dominates проверяет Парето-доминирование между двумя векторами целей. Функция non_dominated_sort разбивает популяцию на фронты.
6.4 Расстояние скученности
Функция crowding_distance вычисляет расстояния скученности для решений внутри фронта. Граничные решения получают f64::INFINITY.
6.5 Эволюционные операторы
Турнирная селекция использует ранг доминирования и расстояние скученности. Скрещивание создаёт потомков комбинацией генов двух родителей. Мутация случайно возмущает параметры архитектуры.
6.6 Главный цикл NSGA-II
Функция multi_objective_search связывает всё воедино: инициализация, оценка, сортировка, селекция, скрещивание, повторение.
См. rust/src/lib.rs для полной реализации и rust/examples/trading_example.rs для рабочего примера.
7. Интеграция данных Bybit
Наша реализация получает данные свечей (kline) в реальном времени через Bybit V5 API. Конечная точка https://api.bybit.com/v5/market/kline предоставляет данные OHLCV для любой поддерживаемой торговой пары и таймфрейма.
Конвейер данных:
- Получение: HTTP GET запрос с параметрами для символа, интервала и лимита
- Парсинг: Десериализация JSON-ответа в структурированные данные свечей
- Конструирование признаков: Вычисление доходностей, волатильности и технических индикаторов из сырых OHLCV данных
- Оценка целей: Использование обработанных признаков для симуляции производительности архитектуры
API Bybit бесплатен и не требует аутентификации для публичных эндпоинтов рыночных данных.
8. Ключевые выводы
-
Многоцелевой NAS производит фронты Парето, а не единственные решения. Это даёт практикам меню архитектур, представляющих лучшие достижимые компромиссы.
-
Торговля имеет естественно конкурирующие цели. Точность vs. задержка, коэффициент Шарпа vs. просадка, сложность модели vs. устойчивость — эти противоречия присущи домену.
-
NSGA-II — основной рабочий алгоритм. Его комбинация недоминируемой сортировки и расстояния скученности обеспечивает надёжную основу.
-
Парето-методы превосходят скаляризацию. Истинные многоцелевые подходы находят полные фронты Парето, включая невыпуклые области.
-
Гиперобъём — золотой стандарт метрики. Индикатор гиперобъёма — единственный унарный индикатор качества, строго монотонный по Парето-доминированию.
-
Устойчивость должна быть явной целью. Включение производительности в наихудшем случае как цели предотвращает переобучение под текущий рыночный режим.
-
Rust обеспечивает производительность промышленного уровня. Абстракции с нулевой стоимостью, безопасность памяти и бесстрашная конкурентность делают Rust отличным выбором.
-
Фронт Парето направляет решения о развёртывании. MO-NAS делает компромиссы между точностью и задержкой явными и количественными.