preview
Нейросети в трейдинге: От трансформеров к спайковым нейронам (SpikingBrain)

Нейросети в трейдинге: От трансформеров к спайковым нейронам (SpikingBrain)

MetaTrader 5Торговые системы |
39 0
Dmitriy Gizlyk
Dmitriy Gizlyk

Введение

Финансовые рынки всегда были местом, где случайность соседствует с закономерностью, а мгновенная реакция зачастую важнее долгого анализа. Их сравнивали с океаном, где спокойная гладь может в одно мгновение смениться штормом, и с организмом, где нервные импульсы определяют жизненный ритм. Но пожалуй, наиболее точной метафорой остаётся нервная система, способная реагировать на внешние раздражители молниеносно и точечно. Именно поэтому появление фреймворка SpikingBrain, представленного в работе "SpikingBrain Technical Report: Spiking Brain-inspired Large Models", вызывает столь живой интерес.

Он вдохновлён биологией мозга и опирается на спайковую модель обработки информации. В отличие от традиционных нейросетей, которые непрерывно перемалывают исходные данные, спайковые сети действуют как сторожевые посты. Они молчат до тех пор, пока не наступает критический момент, и лишь тогда посылают сигнал. Такая логика удивительно перекликается с самим характером рынка, где цена может часами колебаться в узком диапазоне, а затем одно событие ломает равновесие — и движение разрастается в полноценный тренд.

Чтобы прочувствовать эту аналогию, достаточно взглянуть на графики Ренко. Здесь новая свеча появляется не по времени, а только при достижении ценой определённого порога. Весь мелкий шум исчезает, остаётся чистый рисунок движения. Спайковый нейрон действует так же. Хранит молчание до тех пор, пока анализируемый сигнал не достигнет заданного уровня. Для трейдера это сродни ясному рыночному сигналу среди хаоса котировок, где множество лишних деталей заслоняют суть.

Финансовый рынок в действительности живёт не временем, а событиями. Пример с публикацией Non-Farm Payrolls особенно показателен. За несколько минут до выхода данных рынок может казаться сонным. Котировки замирают, ликвидность сокращается, трейдеры затаились в ожидании. Но стоит цифрам оказаться неожиданными — и начинается взрыв. Валютные пары совершают резкие скачки, спреды расширяются, а в стакане стоп-ордера срабатывают один за другим. Классическим моделям часто требуется время, чтобы отразить столь резкие перемены. Они усредняют и сглаживают, и потому видят движение лишь тогда, когда оно уже почти завершилось. Спайковая архитектура фиксирует такие события иначе: каждый импульс мгновенно перестраивает сеть, позволяя принять торговое решение в ту же секунду, когда оно ещё имеет смысл.

Подобная картина наблюдается и при пробое психологических уровней. Цена долго топчется у отметки, трейдеры ждут, и в воздухе нарастает напряжение. Потом происходит один рывок — и уровень пробит. Начинается лавина ордеров, движение ускоряется, рынок взрывается. В такой момент особенно важно, что модель реагирует именно на событие пробоя, а не на плавное накопление статистики. Это поведение в высшей степени соответствует интуиции опытного трейдера. Он знает, что весь предыдущий шум был лишь прелюдией, и сигнал рождается именно в момент решающего движения.

Есть и другой пример — цепное срабатывание стоп-лоссов. Цена достигает критической зоны, и один за другим активируются ордера, создавая лавинообразный эффект. Это явление удивительно похоже на работу нейронной цепи, где первый импульс запускает второй, тот — третий, и волна распространяется всё дальше. Традиционные модели склонны воспринимать такую динамику как хаотичное движение. Но для спайковой модели это естественный процесс. Каждый спайк становится триггером для нового, и система органично отражает подобные лавинообразные явления.

Из этих наблюдений становится ясно, что SpikingBrain мыслит событиями. В отличие от традиционных моделей, которые рассматривают поток данных как непрерывный процесс. Он выделяет именно те моменты, которые действительно несут смысловую нагрузку. Его работа строится не на постоянном анализе, а на мгновенной реакции. Такой подход позволяет не тратить ресурсы на шумовые колебания и сосредоточиться на том, что действительно движет рынок.

Не менее важным преимуществом является энергоэффективность. В традиционных моделях нейроны активны всегда, даже если на входе нет значимого сигнала. В спайковых моделях ситуация иная. Нейрон срабатывает только тогда, когда порог достигнут. В условиях рынка это означает, что вычислительные ресурсы расходуются только в момент важного движения. Такой подход открывает возможность реализовывать алгоритм прямо в торговых терминалах, без подключения внешних серверов и без чрезмерных задержек.

Ещё одно качество SpikingBrain, которое делает его особенно ценным для практики, — способность к обучению в режиме online. Рынок постоянно меняется, и закономерности, работавшие вчера, могут оказаться бесполезными завтра. Классические модели часто оказываются заложниками прошлого. Они обучены на старых данных и с трудом справляются с неожиданными ситуациями. Спайковая модель, напротив, перестраивает свой прогноз на лету. Каждое новое событие становится элементом её обучения, позволяя алгоритму оставаться гибким и живым. Это очень напоминает поведение опытного трейдера, который мгновенно реагирует на свежие новости и корректирует стратегию, не застревая в старых схемах.

