Глава 191: Вариационный квантовый классификатор для трейдинга
1. Введение
Вариационные квантовые классификаторы (VQC) представляют собой один из наиболее перспективных алгоритмов квантового машинного обучения ближайшего будущего. В отличие от квантовых SVM, которые используют квантовые схемы исключительно для вычисления ядер, VQC — это полностью параметризованные квантовые модели: квантовая схема с обучаемыми углами поворота оптимизируется с помощью классических градиентных методов для непосредственной классификации. Этот гибридный квантово-классический подход делает VQC особенно подходящими для устройств промежуточного масштаба с шумами (NISQ), где глубина схемы должна оставаться небольшой.
В финансовых приложениях VQC могут классифицировать рыночные режимы, предсказывать направление цены и обнаруживать аномальные паттерны. Вариационная природа алгоритма позволяет модели адаптировать своё квантовое представление признаков в процессе обучения, потенциально обнаруживая нелинейные границы решений, которые трудно выучить классическим моделям. Структура схемы — кодирование данных в квантовые состояния с последующим применением обучаемых поворотов — создаёт выразительный класс гипотез, масштабирующийся экспоненциально с числом кубитов.
В этой главе мы строим полную торговую систему на основе вариационного квантового классификатора на Rust. Мы симулируем квантовые схемы классически, но математический фреймворк полностью совместим с выполнением на реальных квантовых процессорах. Наша система получает рыночные данные с биржи Bybit, конструирует финансовые признаки, размечает рыночные режимы, обучает VQC и оценивает его предсказательную точность.
2. Математические основы
2.1 Алгоритм VQC
Вариационный квантовый классификатор состоит из трёх компонентов:
- Схема кодирования данных U(x): Отображает классический вход x в квантовое состояние.
- Вариационная (обучаемая) схема W(theta): Параметризованная квантовая схема с обучаемыми углами theta.
- Измерение: Измеряет один или несколько кубитов для получения предсказания классификации.
Полное квантовое состояние перед измерением:
|psi(x, theta)> = W(theta) * U(x) |0...0>Предсказание получается путём измерения математического ожидания оператора Паули-Z на первом кубите:
y_pred = <psi(x, theta)| Z_0 |psi(x, theta)>Это математическое ожидание лежит в [-1, +1], обеспечивая естественный выход для бинарной классификации. Для многоклассовых задач измеряются несколько кубитов или используется кодирование один-против-всех.
2.2 Схема кодирования данных U(x)
Мы используем угловое кодирование, где каждый признак x_k кодируется как угол поворота на кубите k:
U(x) = tensor_product( Ry(x_k) ) для k = 1, ..., nгде Ry(theta) = [[cos(theta/2), -sin(theta/2)], [sin(theta/2), cos(theta/2)]] — гейт Y-поворота. Признаки нормализуются в [0, pi] перед кодированием.
Для более богатого кодирования данных можно применять схему кодирования несколько раз (повторная загрузка данных), чередуя её с вариационными слоями:
|psi> = W_L(theta_L) * U(x) * ... * W_1(theta_1) * U(x) |0...0>2.3 Вариационная схема W(theta)
Вариационная схема состоит из L слоёв, каждый из которых содержит:
Однокубитные повороты:
R(theta) = Rz(theta_3) * Ry(theta_2) * Rz(theta_1)применяемые к каждому кубиту, обеспечивая полную свободу однокубитного вращения (3 параметра на кубит на слой).
Запутывающие гейты: Гейты CNOT между соседними кубитами в линейной или кольцевой топологии:
CNOT(q_k, q_{k+1}) для k = 0, ..., n-2Общее число обучаемых параметров: 3 * n * L (для L слоёв и n кубитов).
2.4 Функция стоимости и оптимизация
Функция стоимости — бинарная перекрёстная энтропия (или среднеквадратичная ошибка) между предсказаниями и метками:
C(theta) = (1/N) * sum_i [ (1 - y_i * f(x_i, theta))^2 ]где f(x_i, theta) = <Z_0> — математическое ожидание для входа x_i.
Мы оптимизируем theta с помощью правила сдвига параметра — квантово-нативной техники оценки градиента:
dC/d(theta_k) = [C(theta_k + pi/2) - C(theta_k - pi/2)] / 2Это требует 2 вычисления схемы на параметр на шаг градиента. В нашей классической симуляции мы также можем вычислять градиенты через конечные разности или автоматическое дифференцирование.
2.5 Выразительность и способность к запутыванию
Мощность VQC зависит от двух свойств:
- Выразительность: Насколько равномерно схема может исследовать пространство квантовых состояний. Больше слоёв и запутывающих гейтов увеличивают выразительность.
- Способность к запутыванию: Степень, в которой схема может создавать запутанность между кубитами. Это существенно для захвата корреляций между признаками.
Необходимо соблюдать баланс: слишком мало слоёв приводит к недообучению, тогда как слишком много слоёв вызывают бесплодные плато (исчезающие градиенты в ландшафте стоимости).
3. VQC vs классические и другие квантовые методы
3.1 Таблица сравнения
| Аспект | Классическая НС | QSVM | VQC |
|---|---|---|---|
| Тип модели | Параметризованные слои | На основе ядер | Параметризованная квантовая схема |
| Обучение | Обратное распространение | Выпуклая оптимизация | Правило сдвига параметра |
| Пространство признаков | Фиксированная архитектура | Квантовое ядро | Обучаемое квантовое представление |
| Параметры | O(d * h * L) | O(N^2) матрица ядра | O(n * L) поворотов |
| Масштабируемость | Хорошая | Ограничена матрицей ядра | Хорошая (мелкие схемы) |
| Совместимость с NISQ | Н/Д | Требует глубоких схем | Разработан для NISQ |
3.2 Преимущества VQC для трейдинга
- Адаптивное обучение признаков: В отличие от QSVM, где карта признаков фиксирована, VQC обучает оптимальное квантовое представление признаков в процессе обучения.
- Мелкие схемы: VQC может достигать хорошей производительности с мелкими схемами (мало слоёв), что делает его подходящим для шумного квантового оборудования.
- Масштабируемое обучение: Стоимость обучения масштабируется с числом параметров, а не с размером обучающей выборки (в отличие от ядерных методов).
- Повторная загрузка данных: Повторное кодирование данных между вариационными слоями позволяет VQC аппроксимировать произвольные функции (универсальная аппроксимация).
4. Торговое применение
4.1 Классификация рыночных режимов
Мы классифицируем рыночные состояния на три режима на основе форвардной доходности:
- Бычий (+1): Форвардная доходность превышает положительный порог (например, +0.5%)
- Медвежий (-1): Форвардная доходность падает ниже отрицательного порога (например, -0.5%)
- Боковой (0): Форвардная доходность в пределах порогового диапазона
Для бинарной классификации с VQC мы объединяем боковой и медвежий в один класс (-1).
4.2 Конструирование признаков
Наш набор признаков для VQC включает:
- Логарифмические доходности: r_t = ln(P_t / P_{t-1}) — импульс цены
- Реализованная волатильность: Скользящее стандартное отклонение доходностей
- RSI-подобный импульс: Отношение средних прибылей к средним убыткам
- Коэффициент объёма: Текущий объём относительно скользящего среднего объёма
- Позиция цены: Нормализованная позиция в пределах недавнего диапазона максимум/минимум
Признаки нормализуются в [0, pi] для углового кодирования в квантовую схему.
4.3 Торговая стратегия
Выход VQC (математическое ожидание Z на первом кубите) непосредственно даёт торговый сигнал:
- Сигнал на покупку: f(x) > порог (например, 0.0)
- Сигнал на продажу/без позиции: f(x) <= порог
Непрерывный выход также может использоваться для определения размера позиции: более сильные сигналы ведут к большим позициям.
5. Описание реализации
5.1 Структура проекта
191_variational_quantum_classifier/ rust/ Cargo.toml src/ lib.rs # Основная реализация VQC examples/ trading_example.rs # Полный торговый пайплайн5.2 Симуляция квантового состояния
Квантовое состояние представлено как комплексный вектор размерности 2^n. Гейты применяются путём вычисления их матричного представления и умножения на вектор состояния:
// Применение однокубитного гейта к кубиту `target` в n-кубитной системеfn apply_single_gate(state: &mut Vec<(f64, f64)>, gate: [[f64; 4]], target: usize, n_qubits: usize) { // Для каждой пары амплитуд, затронутых гейтом // Вычислить новые амплитуды используя матрицу гейта 2x2}5.3 Вариационная схема
Каждый слой вариационной схемы применяет:
- Повороты Ry и Rz с обучаемыми параметрами к каждому кубиту
- Гейты CNOT между соседними кубитами для запутывания
fn apply_variational_layer(state: &mut Vec<(f64, f64)>, params: &[f64], n_qubits: usize) { // Однокубитные повороты: Rz * Ry * Rz на кубит (3 параметра каждый) for q in 0..n_qubits { apply_rz(state, params[3*q], q, n_qubits); apply_ry(state, params[3*q + 1], q, n_qubits); apply_rz(state, params[3*q + 2], q, n_qubits); } // Запутывающая лестница CNOT for q in 0..n_qubits-1 { apply_cnot(state, q, q+1, n_qubits); }}5.4 Обучение с правилом сдвига параметра
fn parameter_shift_gradient(params: &[f64], data: &[Vec<f64>], labels: &[f64]) -> Vec<f64> { let mut grad = vec![0.0; params.len()]; for k in 0..params.len() { let mut params_plus = params.to_vec(); let mut params_minus = params.to_vec(); params_plus[k] += PI / 2.0; params_minus[k] -= PI / 2.0; grad[k] = (cost(¶ms_plus, data, labels) - cost(¶ms_minus, data, labels)) / 2.0; } grad}5.5 Интеграция с Bybit
Данные получаются из публичного API Bybit:
let url = format!( "https://api.bybit.com/v5/market/kline?category=linear&symbol={}&interval={}&limit={}", symbol, interval, limit);Ответ содержит OHLCV-свечи, которые парсятся в структурированные данные для конструирования признаков.
6. Интеграция данных Bybit
API Bybit предоставляет исторические данные свечей (kline) для нашего VQC. Мы получаем данные бессрочных фьючерсов BTCUSDT на различных таймфреймах.
Ключевые соображения:
- Ограничение запросов: Публичные эндпоинты Bybit имеют щедрые лимиты; мы реализуем разумные задержки.
- Качество данных: Мы обрабатываем пропущенные свечи и проверяем непрерывность временных меток.
- Нормализация: Сырые цены преобразуются в доходности и индикаторы, затем нормализуются в [0, pi] для квантового кодирования.
- Временное разделение: Более ранние данные для обучения, более поздние для тестирования, чтобы избежать заглядывания в будущее.
Пайплайн:
- Получить N свечей BTCUSDT с Bybit
- Вычислить признаки (доходности, волатильность, RSI, коэффициент объёма, позиция цены)
- Разметить каждую свечу рыночным режимом
- Нормализовать признаки в [0, pi]
- Разделить на обучающую и тестовую выборки
- Инициализировать параметры VQC случайно
- Обучить VQC с помощью правила сдвига параметра
- Предсказать на тестовой выборке и оценить точность
7. Ключевые выводы
-
VQC — это гибридные квантово-классические модели, которые сочетают параметризованные квантовые схемы с классической оптимизацией. Они являются квантовым аналогом нейронных сетей, где обучаемые углы поворота играют роль весов.
-
Кодирование данных критически важно. Угловое кодирование отображает признаки в повороты кубитов, а повторная загрузка данных между вариационными слоями увеличивает выразительность модели, позволяя универсальную аппроксимацию функций.
-
Правило сдвига параметра обеспечивает точные квантовые градиенты, используя только два вычисления схемы на параметр. Это делает обучение VQC совместимым как с квантовым оборудованием, так и с классической симуляцией.
-
Мелких схем достаточно для многих задач классификации. Это важно для NISQ-устройств, где глубина схемы ограничена декогеренцией и ошибками гейтов.
-
Классификация рыночных режимов выигрывает от способности VQC обучать нелинейные границы решений в квантовом пространстве признаков. Адаптивная природа вариационной схемы означает, что модель может обнаруживать полезные взаимодействия признаков в процессе обучения.
-
Бесплодные плато — ключевая проблема: для случайно инициализированных глубоких схем градиенты могут исчезать экспоненциально с числом кубитов. Стратегии смягчения включают послойное обучение, инициализацию тождественным преобразованием и ограничение глубины схемы.
-
Классическая симуляция выполнима для малого числа кубитов (2-4 кубита). Наша реализация на Rust симулирует квантовые схемы точно, позволяя полную разработку и тестирование пайплайна без квантового оборудования.
-
Rust обеспечивает производительность и безопасность для вычислительно интенсивных задач симуляции вектора состояний и вычисления градиентов. Строгая система типов ловит ошибки на этапе компиляции, а абстракции с нулевой стоимостью поддерживают высокую производительность.