Pull to refresh

Мой опыт работы с SOINN

Reading time 3 min
Views 12K
Для тех, кто не знаком с SOINN, скажу, что это относительно новой вид нейронных сетей, называемых Self Organizing Incremental Neural Network — самоорганизующиеся, растущие нейронные сети.

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

Дух захватывало от самой возможности использования ИИ в торговле.
Я перечитал все, что смог найти по нейронным сетям, затем установил пакет NeuroSolution, а заодно и TraidingSolution, и стал уже выбирать виллу на лазурном берегу…
Однако, все оказалось не так просто и быстро, как я себе это представлял. Во первых, я столкнулся с проблемой представления данных для сети. Дело даже не в том, как их масштабировать, а в том, какие именно данные представлять сети, что бы она на их основе смогла найти интересующие меня моменты на графике изменения цены.
По большому счету, это является первой и самой важной задачей, которую необходимо решить перед использованием любой сети. В противном случае мы столкнемся с классической ситуацией — «мусор на входе — мусор на выходе».

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

И тут мне попалась статья японских/китайских ученых про SOINN. Более того, в статье было указано, что на сайте лаборатории Hasegawa выложен код примера реализации однослойной SOINN на C++. Я кинулся на этот сайт, но к тому времени пример был уже убран оттуда.
Но хвала Рунету! На сайте по робототехнике один наш энтузиаст выложил и убранный пример SOINN от Hasegawa, да еще и его собственный пример использования.

Мне очень понравилась сама идея саморазвивающейся сети, не «глупеющей» по мере получения новых знаний. Я взял за основу выложенную библиотеку и написал свою реализацию SOINN, «заточенную» под мои задачи.
Первые испытания обнадежили. Я использовал метод обучение сети «с учителем». Сеть очень быстро (по сравнению с классическими сетями) училась и находила интересующие меня паттерны в исходных данных.

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

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

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

Не могу не отметить полезность и полноту статьи о SOINN от zkolenko. Найдя ее раньше, я бы сэкономил массу времени на изучение SOINN и всего, что с ней связано.
Tags:
Hubs:
+1
Comments 2
Comments Comments 2

Articles