Все эти качества позволяют рассматривать SpikingBrain, как попытку построить полноценную нервную систему для торгового робота. Он мыслит импульсами, реагирует на события и адаптируется к новым условиям так же быстро, как это делает рынок. Подобно графикам Ренко, которые помогают трейдеру увидеть суть движения без лишнего шума, спайковая модель выделяет главное и игнорирует второстепенное.


Алгоритм SpikingBrain

Если взглянуть на SpikingBrain сквозь призму эволюции нейросетевых идей, он предстает как естественный шаг развития, логичный и своевременный. Transformer когда-то совершил настоящую революцию, отказавшись от громоздких рекуррентных структур и предложив механизм внимания, способный одновременно удерживать в фокусе всю последовательность данных. Эта универсальность превратила его в золотой стандарт для языковых моделей и множества смежных задач. Однако универсальность имеет и свою слабую сторону. Архитектура, идеально работающая с текстом, быстро перегружается, когда сталкивается с рынком. Ведь большую часть времени ничего существенного не происходит, а шумных колебаний слишком много.

Именно здесь SpikingBrain вносит свежую идею. Авторы фреймворка берут концепцию внимания, но переносят её в событийную плоскость. В классическом Transformer внимание распределяется по всей последовательности — модель думает обо всём сразу, выделяя более или менее значимые части. В SpikingBrain внимание возникает как вспышка — мгновенная реакция на факт достижения порогового уровня.

На финансовом рынке эта разница особенно заметна. Котировки можно представить как поток букв, из которых складываются слова и предложения рыночной истории. В отличие от языка, здесь появляется огромное количество лишних букв, повторов и случайных вставок. Transformer способен обработать их все. Но часто делает это избыточно, словно педантичный учитель, не пропускающий ни одной детали, даже бессмысленной. SpikingBrain же действует как опытный редактор, отсекающий банальные обороты и фиксирующий внимание только на том, что меняет смысл. Результат — структура данных остаётся стройной, а сигнал не перегружен лишней информацией.

Кроме того, важна энергоэффективность. Transformer требует колоссальных вычислительных ресурсов. И это оправдано для задач генерации текста или перевода, где важна каждая деталь. На финансовом рынке такой избыточный анализ ведёт к ложным срабатываниям и ненужным затратам. Спайковая модель работает иначе. Нейрон молчит, пока не накопит достаточно потенциала, и лишь затем выдает сигнал. Так модель экономит ресурсы. Её поведение становится ближе к природе торговли. Трейдер не реагирует на каждый тик, а ждёт момента, когда движение действительно заслуживает внимания.

SpikingBrain можно рассматривать как гибрид. С одной стороны, он наследует концептуальную силу Transformer, с другой — обогащает её биологически вдохновлённой событийностью. В этом переосмыслении внимание — уже не фон, а акт выбора, мгновенного переключения системы в режим реакции. Именно это свойство делает модель особенно ценной для рынка, где решающую роль играют не все данные, а лишь критические моменты, способные изменить траекторию движения капитала.

Экономия вычислительных ресурсов — весомый аргумент сама по себе. Однако в финансовых рынках она имеет и более глубокий смысл. Дело не только в скорости работы, но и в способности выдавать своевременные, надёжные сигналы. Если модель перегружена избыточной информацией, она либо запаздывает, либо генерирует ложные срабатывания. Квадратичная сложность Transformer при увеличении длины последовательности приводит к тому, что система начинает захлёбываться. Трейдер вместо ясной картины получает шум, замаскированный под анализ.

SpikingBrain решает эту проблему радикально иначе. Событийная обработка снижает нагрузку и естественным образом фильтрует данные. Нейрон срабатывает лишь тогда, когда накопленная динамика действительно имеет значение. Модель превращается в своего рода рыночного редактора, отсеивающего бессмысленные колебания и оставляющего только поворотные моменты. В результате сигналы становятся реже, но надёжнее — именно такими, какие нужны в торговле, где каждое решение связано с риском и должно быть обоснованным.

Кроме того, снижение вычислительной нагрузки открывает двери для более сложных сценариев применения. Там, где классический Transformer упирается в аппаратные ограничения, спайковая архитектура позволяет работать с большими объёмами рыночной информации в реальном времени, не теряя производительности. Для алгоритмической торговли, где миллисекунды могут решать исход сделки, это преимущество критично.

Архитектура SpikingBrain строится на принципах, которые органично соединяют спайковую обработку с механизмом внимания, переработанным под событийный режим. В её основе лежит набор спайковых нейронов, каждый из которых воспринимает исходный сигнал и накапливает потенциал до момента, когда он достигает критического порога. В этот момент нейрон срабатывает, формируя спайк, который передаётся далее по сети, воздействуя на другие нейроны и активируя соответствующие блоки обработки.

Такой подход позволяет сети концентрироваться на значимых событиях, игнорируя мелкие колебания и шумовые вариации. Механизм внимания в SpikingBrain перестаёт быть распределённым весом, как в классическом Transformer, и превращается в динамический фильтр. Он усиливает отклик нейронов, которые получают наиболее релевантные исходные данные, и ослабляет реакцию на менее значимые сигналы. В результате сеть реагирует не на каждое изменение, а только на те моменты, которые действительно способны изменить ситуацию на рынке.

