Глава 211: Поиск нейронных архитектур (NAS) для трейдинга
1. Введение
Проектирование архитектур нейронных сетей для финансового трейдинга традиционно было в равной мере искусством и наукой. Практики тратят недели или месяцы на ручное экспериментирование с различными конфигурациями слоёв, функциями активации и паттернами связности, чтобы найти модели, улавливающие тонкие статистические закономерности в рыночных данных. Поиск нейронных архитектур (Neural Architecture Search, NAS) предлагает принципиальную автоматизированную альтернативу: вместо того чтобы полагаться на человеческую интуицию и метод проб и ошибок, алгоритмы NAS систематически исследуют пространство возможных архитектур для обнаружения конструкций, оптимизирующих торговые метрики, такие как точность прогнозирования, коэффициент Шарпа или доходность с поправкой на риск.
Основная идея NAS обманчиво проста. Мы определяем пространство поиска архитектур-кандидатов, стратегию поиска для навигации по этому пространству и метод оценки производительности для оценки каждого кандидата. Алгоритм поиска предлагает архитектуры, оценивает их на торговых данных и итеративно уточняет свои предложения на основе наблюдаемой производительности. За множество итераций процесс сходится к архитектурам, специально адаптированным к структуре финансовых временных рядов.
Что делает NAS особенно привлекательным для трейдинга — это то, что финансовые данные обладают уникальными характеристиками (нестационарность, тяжёлые хвосты, смены режимов, низкое отношение сигнал/шум), которые могут благоприятствовать архитектурным паттернам, значительно отличающимся от обнаруженных на стандартных бенчмарках, таких как классификация изображений. Система NAS может обнаружить эти доменно-специфичные паттерны автоматически, потенциально находя архитектуры, которые человек-проектировщик никогда бы не рассмотрел.
В этой главе мы разрабатываем полный фреймворк NAS на Rust, специально спроектированный для торговых приложений. Мы реализуем эволюционный поиск по гибкому архитектурному пространству, включающему плотные слои, свёрточные слои, рекуррентные слои и механизмы внимания. Мы интегрируем реальные рыночные данные с биржи Bybit и демонстрируем, как обнаруживать архитектуры, оптимизированные для прогнозирования цен.
2. Математические основы
2.1 Определение пространства поиска
Пространство поиска $\mathcal{A}$ определяет множество всех архитектур, которые алгоритм NAS может рассматривать. Мы представляем каждую архитектуру как направленный ациклический граф (DAG), где узлы — это вычислительные операции, а рёбра представляют поток данных. Формально архитектура $a \in \mathcal{A}$ кодируется как последовательность генов:
$$a = (g_1, g_2, \ldots, g_L)$$
где $L$ — максимальное количество слоёв, и каждый ген $g_i$ определяет:
- Тип слоя $t_i \in {$ Dense, Conv1D, LSTM, Attention, Skip, Identity $}$
- Размерность скрытого слоя $h_i \in {16, 32, 64, 128, 256}$
- Функция активации $\sigma_i \in {$ ReLU, Tanh, Sigmoid, GELU, LeakyReLU $}$
- Цель skip-соединения $s_i \in {0, 1, \ldots, i-1}$ (соединение с предыдущим слоем или отсутствие)
- Коэффициент dropout $d_i \in {0.0, 0.1, 0.2, 0.3, 0.5}$
Общий размер пространства поиска:
$$|\mathcal{A}| = \prod_{i=1}^{L} |T| \cdot |H| \cdot |\Sigma| \cdot i \cdot |D|$$
Для $L=6$ слоёв это даёт более $10^{10}$ возможных архитектур, что делает полный перебор невозможным.
2.2 Стратегии поиска
Поиск на основе обучения с подкреплением (RL). Сеть-контроллер (обычно RNN) генерирует описания архитектур как последовательности токенов. Контроллер обучается методом REINFORCE, используя производительность на валидации каждой сгенерированной архитектуры в качестве сигнала вознаграждения:
$$\nabla_\theta J(\theta) = \mathbb{E}{a \sim \pi\theta}[\nabla_\theta \log \pi_\theta(a) \cdot (R(a) - b)]$$
где $\pi_\theta$ — политика контроллера, $R(a)$ — вознаграждение (например, коэффициент Шарпа на валидации), а $b$ — базовый уровень для уменьшения дисперсии.
Эволюционный поиск. Поддерживается популяция архитектур, которая развивается посредством операторов мутации и кроссовера. На каждом поколении:
- Турнирный отбор: выбираются $k$ особей, лучшая сохраняется как родитель
- Мутация: случайно изменяется один или несколько генов родителя
- Кроссовер: комбинируются гены двух родителей для создания потомства
- Оценка: потомство обучается и оценивается на валидационных данных
- Замещение: потомство вставляется в популяцию, вытесняя слабейших
Функция приспособленности $f(a)$ может учитывать несколько целей:
$$f(a) = \alpha \cdot \text{Accuracy}(a) - \beta \cdot \text{ModelSize}(a) - \gamma \cdot \text{Latency}(a)$$
Градиентный поиск (DARTS). Дискретное пространство поиска ослабляется до непрерывного посредством размещения softmax над выбором операций:
$$\bar{o}(x) = \sum_{o \in \mathcal{O}} \frac{\exp(\alpha_o)}{\sum_{o’} \exp(\alpha_{o’})} \cdot o(x)$$
Параметры архитектуры $\alpha$ и веса сети $w$ оптимизируются совместно посредством градиентного спуска.
2.3 Оценка производительности
Полное обучение каждой архитектуры-кандидата дорогостояще. Несколько стратегий снижают затраты:
- Разделение весов: все архитектуры используют единый набор весов в суперсети
- Ранняя остановка: обучение прерывается досрочно для неперспективных архитектур
- Прокси-задачи: оценка на подмножестве данных или упрощённой версии задачи
- Предикторы производительности: обучается суррогатная модель для предсказания производительности архитектуры по её кодировке
Предсказанная производительность $\hat{R}(a)$ аппроксимирует истинную производительность $R(a)$:
$$\hat{R}(a) = f_\phi(\text{encode}(a))$$
где $f_\phi$ — обученный предиктор (например, малая нейронная сеть или гауссовский процесс).
3. Пространства поиска NAS для трейдинга
3.1 Типы слоёв
Финансовые временные ряды требуют архитектур, способных улавливать как локальные паттерны, так и дальние зависимости:
- Dense (полносвязные): улавливают произвольные нелинейные зависимости между признаками на заданном временном шаге
- Conv1D: обнаруживают локальные временные паттерны, такие как свечные формации, сигналы импульса и краткосрочную реверсию к среднему
- LSTM/GRU: моделируют последовательные зависимости и сохранение режима на протяжении временных шагов
- Multi-Head Attention: обучаются определять, какие исторические временные шаги наиболее релевантны для текущих прогнозов, вне зависимости от временного расстояния
- Identity/Skip: позволяют информации обходить слои, обеспечивая как мелкие, так и глубокие эффективные архитектуры в рамках одного пространства поиска
3.2 Skip-соединения
Skip-соединения особенно важны для торговых моделей, потому что:
- Финансовые сигналы часто слабы и могут быть уничтожены слишком большим количеством нелинейных преобразований
- Различные признаки могут требовать различной степени обработки
- Остаточные соединения улучшают поток градиентов при обучении, что критично при низком отношении сигнал/шум целевого сигнала
Наше пространство поиска позволяет каждому слою опционально соединяться с любым более ранним слоем, обеспечивая обнаружение сложных многомасштабных архитектур.
3.3 Функции активации
Различные функции активации выполняют различные роли:
- ReLU/LeakyReLU: эффективны для общего извлечения признаков, при этом LeakyReLU избегает проблемы «мёртвых нейронов»
- Tanh: ограниченный выход, подходящий для слоёв, питающих рекуррентные блоки
- Sigmoid: полезен для механизмов вентилирования и вероятностных выходов
- GELU: гладкая аппроксимация ReLU, часто эффективная в архитектурах на основе внимания
Система NAS обнаруживает, какие активации лучше всего работают на каждом слое сети для торговых данных.
4. Торговые приложения
4.1 Прогнозирование цен
Для прогнозирования направления цены или доходности целевая функция NAS обычно:
$$\max_{a \in \mathcal{A}} \text{Accuracy}(a, \mathcal{D}_{\text{val}}) \quad \text{s.t.} \quad \text{Params}(a) \leq B$$
где $\mathcal{D}_{\text{val}}$ — данные валидации вне выборки, а $B$ — бюджет параметров. Поиск обнаруживает архитектуры, балансирующие ёмкость модели с риском переобучения на шуме в финансовых данных.
4.2 Прогнозирование волатильности
Прогнозирование волатильности требует архитектур, чувствительных к кластеризации и сохранению дисперсии. NAS может обнаружить модели, естественно улавливающие GARCH-подобную динамику через подходящие комбинации рекуррентных слоёв и слоёв внимания. Функция приспособленности может использовать среднеквадратичную ошибку реализованной волатильности или метрику на основе правдоподобия.
4.3 Оптимизация портфеля
Для построения портфеля целевая функция NAS становится:
$$\max_{a \in \mathcal{A}} \text{SharpeRatio}\left(\text{Portfolio}(a, \mathcal{D}_{\text{val}})\right)$$
Архитектуры, выдающие веса портфеля, должны удовлетворять ограничениям (например, веса в сумме дают единицу, без чрезмерного кредитного плеча), которые могут быть обеспечены через соответствующие выходные слои, фиксированные по всему пространству поиска.
4.4 Многоцелевой поиск
На практике торговые модели должны балансировать несколько целей: точность прогнозирования, вычислительные затраты (для выполнения в реальном времени), размер модели (для развёртывания) и устойчивость (к смене режимов). Мы отслеживаем фронт Парето недоминируемых архитектур:
Архитектура $a$ доминирует $a’$, если $a$ не хуже по всем целям и строго лучше хотя бы по одной. Фронт Парето содержит все недоминируемые архитектуры, предоставляя трейдеру меню оптимальных компромиссов.
5. Эффективный NAS
5.1 Разделение весов
Разделение весов драматически снижает стоимость NAS, обучая единую суперсеть, содержащую все возможные архитектуры как подсети. Каждая архитектура-кандидат оценивается извлечением соответствующего подмножества весов из суперсети, избегая необходимости обучать каждую архитектуру с нуля.
Веса суперсети $W$ обучаются путём выборки случайных архитектур на каждом шаге обучения:
$$W^* = \arg\min_W \mathbb{E}{a \sim \mathcal{U}(\mathcal{A})} [\mathcal{L}(a, W, \mathcal{D}{\text{train}})]$$
5.2 Методы одного выстрела (One-Shot)
One-Shot NAS обучает суперсеть один раз, а затем ищет лучшую подсеть. Это снижает стоимость поиска с тысяч GPU-часов до одного обучающего прогона плюс дешёвая фаза поиска. Ключевая задача — обеспечить, чтобы производительность подсети в суперсети коррелировала с автономной производительностью.
5.3 Прокси-задачи для трейдинга
Для дальнейшего снижения стоимости поиска мы используем прокси-задачи:
- Подвыборка данных: поиск на случайных 10-20% полной торговой истории
- Сокращённые эпохи обучения: обучение каждой архитектуры 5-10 эпох вместо 50-100
- Упрощённые признаки: использование только цены и объёма вместо полного набора признаков во время поиска
- Укороченные окна: использование 30-дневных окон вместо 90-дневных во время поиска
После того как поиск выявил перспективные архитектуры, лучшие кандидаты полностью обучаются и оцениваются на полном наборе данных.
6. Описание реализации
Наша реализация на Rust предоставляет полный фреймворк NAS для трейдинга. Ключевые компоненты:
6.1 Кодирование архитектуры
Каждая архитектура кодируется как вектор структур LayerGene, где каждый ген определяет тип слоя, скрытый размер, функцию активации, цель skip-соединения и коэффициент dropout. Это кодирование поддерживает эффективные операции мутации и кроссовера.
pub struct LayerGene { pub layer_type: LayerType, pub hidden_size: usize, pub activation: Activation, pub skip_connection: Option<usize>, pub dropout: f64,}6.2 Эволюционный поиск
Поиск проходит через поколения. На каждом поколении:
- Турнирный отбор выбирает родителей из текущей популяции
- Мутация случайно изменяет один ген в родительской архитектуре
- Каждое потомство оценивается симуляцией обучения на исторических данных
- Популяция обновляется, сохраняя лучших особей
Эволюционный подход особенно подходит для торгового NAS, потому что:
- Он естественно поддерживает многоцелевую оптимизацию через ранжирование Парето
- Он поддерживает разнообразие популяции, снижая риск преждевременной сходимости
- Он не требует дифференцируемого ослабления пространства поиска
6.3 Интеграция данных Bybit
Мы получаем реальные данные OHLCV из API Bybit для оценки архитектур. Данные преобразуются в признаки (доходности, скользящие средние, волатильность) и бинарные метки (направление цены), обеспечивая реалистичную среду оценки для обнаруженных архитектур.
6.4 Оценка архитектуры
Каждая архитектура-кандидат оценивается через упрощённую симуляцию прямого прохода. В продакшене это включало бы полное обучение с обратным распространением, но наша реализация демонстрирует структуру фреймворка NAS с использованием прокси-оценки, основанной на свойствах архитектуры и лёгких вычислениях на данных.
7. Интеграция данных Bybit
Интеграция с биржей Bybit обеспечивает реальные рыночные данные для оценки архитектур. Мы используем публичный эндпоинт klines:
GET https://api.bybit.com/v5/market/kline?category=linear&symbol=BTCUSDT&interval=60&limit=200Полученные свечи OHLCV преобразуются в признаки:
- Логарифмические доходности: $r_t = \ln(P_t / P_{t-1})$
- Скользящие средние: SMA и EMA по различным окнам
- Волатильность: скользящее стандартное отклонение доходностей
- Соотношения объёмов: текущий объём относительно скользящего среднего
Эти признаки формируют вход для архитектур-кандидатов на этапе оценки NAS. Использование реальных рыночных данных гарантирует, что обнаруженные архитектуры адаптированы к фактическим статистическим свойствам криптовалютных рынков, включая характерную кластеризацию волатильности, тяжелохвостые распределения доходностей и микроструктурные паттерны.
8. Ключевые выводы
-
NAS автоматизирует проектирование архитектур: вместо ручного экспериментирования с конфигурациями сетей NAS систематически обыскивает пространство возможных архитектур для нахождения конструкций, оптимизированных для торговых задач.
-
Трейдинг требует специализированных пространств поиска: финансовые временные ряды обладают уникальными свойствами (нестационарность, низкий SNR, смены режимов), которые благоприятствуют иным архитектурным паттернам, чем обнаруженные на стандартных бенчмарках. Включайте Conv1D для локальных паттернов, LSTM для последовательных зависимостей и attention для дальних связей.
-
Эволюционный NAS практичен для трейдинга: эволюционные алгоритмы естественно поддерживают многоцелевую оптимизацию, поддерживают разнообразие и хорошо масштабируются на сложные пространства поиска без необходимости дифференцируемых ослаблений.
-
Техники эффективности необходимы: разделение весов, прокси-задачи и ранняя остановка снижают вычислительные затраты NAS с тысяч GPU-часов до практических уровней. Для трейдинга подвыборка данных и сокращённые эпохи обучения являются эффективными прокси.
-
Многоцелевая оптимизация важна: торговые модели должны балансировать точность прогнозирования, размер модели, задержку вывода и устойчивость. Отслеживание фронта Парето предоставляет принципиальный способ навигации по этим компромиссам.
-
Rust обеспечивает преимущества производительности: вычислительная интенсивность NAS делает характеристики производительности Rust ценными, обеспечивая более быструю оценку архитектур и более короткие циклы поиска.
-
Оценка на реальных данных критична: архитектуры должны оцениваться на реальных рыночных данных (например, с Bybit), а не на синтетических данных, чтобы гарантировать захват истинных статистических свойств финансовых рынков.
-
NAS — дополнение, а не замена: NAS обнаруживает топологию архитектуры, но инженерия признаков, предобработка данных, управление рисками и логика исполнения по-прежнему требуют доменной экспертизы. NAS наиболее эффективен в сочетании с сильными знаниями в финансовой области.