Искусственные нейронные сети (ИНС) — это вычислительные системы, вдохновленные биологическими нейронными сетями, составляющими мозг животных.
Искусственная нейронная сеть позволяет моделировать нелинейную функцию с некоторыми входными и выходными данными.
Нейронная сеть имеет:
· Входной слой, которому передаются входные параметры, связанные с состоянием каждого нейрона входного слоя. Например, для финансового аналитика это могут быть различные индикаторы — макроэкономические, фундаментальные, технические.
· Выходной слой, в котором вычисляются выходные параметры, связанные с состоянием каждого нейрона выходного слоя. Это информация, которую мы хотели бы предсказать. Например, это может быть будущая доходность рынка в %, волатильность, ликвидность и т.д.
Нейронная сеть работает с числами, поэтому любая входная и желаемая выходная информация должна быть оцифрована. Например, если это текст (новость), то нужно представить этот текст в виде массива чисел. Или, если мы пытаемся предсказать, куда пойдет рынок, вверх или вниз, то мы можем закодировать «вниз» нулем, а «вверх» единицей.
Если нейронная сеть имеет дополнительные слои между входным и выходным слоями, то они называются скрытыми слоями, а обучение такой сети называется глубоким обучением. Дополнительные скрытые слои могут помочь нейронной сети идентифицировать более сложные закономерности между входными и желаемыми выходными данными.
Каждый слой связан с соседними слоями с помощью весов и коэффициентов смещения. Переход информации с предыдущего слоя на следующий осуществляется по следующему правилу: z = Act(Wy + b), где y — вектор данных на предыдущем слое, z — вектор данных на следующем слое, W — весовая матрица перехода с предыдущего слоя на следующий, b — вектор коэффициентов смещения. Act – это некоторая функция активации, необходимая для устранения линейности. Есть много функций активации. Например, это может быть сигмовидная функция:
Контролируемое обучение нейронной сети означает, что для заданного набора ранее известных входных и выходных данных (данные для обучения) необходимо подобрать оптимальные коэффициенты W и b так, чтобы квадрат ошибки между точным выходом значение и выходное значение, полученное путем распространения входных значений через нейронную сеть, стремится к минимуму:
Например, вы хотите научить нейронную сеть прогнозировать будущее процентное изменение цены акции на основе прошлой динамики цены этой акции и динамики индикатора Simple Moving Average (SMA) и индикатора Relative Strength Index (RSI). . Генерируем данные для обучения — на каждый исторический момент времени берем данные по индикаторам и курсам акций. Это будут входные данные X для нейронной сети. И для каждого исторического момента времени берем будущее изменение цены акции (мы его знаем точно, так как говорим об исторических данных). Это будут выходные данные Y для нейронной сети, которую мы хотим обучить прогнозировать. Для этих данных X и Y будут выбраны оптимальные коэффициенты W и b.
Поиск оптимальных коэффициентов W и b осуществляется методом градиентного спуска с использованием метода обратного распространения ошибок:
Где градиент функционала E выражается следующим образом для W:
И аналогично для б:
Хочу привести такую аналогию обучения нейросети для трейдеров. Надеюсь, вам будет более понятно, если вы не разбираетесь в математическом аппарате. Представьте, что вы придумали торговую стратегию, которая имеет очень и очень много параметров. Конечно, хотелось бы подобрать для стратегии наиболее оптимальные параметры (как коэффициенты W и b в случае нейронной сети). Что значит оптимально? Так, чтобы максимизировать прибыль или минимизировать просадку или максимизировать коэффициент Шарпа — в зависимости от того, какой критерий вы выберете. Далее вы начинаете повторять эти параметры (тренировать, в случае нейросети). Параметры можно перебирать с помощью «грубой силы» — т.е. перебирать все возможные комбинации параметров. Но если таких параметров много, то вам просто не хватает вычислительной мощности вашей машины и поиск оптимального займет много времени. Поэтому было разработано множество алгоритмов оптимизации. Например, метод градиентного спуска и его вариации или генетический алгоритм для поиска оптимальных параметров быстрее, жертвуя точностью.
Нейросеть может иметь те же проблемы, что и при оптимизации торговых стратегий. Основным из них является переобучение. Когда все работает очень хорошо на прошлых данных и плохо работает на данных вне выборки. О том, как минимизировать риск переобучения и правильно тестировать стратегии, думаю, мы поговорим в следующей статье.
Вычислительный эксперимент
В качестве примера я создал полносвязную нейронную сеть из входного, выходного и двух скрытых слоев. Во входном слое я сгенерировал 45 нейронов — туда мы будем передавать ежедневные изменения цен S&P 500 за последние 15 дней, значение индикатора SMA за последние 15 дней и значение RSI показатель за последние 15 дней. Выходной слой состоит из 1 нейрона и будет хранить предсказанное процентное изменение S&P 500 на следующий день. Скрытые слои содержат 512 нейронов. Мы будем обучать нейронную сеть на данных с октября 2019 г. по июнь 2019 г. и проверять точность на данных с июля 2019 г. по сентябрь 2019 г.
Я получил следующие результаты. На приведенном ниже графике показана дневная доходность S&P 500 с октября 2019 года по июнь 2019 года (данные обучения) — синяя кривая. Если кривая выше нуля, значит, S&P 500 вырос в этот день. Если кривая ниже нуля, S&P 500 снизился.
Я также применил оранжевую кривую к синей. Это предсказанная нейронной сетью рыночная доходность. Это прогнозируемая нейросетью доходность рынка по прошлой динамике S&P 500, SMA и RSI за последние 15 дней для каждого исторического момента.Точность прогноза (рост S&P 500 на следующий день или снижение ) составляет 93%. Но это обучающие данные. На тестовых данных с июля 2019 года по сентябрь 2019 года результаты были гораздо скромнее:
Точность прогноза составляет всего 49%. Нейронная сеть явно переобучена. Но, учитывая простоту модели, вряд ли можно было ожидать более приемлемого результата.
ЗАКЛЮЧЕНИЕ:
1. Искусственная нейронная сеть — это «черный ящик», который можно научить выдавать нужный нам результат (например, прогноз чего-либо) в соответствии с заданными входными данными.
2. С точки зрения трейдинга на вход нейросети можно передавать различные показатели: макроэкономические, фундаментальные и технические, и обучать ее прогнозировать будущую доходность рынка, волатильность, ликвидность, конъюнктуру и т.д.
3. Нейронную сеть, как и любую алгоритмическую торговую стратегию, можно переобучить. Это следует контролировать, по крайней мере, путем разделения данных на обучающие и тестовые данные.