Связи между нейронами строятся так, чтобы обеспечивать как локальную, так и глобальную реакцию. Локальные связи фиксируют изменения в отдельных сегментах данных. Глобальные связи позволяют распространять сигнал дальше, инициируя синхронизацию и реакцию на более масштабные рыночные события, такие как пробой уровня ликвидности или лавинообразное срабатывание стоп-ордеров. Такая структура обеспечивает одновременное сохранение детальной информации и контроль над целостной картиной рынка.

Ещё один ключевой элемент — пороговая адаптация. Порог активации нейронов не является фиксированным, а динамически изменяется в зависимости от текущей волатильности и исторической динамики. Это позволяет модели сохранять чувствительность к неожиданным движениям и при этом предотвращать чрезмерное реагирование на мелкий шум. В сочетании с событийной обработкой это делает архитектуру SpikingBrain особенно устойчивой к рыночным колебаниям и способной выдавать сигналы высокой ценности.

В своей работе авторы фреймворка SpikingBrain приходят к выводу, что путем лёгкого дообучения базовый Transformer может трансформироваться в разные эффективные варианты внимания. Это открывает простор для гибких компромиссов между точностью и вычислительной экономией. В контексте финансовых рынков это особенно важно: одни задачи требуют быстрого анализа длинных ценовых последовательностей, другие — высокой точности сигналов при ограниченных ресурсах.

В качестве иллюстрации в авторской работе рассматриваются два подхода, реализованных на базе одной предварительно обученной модели классического Transformer. Первый, SpikingBrain-7B, представляет собой чисто линейную модель, оптимизированную для обработки длинных контекстов с минимальными затратами ресурсов. Второй, SpikingBrain-76B, гибридный MoE-вариант, сочетает линейное и локальное внимание, обеспечивая баланс между эффективностью и качеством прогнозов.

В SpikingBrain-7B линейное внимание чередуется с локальными слоями скользящего оконного внимания с фиксированным окном анализа. Локальные слои улавливают детальные ценовые паттерны, аналогично тому, как трейдер фиксирует краткосрочные импульсы, тогда как линейное внимание аккуратно сжимает длинные зависимости, позволяя модели сохранять целостность контекста без лишней вычислительной нагрузки. Благодаря такой организации, обучение модели остаётся линейным по времени, а объём памяти во время работы — постоянным, независимо от длины последовательности. В практическом плане линейное внимание реализуется через модуль Gated Linear Attention, который усиливает важные сигналы и помогает нейронам запоминать динамику рынка, реагируя только на действительно значимые события.

SpikingBrain-76B развивает эту идею дальше. В ней линейное и локальное внимание объединены внутри слоя в параллельной гибридной конфигурации. А стандартные слои полного внимания встроены между слоями для усиления глобальной согласованности сигналов. Такая архитектура позволяет одновременно фиксировать локальные и глобальные рыночные события, не перегружая модель лишними данными. Для повышения гибкости локального внимания и снижения эффекта attention-sink, в модели добавлены специальные обучаемые токены, которые взаимодействуют с последовательностью без каузального ограничения. Кроме того, здесь используется разреженная структура Mixture-of-Experts для FFN-модулей. Каждый слой активирует лишь часть экспертов, что экономит ресурсы и делает модель способной работать с большими объёмами данных в реальном времени.

Обе реализации демонстрируют, как принципы Transformer могут быть переосмыслены в событийной парадигме.

Архитектурное решение SpikingBrain во многом созвучно принципам работы биологического мозга. Линейные модули внимания демонстрируют свойства, сходные с человеческой памятью. Они опираются на сжатые и постоянно обновляемые состояния. На каждом шаге извлекают информацию только из текущей памяти, проявляя поведение, напоминающее марковский процесс. С точки зрения биологии, такая рекуррентная обработка во времени может рассматриваться как упрощённая абстракция дендритной динамики с многоветвистой морфологией, где каждая ветвь обеспечивает локальную обработку сигнала.

Компонент Mixture-of-Experts (MoE) отражает принцип модульной разреженной активации и функциональной специализации, что напоминает распределённую и специализированную обработку в нейронных цепях. Каждый эксперт обрабатывает лишь часть информации, а общий результат собирается из активных модулей, что повышает эффективность и устойчивость системы.

Предложенная авторами фреймворка схема кодирования спайков вдохновлена биологическими системами с событийной и адаптивно разреженной активацией нейронов. Путем объединения разреженности на уровне модели (MoE) и отдельных нейронов достигается экономное распределение вычислительных ресурсов и создается стратегия двусторонней эффективности. Такой подход позволяет системе активироваться лишь по мере необходимости, сосредотачивая ресурсы на наиболее значимых событиях рынка и одновременно поддерживая высокую скорость обработки данных.

В совокупности эти решения демонстрируют перспективный путь создания архитектур крупных моделей, которые эффективны и экономны в вычислительном плане. При этом сохраняют биологическую правдоподобность, сочетая мощь нейросетей с принципами организации живого мозга. В контексте финансовых рынков это означает, что SpikingBrain способен подсвечивать ключевые события, действуя избирательно и минимизируя шум.

