Глава 222: Обнаружение состязательных атак
1. Введение - Обнаружение состязательных входных данных в торговых системах
Состязательные атаки представляют одну из наиболее коварных угроз для систем машинного обучения, развёрнутых на финансовых рынках. В отличие от традиционных кибератак, нацеленных на инфраструктуру, состязательные атаки нацелены на логику принятия решений ML-моделей путём создания входных данных, которые практически неотличимы от легитимных, но при этом вызывают катастрофические ошибки классификации. В торговле это может проявляться как едва заметно искажённые рыночные данные, поддельные книги ордеров или сконструированные ценовые паттерны, предназначенные для того, чтобы обмануть предсказательные модели и заставить их совершать убыточные или разрушительные сделки.
Ставки в торговле уникально высоки. Ошибочно классифицированное изображение в системе компьютерного зрения — это неудобство; ошибочно классифицированный торговый сигнал может привести к потерям в миллионы долларов за миллисекунды. Более того, состязательная угроза в финансах не гипотетична — рыночные манипуляции хорошо задокументированы и становятся всё более изощрёнными. Спуфинг, наслоение и засорение котировками — всё это формы состязательного поведения, непосредственно нацеленные на алгоритмические торговые системы.
Обнаружение состязательных атак находится на пересечении робастного машинного обучения и анализа рыночной микроструктуры. Цель — построить вторичный уровень защиты, который отслеживает входные и выходные данные модели в реальном времени, помечая точки данных, демонстрирующие характеристики, согласующиеся с состязательным возмущением. Эта глава развивает математические основы, реализует практические методы обнаружения на Rust для развёртывания с низкой задержкой и демонстрирует их применение к данным криптовалютного рынка с Bybit.
2. Математические основы
2.1 Статистические тесты для обнаружения аномалий входных данных
Основа обнаружения состязательных атак базируется на наблюдении, что состязательные примеры, будучи близкими к легитимным входным данным во входном пространстве, часто находятся в областях с низкой плотностью на многообразии данных. Пусть $X$ — входное пространство и $p(x)$ — плотность вероятности чистых данных. Состязательный пример $x_{adv}$ обычно создаётся так, чтобы:
$$|x_{adv} - x|_p \leq \epsilon$$
для некоторого бюджета возмущения $\epsilon$ по норме $L_p$, при этом $f(x_{adv}) \neq f(x)$, где $f$ — целевая модель. Ключевое понимание для обнаружения состоит в том, что, несмотря на близость во входном пространстве, состязательные примеры часто имеют различимые статистические свойства.
Ядерная оценка плотности (KDE): Имея набор чистых обучающих примеров ${x_1, \ldots, x_n}$, мы оцениваем плотность в тестовой точке $x$ с помощью:
$$\hat{p}(x) = \frac{1}{nh^d} \sum_{i=1}^{n} K\left(\frac{x - x_i}{h}\right)$$
где $K$ — ядерная функция (обычно гауссова), $h$ — ширина полосы пропускания, а $d$ — размерность. Состязательные примеры обычно имеют более низкие оценки плотности, чем чистые примеры.
2.2 Сжатие признаков
Сжатие признаков уменьшает пространство поиска, доступное противнику, применяя преобразования входных данных, которые «выжимают» состязательные возмущения, сохраняя семантическое содержание. Два основных операции сжатия:
Уменьшение битовой глубины: Уменьшает точность каждого значения признака с $b$ бит до $b’$ бит ($b’ < b$):
$$\text{squeeze}_{bit}(x) = \frac{\lfloor x \cdot 2^{b’} \rfloor}{2^{b’}}$$
Пространственное сглаживание: Применяет локальный усредняющий фильтр с размером окна $w$:
$$\text{squeeze}{smooth}(x_i) = \frac{1}{|N(i)|} \sum{j \in N(i)} x_j$$
Критерий обнаружения сравнивает предсказания модели на исходных и сжатых входных данных:
$$D(x) = \mathbb{1}\left[|f(x) - f(\text{squeeze}(x))|_1 > \tau\right]$$
где $\tau$ — порог обнаружения, откалиброванный на чистых валидационных данных.
2.3 Обнаружение через преобразование входных данных
Помимо сжатия признаков, преобразования входных данных, такие как добавление малого гауссова шума, применение минимизации полной вариации или сжатие в стиле JPEG, могут выявить состязательные возмущения. Принцип заключается в том, что натуральные данные устойчивы к этим преобразованиям, а состязательные возмущения хрупки:
$$\Delta(x) = |f(x) - f(T(x))|$$
где $T$ — преобразование входных данных. Большое $\Delta$ указывает на состязательную манипуляцию.
2.4 Неопределённость модели при атаке
Байесовская неопределённость предоставляет ещё один сигнал обнаружения. При байесовской нейронной сети или аппроксимации MC-Dropout предсказательная неопределённость для входа $x$ составляет:
$$\text{BU}(x) = \mathbb{H}[y|x] = -\sum_c p(y=c|x) \log p(y=c|x)$$
Состязательные примеры часто демонстрируют более высокую предсказательную неопределённость, поскольку они находятся вблизи границ решений. Комбинирование плотности KDE с байесовской неопределённостью (подход KD+BU) даёт мощный совместный детектор.
2.5 Локальная внутренняя размерность (LID)
LID характеризует размерностные свойства данных в окрестности опорной точки. Для точки $x$ и её $k$ ближайших соседей на расстояниях $r_1 \leq r_2 \leq \ldots \leq r_k$ оценка максимального правдоподобия LID составляет:
$$\widehat{\text{LID}}(x) = -\left(\frac{1}{k} \sum_{i=1}^{k} \log \frac{r_i}{r_k}\right)^{-1}$$
Состязательные примеры обычно имеют более высокие значения LID, чем чистые примеры, что указывает на то, что они занимают области пространства данных с необычной локальной геометрией. Это свойство устойчиво для различных методов атак и архитектур моделей.
3. Методы обнаружения
3.1 KD+BU: Ядерная плотность и байесовская неопределённость
Детектор KD+BU объединяет два комплементарных сигнала. Ядерные оценки плотности фиксируют, находится ли вход в хорошо заполненной области обучающего распределения. Байесовская неопределённость фиксирует, уверена ли модель в своём предсказании. Совместная оценка обнаружения:
$$s(x) = \alpha \cdot \text{normalize}(-\log \hat{p}(x)) + (1 - \alpha) \cdot \text{normalize}(\text{BU}(x))$$
Порог на $s(x)$ определяет решение об обнаружении. В торговле это означает мониторинг того, имеют ли входящие признаки рыночных данных разумную плотность в историческом распределении, а также проверку того, не является ли торговый сигнал модели необычно неопределённым.
3.2 Обнаружение на основе LID
Детектор LID работает в пространстве признаков промежуточных слоёв модели. Для каждого слоя $l$ глубокой сети мы вычисляем $\widehat{\text{LID}}_l(x)$ для тестового входа $x$. Вектор LID по слоям служит вектором признаков для бинарного классификатора (чистый vs. состязательный). Этот подход особенно эффективен, потому что состязательные возмущения по-разному влияют на геометрию представлений на разных глубинах сети.
3.3 Обнаружение через сжатие признаков
Сжатие признаков привлекательно для торговых систем благодаря своей простоте и вычислительной эффективности. Детектор:
- Поддерживает исходную модель $f$.
- Применяет одну или несколько функций сжатия к входу.
- Сравнивает предсказания на исходных и сжатых входах.
- Помечает входы, где расхождение предсказаний превышает порог.
Для рыночных данных уменьшение битовой глубины имитирует эффект округления цен до меньшего количества десятичных знаков, а пространственное сглаживание соответствует фильтрации скользящим средним признаков временных рядов.
3.4 Обнаружение на основе реконструкции
Автоэнкодер, обученный на чистых рыночных данных, учится реконструировать нормальные паттерны. Ошибка реконструкции служит оценкой аномальности:
$$e(x) = |x - \text{Dec}(\text{Enc}(x))|^2$$
Состязательные примеры, содержащие возмущения, отсутствующие в обучающем распределении, обычно производят более высокие ошибки реконструкции. Автоэнкодер эффективно обучает многообразие нормального рыночного поведения, и отклонения от этого многообразия сигнализируют о потенциальных атаках.
4. Торговые приложения
4.1 Обнаружение манипулированных рыночных данных
Манипуляции с рыночными данными могут принимать несколько форм, с которыми может справиться обнаружение состязательных атак:
- Подделка ценового потока: Злоумышленник изменяет ценовые данные между биржей и торговой системой. Детекторы сжатия признаков и на основе реконструкции могут выявить искусственные возмущения в ценовом потоке.
- Синтетические рыночные паттерны: Состязательно сгенерированные свечные паттерны, предназначенные для активации ложных технических сигналов. Обнаружение на основе LID может выявить паттерны, не соответствующие локальной геометрии реальных рыночных данных.
- Межактивная несогласованность: Возмущения данных одного актива, не соответствующие корреляционной структуре со связанными активами. Статистические детекторы с использованием совместной оценки плотности могут пометить эти аномалии.
4.2 Обнаружение спуфинга
Спуфинг включает размещение крупных ордеров с намерением отменить их до исполнения, создавая ложное впечатление спроса или предложения. С точки зрения обнаружения состязательных атак спуфинг создаёт состояния книги ордеров, которые являются «состязательными» для моделей, полагающихся на признаки глубины книги:
- Снимок книги ордеров, по-видимому, указывает на сильное давление покупки/продажи.
- Сжатие признаков (сглаживание профиля глубины книги ордеров) выявляет искусственность.
- Анализ LID векторов признаков книги ордеров показывает необычную локальную размерность.
- Ошибка реконструкции повышена, потому что автоэнкодер не может воспроизвести поддельный паттерн из чистых обучающих данных.
4.3 Идентификация аномального потока ордеров
Методы обнаружения состязательных атак могут быть перепрофилированы для выявления необычной торговой активности:
- Внезапные изменения паттернов скорости поступления ордеров, отклоняющиеся от обученной модели плотности.
- Распределения размеров сделок, которые сдвигаются способами, несовместимыми с естественной рыночной эволюцией.
- Временные паттерны обновления котировок, указывающие на алгоритмическую манипуляцию.
Подход KD+BU особенно эффективен здесь, потому что он объединяет статистическую аномалию (низкая плотность наблюдаемого паттерна) с неопределённостью модели (торговая модель не уверена, как интерпретировать необычный поток).
5. Обнаружение в реальном времени
5.1 Онлайн-обнаружение с требованиями низкой задержки
Торговые системы работают в условиях экстремальных ограничений по задержке, часто требуя принятия решений за доли миллисекунды. Обнаружение состязательных атак должно быть разработано для этой среды:
Распределение вычислительного бюджета: Система обнаружения должна потреблять лишь долю общего бюджета задержки. На практике это означает:
- Сжатие признаков: O(n) времени, подходит для обнаружения на уровне микросекунд.
- Оценка KDE: Требует структур приближённого поиска ближайших соседей (KD-деревья, LSH) для времени запроса O(log n).
- Оценка LID: Требует запросов k-NN, смягчается предварительно вычисленными пространственными индексами.
- Ошибка реконструкции: Один прямой проход через компактный автоэнкодер.
Потоковое обнаружение: Вместо оценки каждой точки данных независимо, поддерживается скользящее окно оценок обнаружения и применяются контрольные карты CUSUM или EWMA для обнаружения устойчивой состязательной активности:
$$S_t = \max(0, S_{t-1} + s_t - \mu_0 - k)$$
где $s_t$ — оценка обнаружения в момент времени $t$, $\mu_0$ — ожидаемая оценка для чистых данных, а $k$ — параметр допуска. Тревога срабатывает, когда $S_t > h$.
Многоуровневое обнаружение: Реализация каскада детекторов с увеличивающейся вычислительной стоимостью:
- Быстрая проверка сжатием признаков (микросекунды).
- Проверка предварительно вычисленной оценки плотности (десятки микросекунд).
- Полный анализ LID + реконструкция (сотни микросекунд).
Только входы, прошедшие быстрые проверки, поступают к более дорогим детекторам, минимизируя среднюю задержку обнаружения.
5.2 Адаптивные пороги
Рыночные условия нестационарны, поэтому пороги обнаружения должны адаптироваться. Во время режимов высокой волатильности естественная изменчивость данных увеличивается, и фиксированные пороги производят чрезмерное количество ложных срабатываний. Адаптивная пороговая обработка использует скользящую оценку распределения оценок для чистых данных:
$$\tau_t = \hat{\mu}t + z\alpha \cdot \hat{\sigma}_t$$
где $\hat{\mu}_t$ и $\hat{\sigma}t$ — экспоненциально взвешенные скользящие оценки среднего и стандартного отклонения оценок, а $z\alpha$ контролирует частоту ложных срабатываний.
6. Пошаговое руководство по реализации на Rust
Реализация в rust/src/lib.rs предоставляет полный фреймворк обнаружения состязательных атак, оптимизированный для торговых приложений. Ключевые проектные решения:
Почему Rust? Торговые системы требуют предсказуемой производительности с низкой задержкой. Абстракции Rust с нулевой стоимостью, отсутствие сборки мусора и строгая система типов делают его идеальным для систем обнаружения, которые должны работать на критическом пути торгового конвейера.
Архитектура: Реализация структурирована вокруг нескольких ключевых компонентов:
-
AdversarialDetector— Главная структура, координирующая все методы обнаружения. Она поддерживает статистику чистых данных и предоставляет унифицированный интерфейс обнаружения. -
Генерация атак (
fgsm_attack,pgd_attack) — Реализации метода быстрого знака градиента и проекционного градиентного спуска для генерации тестовых состязательных примеров. -
FeatureSqueezingDetector— Реализует уменьшение битовой глубины и пространственное сглаживание. -
StatisticalDetector— Оценка плотности на основе KDE с гауссовыми ядрами. -
LIDEstimator— Вычисляет локальную внутреннюю размерность с использованием оценки максимального правдоподобия. -
ReconstructionDetector— Простой линейный автоэнкодер для обнаружения аномалий. -
DetectionMetrics— Вычисляет TPR, FPR и AUC-ROC для оценки производительности детектора. -
BybitClient— Получает реальные рыночные данные с API Bybit.
7. Интеграция данных Bybit
Реализация включает BybitClient, который получает данные рынка в реальном времени и исторические данные с биржи Bybit. Интеграция поддерживает:
- Данные свечей (Kline): Данные OHLCV с настраиваемыми интервалами.
- Множественные интервалы: От 1-минутных до дневных свечей.
- Извлечение признаков: Сырые свечи конвертируются в векторы признаков.
Конвейер данных:
- Получение сырых свечей с API Bybit.
- Вычисление производных признаков (логарифмические доходности, реализованная волатильность, коэффициенты объёма).
- Нормализация признаков с использованием скользящего среднего и стандартного отклонения.
- Подача нормализованных признаков в ансамбль обнаружения состязательных атак.
- Агрегация оценок обнаружения по методам.
- Применение адаптивной пороговой обработки для окончательного решения об обнаружении.
8. Ключевые выводы
-
Состязательные атаки — реальная угроза для торговых систем. Рыночные манипуляции являются формой состязательных атак, и торговые системы на основе ML особенно уязвимы.
-
Множественные методы обнаружения обеспечивают эшелонированную защиту. Ни один детектор не идеален. Использование их совместно значительно повышает робастность.
-
Обнаружение должно работать в рамках ограничений по задержке. Каскадный подход с многоуровневыми проверками балансирует мощность обнаружения с требованиями задержки.
-
Адаптивные пороги необходимы для нестационарных рынков. Скользящие статистики поддерживают стабильное качество обнаружения в различных рыночных условиях.
-
Rust обеспечивает гарантии производительности, необходимые для промышленного развёртывания.
-
API Bybit и других бирж предоставляют данные для реалистичного тестирования.
-
Обнаружение состязательных атак дополняет робастность модели. Полная защита использует оба подхода.
-
Единый фреймворк обнаружения применим к множественным торговым угрозам. Обнаружение спуфинга, манипуляций рынком и аномального потока ордеров — все выигрывают от одних и тех же базовых методов.