Обучение SpikingBrain строится на принципах, которые позволяют эффективно переносить знания из уже обученных моделей Transformer в новые спайковые и гибридные архитектуры. В основе этого лежит соответствие карт внимания. Внимание в предварительно обученном Transformer определяется стандартной функцией SoftMax от произведения запросов и ключей, умноженного на маску последовательности. В таком контексте локальное скользящее внимание (SWA) можно рассматривать как разреженную версию этой карты с сильным смещением к недавним событиям. Тогда линейное внимание — это низкоранговое приближение, где максимальный ранг карты ограничен размерностью векторов запроса и ключа.

Используя такое соответствие, параметры проекций QKV можно инициализировать напрямую из контрольной точки предварительно обученного Transformer. Путём лёгкого дообучения на сравнительно небольшом объёме данных внимание адаптируется к локальным или низкоранговым случаям. Локальное внимание сохраняет точность анализа недавних событий, линейное внимание удерживает глобальные зависимости. А их комбинация в гибридном режиме обеспечивает более точное приближение к исходной карте внимания. Для финансового рынка это означает, что модель может одновременно отслеживать краткосрочные ценовые всплески и глобальные тренды, сохраняя согласованность сигналов.

Для стабильного обучения и плавного перехода к новой архитектуре применяются несколько важных приёмов. Во-первых, активации QK в линейном внимании приводятся к неотрицательным значениям с помощью ReLU или Sigmoid, чтобы сохранить свойства SoftMax и обеспечить корректный перенос знаний. Во-вторых, низкоранговые параметры, такие как нормализация и гейтинговые компоненты, сохраняются. На этапе конверсии данные обучаются с небольшим шагом, поэтому оптимизация большого числа случайно инициализированных параметров затруднительна. Авторы фреймворка повторно используем все проекционные веса в модулях внимания и FFN, минимизируя новые параметры.

Третья особенность — расширение длинного контекста во время дообучения. Поскольку эффективные механизмы внимания масштабируются субквадратично, практично ограничивать длину контекста при начальной конверсии и постепенно увеличивать её в процессе обучения. При этом сохраняется эффективность вычислений. Модель полностью обучается на этапе конверсии для обеспечения производительности, применяя разогрев learning rate и методы дистилляции между архитектурами или обучение всех параметров сразу.

В финансовом контексте такой подход обеспечивает возможность плавного переноса знаний из мощных предварительно обученных моделей на специализированные спайковые архитектуры SpikingBrain. Модель сохраняет информацию о ключевых рыночных событиях, одновременно эффективно фильтруя шум и сокращая вычислительные затраты.

Процесс обучения SpikingBrain реализован в виде многоэтапной конверсии. Предварительное обучение с постепенным расширением контекста (Continual Pre-Training, CPT) плавно сменяется супервизорной донастройкой (Supervised Fine-Tuning, SFT). В своей работе авторы фреймворка для обучения моделей использовали высококачественные открытые наборы данных. Тем не менее в реальной практике могут использоваться специфические финансовые данные для адаптации под конкретные рынки или активы.

В авторской статье описывается процесс обучения языковой модели SpikingBrain из трёх этапов. На каждом из которых контекстная длина постепенно увеличивается, а модель адаптируется к новым требованиям. На первом этапе модели обучаются на 100 млрд. токенов с длиной последовательности 8к. Это позволяет перенести паттерны внимания к локальным и низкоранговым вариантам и добиться устойчивой сходимости функции потерь. На втором и третьем этапах длина последовательности расширяется до 32к и 128к, соответственно, каждый раз используя 20–30 млрд. токенов. В сумме конверсия требует около 150 млрд. токенов, что составляет всего около 2% от объёма данных, необходимых для обучения модели с нуля, и обеспечивает эффективную адаптацию при ограниченных ресурсах. Для всех этапов базовая позиционная RoPE-кодировка сохраняется неизменной, как в исходной модели.

После этапа CPT следует тонкая донастройка, также разбитая на три этапа. Первый из них сосредоточен на базовом понимании языка и знании предметной области, используя обширный набор данных Infinity Instruct, который охватывает научные знания, интерпретацию кода и решение математических задач. Обучение проводится на 500 тыс. примеров при длине последовательности 8к. Второй этап акцентирует внимание на навыках диалога и следовании инструкциям, используя набор диалогов с несколькими ходами, ориентированных на задачи и вопросы с познавательным содержанием. Объём данных и длина последовательностей остаются прежними. Третий этап ориентирован на задачи рассуждений, используя высококачественный набор данных, содержащий детализированные цепочки рассуждений для математических доказательств, логических выводов, анализа кейсов и других многозвенных задач.

Такой многоэтапный подход позволяет SpikingBrain постепенно перенимать знания от предварительно обученных моделей, адаптироваться к длинным контекстам и одновременно повышать точность сигналов на различных уровнях.

Для эффективного расширения плотной модели FFN в MoE-архитектуру, авторы фреймворка применяют технику upcycling, которая позволяет увеличить ёмкость модели, одновременно повторно используя знания, уже закодированные в исходных параметрах. На этапе инициализации параметры базовой плотной FFN модели копируются в N экспертов, а для каждого токена вводится случайный маршрутизатор. Этот маршрутизатор выбирает Top-K экспертов с вероятностью p и возвращает их взвешенную сумму, что на старте обеспечивает функциональную эквивалентность исходной плотной сети.

В процессе обучения стохастическая маршрутизация и добавление шума в данные постепенно разрушают начальную симметрию, создавая дифференцированные градиенты и способствуя специализации экспертов. Кроме маршрутизируемых экспертов, в модели SpikingBrain-76B используется один общий эксперт, который всегда активен для всех токенов и помогает стабилизировать процесс конверсии.

Прямое копирование и активация нескольких экспертов увеличивает масштаб выходных значений. С целью сохранения согласованности между выходами MoE и плотной FFN, вводится масштабирующий коэффициент, который применяется при инициализации ко всем экспертам. Таким образом MoE-сеть на старте работает эквивалентно исходной плотной модели, но при этом имеет потенциал для дальнейшей специализации и увеличения ёмкости.

В финансовом контексте такая организация MoE позволяет модели SpikingBrain одновременно наблюдать за множеством рыночных сценариев, выделяя специализированные эксперты для разных типов сигналов. Одни фокусируются на краткосрочных ценовых импульсах, другие — на глобальных трендах или редких событиях. Благодаря upcycling сеть быстро адаптируется, повторно используя уже накопленные знания, что ускоряет обучение и повышает точность сигналов без излишней вычислительной нагрузки.

Вдохновленные биологическими механизмами вычислений (событийной обработкой и разреженной активацией), авторы фреймворка предлагают специализированную стратегию спайкового кодирования, которая преобразует активации больших моделей в целочисленные значения и последовательности спайков. Эта схема может применяться как на этапе обучения, так и после него, превращая активации модели в спайковые сигналы. Для повышения энергоэффективности дополнительно к процессу спайков предлагается квантование весов модели и кеш KV до точности INT8. Интеграция этой стратегии с лёгкой конверсией SpikingBrain позволяет обойтись без полного дообучения. Достаточно небольшой калибровочной выборки для оптимизации параметров квантования.

Активации в SpikingBrain преобразуются по двухэтапной логике. На первом этапе используется адаптивное пороговое спайкование. Активации преобразуются в целочисленные спайки с учётом динамически регулируемого порога, который поддерживает статистический баланс нейронной активности. Это предотвращает как избыточное срабатывание нейронов, так и их бездействие, что критически важно для сохранения информативности сигналов.

Формально порог определяется как среднее абсолютное значение мембранного потенциала, масштабируемое гиперпараметром k, который регулирует количество спайков. Этот механизм устойчив к редким выбросам. Нейроны сохраняют стабильную активность для большинства сигналов и увеличивают количество спайков только для критически значимых всплесков. В финансовом контексте это можно сравнить с пересечением цены линии скользящей средней. Обычные колебания цены проходят мимо нейтрального порога, не вызывая реакции. И только когда цена пересекает скользящую среднюю — ключевой момент — генерируется сигнал. Так же спайковая нейросеть реагирует только на значимые события, фильтруя шум и концентрируя внимание на движениях рынка, имеющих реальную торговую ценность.

На втором этапе, уже на стадии инференса, полученные целочисленные спайки разворачиваются в разреженные последовательности спайков со значениями {−1, 0, 1} по временной оси. Это позволяет заменить плотные матричные умножения на событийные накопления, существенно повышая вычислительную эффективность. Для различных сценариев авторы фреймворка предлагают три схемы кодирования.

Первая — бинарное кодирование {0,1}. Каждая единица соответствует активации нейрона, а количество спайков аккумулируется во времени. Простое и эффективное решение для низкой плотности спайков, однако, при больших значениях требуется много временных шагов.

Вторая — тернарное кодирование {−1, 0, 1}, вводящее ингибирующие спайки. Такой подход позволяет выражать как возбуждение, так и подавление, что ближе к биологическим принципам возбуждение/торможение. Тернарное кодирование сокращает количество временных шагов и снижает частоту спайков более чем в два раза, сохраняя выразительность сигналов.

Третья — побитовое кодирование (bitwise coding). Целочисленное количество спайков разворачивается по битам во времени. Такая схема обеспечивает максимальную компрессию по временной оси. Возможны варианты двунаправленного кодирования и представления со знаком, что позволяет одновременно учитывать положительные и отрицательные значения, сохраняя простоту и биологическую правдоподобность. Побитовое кодирование сокращает общий объём спайков до 8 раз, минимизируя коммуникационные накладные расходы и вычислительную нагрузку.

В итоге такой подход позволяет SpikingBrain не реагировать на каждый тик или шумовое движение рынка, а концентрироваться на значимых событиях, аналогично трейдеру, который принимает решение только когда цена пересекает ключевой уровень. Каждое преобразование активаций в спайки делает модель более избирательной, экономной и адаптированной к динамичной среде финансовых рынков.

Авторская визуализация фреймворка SpikingBrain представлена ниже.


Реализация средствами MQL5

После детального рассмотрения теоретических аспектов фреймворка SpikingBrain, мы переходим к практической части нашей работы, где рассмотрим один из вариантов реализации предложенных подходов средствами MQL5. И сразу стоит снять розовые очки. Экономия ресурсов, о которой говорят авторы фреймворка, в значительной степени достигается за счёт использования заранее обученных крупных языковых моделей на базе архитектуры Transformer. Без доступа к таким моделям процесс обучения остаётся трудоёмким и ресурсозатратным, и это важно учитывать при планировании работы.

Тем не менее, основной вопрос об эффективности предложенной архитектуры остаётся открытым. Именно его мы и намерены оценить на практике, исследуя, как спайковая обработка и модульная структура MoE проявляют себя в условиях ограниченных вычислительных ресурсов и реальных рыночных данных. Это позволит оценить реальные преимущества SpikingBrain. Насколько он способен фильтровать шум, выделять ключевые рыночные сигналы и экономить вычислительные ресурсы в среде, где миллисекунды и точность имеют критическое значение.

В то же время использование предварительно обученных нейронных моделей, предложенное авторами фреймворка, открывает важную возможность. Мы можем задействовать ранее построенные модули и слои нейронной сети в процессе данной реализации. Это значительно ускоряет работу. Однако полностью обойтись без внедрения новых алгоритмов не получится. Сочетание готовых компонентов и новых алгоритмов позволит эффективно реализовать SpikingBrain средствами MQL5 и проверить его эффективность.

Начнем работу с построения относительно простого алгоритма, который преобразует непрерывный сигнал обычного нейрона в дискретное трёхзначное значение {-1, 0, 1}. Этот подход повторяет базовую идею спайковой активации: нейрон остаётся молчаливым, пока потенциал не достигает критического порога, и лишь затем выдает сигнал в положительном или отрицательном направлении. Для реализации этого алгоритма создаём новый кернел на  стороне OpenCL-программы.

Принцип работы кернела прост и нагляден. Сначала проверяем, что исходное значение корректно и не является NaN или бесконечностью. Если сигнал отсутствует или слишком мал относительно порогового уровня, нейрон остаётся в состоянии покоя — присваивается значение 0.

__kernel void FloatToSpike(__global const float* values,
                           __global const float* levels,
                           __global float* outputs
                          )
  {
   const size_t id = get_global_id(0);
   float val = IsNaNOrInf(values[id], 0.0f);
   if(val == 0.0f)
      outputs[id] = 0.0f;
   else
     {
      const float lev = IsNaNOrInf(levels[id], 0.0f);
      if(fabs(val) < lev)
         outputs[id] = 0.0f;
      else
         outputs[id] = (float)sign(val);
     }
  }

Если же абсолютное значение превышает порог, нейрон выдает спайк с учётом направления изменения: +1 для положительного импульса и −1 для отрицательного.

Такой подход позволяет моделировать фундаментальный принцип спайковой обработки — реагирование только на значимые события. Преобразование в {-1, 0, 1} позволяет фильтровать несущественные движения и концентрироваться на ключевых событийных точках, как трейдер реагирует только на пересечение цены с важным уровнем.

Однако за кажущейся простотой алгоритма прямого прохода скрывается нетривиальная задача распределения градиента ошибки, необходимого для обучения модели. Главный вопрос заключается в том, когда и как следует передавать градиент к исходному сигналу нейрона. Если ограничиться передачей только для открытых нейронов, легко столкнуться с проблемой массового закрытия большого числа нейронов, когда обучение фактически останавливается. Градиент просто не проходит, и модель перестаёт адаптироваться.

Сложность усугубляется при использовании трёхзначного сигнала {-1, 0, 1}. В процессе обучения неизбежно возникает необходимость изменять направление активации нейрона с положительной на отрицательную или наоборот, проходя через диапазон неактивности. Если блокировать градиент в этом промежутке, нейрон замирает и теряет способность к обучению.

Исходя из этого, мы принимаем принципиальное решение — градиент ошибки необходимо передавать постоянно, независимо от текущего состояния нейрона. Такой подход обеспечивает непрерывное обновление параметров, позволяет избегать остановки обучения и сохраняет адаптивность модели, даже если большая часть нейронов временно остаётся неактивной. Это ключевой шаг, который обеспечивает эффективность спайковой обработки при работе с дискретными сигналами и позволяет модели устойчиво обучаться на потоках финансовых данных.

Второй важный аспект касается порогового уровня срабатывания нейронов. Как отмечают авторы фреймворка SpikingBrain, высокий порог приводит к редкой генерации сигналов. В результате значительная часть полезной информации проходит мимо внимания модели. Напротив, низкий порог увеличивает чувствительность нейронов, но одновременно заставляет их реагировать на шум, порождая ложные сигналы.

Следовательно, оптимальным решением является предоставление модели возможности самостоятельно выучивать пороги срабатывания для каждого нейрона. При этом возникает интересная особенность: градиенты ошибки для сигнала и порога срабатывания направлены в противоположные стороны. Если необходимо усилить реакцию нейрона на значимые события, порог следует снижать, чтобы сигнал легче преодолевал барьер. Если же задача состоит в подавлении шумовых колебаний, порог нужно повышать, ограничивая ложные срабатывания.

Таким образом, обучение пороговых значений становится тонкой задачей балансировки. Модель должна одновременно фильтровать шум и сохранять чувствительность к ключевым событиям рынка. Этот механизм делает спайковые нейроны адаптивными и обеспечивает их способность концентрироваться на действительно значимых колебаниях цены. Как опытный трейдер, который знает, когда стоит реагировать, а когда — дождаться подтверждения.

Реализацию описанного подхода мы переносим на уровень кернела OpenCL-программы, создавая алгоритм, который обрабатывает градиенты ошибок сигналов нейронов и их пороговых значений.

__kernel void FloatToSpikeGrad(__global const float* values,
                               __global float* values_gr,
                               __global float* levels_gr,
                               __global const float* gradients
                              )
  {
   const size_t id = get_global_id(0);
   const float grad = IsNaNOrInf(gradients[id], 0.0f);
   values_gr[id] = grad;
   if(fabs(grad) > 0.0f)
     {
      float val = IsNaNOrInf(values[id], 0.0f);
      levels_gr[id] = (float)(-sign(val) * grad);
     }
   else
      levels_gr[id] = 0.0f;
  }

Принцип работы кернела отражает ключевую особенность обучения пороговых нейронов. Градиент ошибки всегда передается на исходный сигнал нейрона через массив values_gr. При этом для порогового значения нейрона градиент формируется с противоположным знаком относительно направления сигнала. Если необходимо усилить срабатывание нейрона на значимое событие, порог снижается. А при подавлении шума — повышается.

Для организации процесса на стороне основной программы создаём новый слой CNeuronSpikeConv, который наследует базовый функционал полносвязных объектов, при этом позволяя объединить процесс классической свёртки с генерацией спайков, создавая единый модуль, который формирует дискретные импульсы для дальнейшей обработки.

class CNeuronSpikeConv  :  public CNeuronBaseOCL
  {
protected:
   CNeuronConvOCL    cConv;
   CParams           cLevels;
   //---
   virtual bool      FloatToSpike(void);
   virtual bool      FloatToSpikeGrad(void);
   //---
   virtual bool      feedForward(CNeuronBaseOCL *NeuronOCL) override;
   virtual bool      updateInputWeights(CNeuronBaseOCL *NeuronOCL) override;
   virtual bool      calcInputGradients(CNeuronBaseOCL *NeuronOCL) override;

public:
                     CNeuronSpikeConv(void) {};
                    ~CNeuronSpikeConv(void) {};
   //---
   virtual bool      Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl,
                          uint window, uint step, uint window_out, uint units_count,
                          uint variables, ENUM_OPTIMIZATION optimization_type, uint batch);
   //---
   virtual CBufferFloat* GetWeightsConv(void)   {  return cConv.GetWeightsConv();  }
   virtual int       Type(void) override const  {  return defNeuronSpikeConv;   }
   //--- methods for working with files
   virtual bool      Save(int const file_handle) override;
   virtual bool      Load(int const file_handle) override;
   virtual void      SetOpenCL(COpenCLMy *obj)   override;
   //---
   virtual bool      WeightsUpdate(CNeuronBaseOCL *source, float tau) override;
   virtual uint      GetFilters(void) const { return cConv.GetFilters(); }
   virtual uint      GetVariables(void) const { return cConv.GetVariables(); }
   virtual uint      GetUnits(void) const { return cConv.GetUnits(); }
  };

Класс содержит несколько ключевых компонентов. В частности, объект cConv реализует операции свёртки сигналов, а cLevels учит и хранит пороговые значения для каждого нейрона. Внутри класса определены методы FloatToSpike и FloatToSpikeGrad, являющиеся методами-обертками одноименных кернелов.

Инициализация нового объекта осуществляется в методе Init, который последовательно настраивает все ключевые компоненты слоя.

bool CNeuronSpikeConv::Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl,
                            uint window, uint step, uint window_out, uint units_count,
                            uint variables, ENUM_OPTIMIZATION optimization_type, uint batch)
  {
   if(!CNeuronBaseOCL::Init(numOutputs, myIndex, open_cl, window_out * units_count * variables,
                                                                     optimization_type, batch))
      return false;

Сначала вызывается инициализация родительского объекта, в котором создаются унаследованные базовые интерфейсы.

Далее инициализируется свёрточный модуль cConv, которому передаются параметры окна, шага, количества элементов и переменных. Для него сразу задаётся функция активации TANH, что обеспечивает плавное масштабирование сигнала на выходе в ожидаемом диапазоне значений.

   if(!cConv.Init(0, 0, OpenCL, window, step, window_out, units_count, variables, optimization, iBatch))
      return false;
   cConv.SetActivationFunction(TANH);

Затем настраивается компонент порогов cLevels, также с возможностью оптимизации и определением функции активации SIGMOID. Важным шагом является заполнение весов cLevels константными значениями -10. Это гарантирует корректное начальное состояние порогов перед обучением, близкое к нулю и позволяющее нейронам сразу реагировать на значимые события, не будучи заблокированными высоким порогом.

   if(!cLevels.Init(0, 1, OpenCL, Neurons(), optimization, iBatch))
      return false;
   cLevels.SetActivationFunction(SIGMOID);
   CBufferFloat* temp = cLevels.getWeights();
   if(!temp)
      return false;
   if(!temp.Fill(-10))
      return false;
//---
   return true;
  }

В результате, метод Init объединяет подготовку всех компонентов слоя, формируя готовый к работе модуль, способный одновременно выполнять свёртку и генерировать спайковые импульсы. Такая интеграция обеспечивает слаженную работу слоя на финансовых данных, позволяя нейронам реагировать только на значимые колебания и фильтровать шум.

Метод feedForward обеспечивает прямое распространение сигнала через слой CNeuronSpikeConv. Сначала вызывается одноименный метод свёрточного модуля cConv, который обрабатывает исходные данные и формирует свёрнутый сигнал.

bool CNeuronSpikeConv::feedForward(CNeuronBaseOCL *NeuronOCL)
  {
   if(!cConv.FeedForward(NeuronOCL))
      return false;
   if(bTrain)
      if(!cLevels.FeedForward())
         return false;
//---
   return FloatToSpike();
  }

Если слой работает в режиме обучения (bTrain==true), дополнительно выполняется прямой проход компонента генерации порогов cLevels, обеспечивая корректную адаптацию порогов для каждого нейрона.

Завершающим шагом является вызов функции FloatToSpike, которая преобразует полученные значения в дискретные спайковые импульсы.

Как можно заметить, алгоритм метода прямого прохода достаточно прямолинейный и не создаёт осложнений для распределения градиентов. Обновление параметров модели осуществляется средствами вложенных компонентов, что позволяет сохранить чистоту архитектуры и упрощает процесс обучения. Поэтому методы обратного прохода предлагаем оставить для самостоятельного изучения. Полный код класса и всех его методов приведён во вложении, что позволяет ознакомиться с реализацией всех деталей и интеграцией спайковых нейронов.

Сегодня мы проделали большую работу, и пришло время сделать паузу, чтобы дать мыслям улечься. Пусть накопившаяся информация устроится на своих местах, а детали успеют осесть в памяти. В следующей статье мы вернёмся к начатой работе, продолжим исследование спайковых моделей и покажем, как эти алгоритмы применяются к реальным финансовым потокам, превращая теорию в практические сигналы для торговли.


Заключение

В данной статье мы рассмотрели теоретические основы фреймворка SpikingBrain. Главное преимущество фреймворка заключается в его событийной природе. Нейроны активируются лишь при достижении порогового уровня, что резко снижает вероятность ложных срабатываний и повышает качество сигналов. В отличие от классических архитектур, таких как Transformer, фреймворк позволяет сохранять критическую информацию о важных движениях рынка, не перегружая систему избыточными данными.

Кроме того, использование адаптивных порогов и возможность интеграции предварительно обученных модулей обеспечивает гибкость и масштабируемость модели. Спайковая архитектура естественно поддерживает экономию энергии и вычислительной мощности, что делает её особенно привлекательной для задач алгоритмической торговли и анализа больших объёмов данных в реальном времени.


Ссылки


Программы, используемые в статье

# Имя Тип Описание
1 Study.mq5 Советник Советник офлайн обучения моделей
2 StudyOnline.mq5 Советник Советник онлайн обучения моделей
3 Test.mq5 Советник Советник для тестирования модели
4 Trajectory.mqh Библиотека класса Структура описания состояния системы и архитектуры моделей
5 NeuroNet.mqh Библиотека класса Библиотека классов для создания нейронной сети
6 NeuroNet.cl Библиотека Библиотека кода OpenCL-программы
Прикрепленные файлы |
MQL5.zip (3134.66 KB)
Разработка инструментария для анализа движения цен (Часть 9): Внешние библиотеки Разработка инструментария для анализа движения цен (Часть 9): Внешние библиотеки
В статье рассматривается новое измерение анализа с использованием внешних библиотек, специально разработанных для расширенной аналитики. Эти библиотеки, такие как pandas, предоставляют мощные инструменты для обработки и интерпретации сложных данных, позволяя трейдерам получать более глубокое представление о динамике рынка. Интегрируя такие технологии, мы можем сократить разрыв между необработанными данными и практическими стратегиями. Здесь мы заложим основу для этого инновационного подхода и раскроем потенциал объединения технологий с опытом трейдинга.
Торговый инструментарий MQL5 (Часть 7): Расширение EX5-библиотеки для управления историей функциями последнего отмененного отложенного ордера Торговый инструментарий MQL5 (Часть 7): Расширение EX5-библиотеки для управления историей функциями последнего отмененного отложенного ордера
Мы завершаем создание последнего модуля в EX5-библиотеке для управления историей (History Manager), сосредоточившись на функциях, отвечающих за обработку последнего отмененного отложенного ордера. Это позволит эффективно извлекать и хранить ключевые данные, связанные с отмененными отложенными ордерами с помощью MQL5.
Скрытые марковские модели для прогнозирования волатильности с учетом тренда Скрытые марковские модели для прогнозирования волатильности с учетом тренда
Скрытые марковские модели (СММ) — это мощный статистический инструмент, позволяющий выявлять скрытые состояния рынка на основе анализа наблюдаемых ценовых движений. В трейдинге СММ позволяют улучшить прогнозирование волатильности и применяются при разработке трендовых стратегий, моделируя изменения рыночных режимов. В этой статье мы представим пошаговый процесс разработки стратегии следования за трендом, которая использует СММ в качестве фильтра для прогнозирования волатильности.
Прогнозирование условного распределения с помощью MLP Прогнозирование условного распределения с помощью MLP
В данной статье мы рассмотрим модель регрессии на базе MLP, которая прогнозирует не только условное математическое ожидание, но и условную дисперсию. Другими словами, мы будем учить нашу сеть предсказывать целое распределение будущих цен на основе входного вектора признаков. Но для этой цели нам придется написать свою собственную функцию потерь.