Нейропрогноз: как избежать эффекта перетренированности нейросети?

Sep 20, 2018 14:35

Эффект перетренировки является наиболее типичной проблемой при создании моделей на основе нейронных сетей. Эта проблема возникает, когда вы загрузили слишком много "входов" или инпутов для нейронной сети и у вас при этом недостаточно ценовой истории (слишком малый период котировок; маловато баров для анализа).

Вот пример: вы загрузили ценовую историю DJIA с 1885 по 2011 год. Это около 35 тыс. ценовых баров, мы можем создать нейронную сеть, содержащую 10 тыс. входов. Возникает вопрос: "хорошая ли это модель?".

Соотношение между количеством ценовых баров и количеством входов в нашей нейронной сети составляет 2.8 (35 000 ценовых баров делим на 10 0000 входов). Это значение слишком низкое, т.е. у нас слишком много входов, и этот факт может вызвать чрезмерный тренировочный эффект. Что такое перетренировка сети, как она выглядит в рабочем процессе? Этот эффект работает следующим образом: нейронная сеть обеспечивает отличную корреляция с данными до LBC, в то время как после LBC ее прогноз совершенно провальный.

Вот типичная картинка перетренированности сети:



Математически этот факт вполне очевиден: у нас слишком много событий на входе; мы перекормили этими событиями нейросеть. Их чрезмерное многообразие позволяет описать любое движение фондового рынка в прошлом, и она попросту не смогла разобраться, как бы захлебнулась в этом разнообразии. Однако, когда мы пытаемся предсказать будущее движение рынка, нам нужно иметь дело реальными с входными данными, которые на самом деле связаны с прогнозом по финансовому рынку. Другими словами, если мы хотим что-то объяснить в прошлом - мы можем использовать что угодно, тут сойдет любой фактор, который попался по руку; но если мы действительно заинтересованы в прогнозировании, мы должны очень строго оценивать загружаемые в нейросеть факторы, т. е. мы выбираем только самые важные события; только те из них, которые реально имеют отношении к событию. Не следует поступать по принципу "загружу-ка я в нейросеть вот это, и вот это, и вот это - пусть нейросеть сама разбирается, что работает, а что нет".

Специалисты нейросети называют этот эффект перетренировки как GIGO ("Garbage in, garbage out"; "Мусор (вошел) внутрь, мусор (вышел) наружу").

Как распознать перетренировку? Если у вас отличная корреляция, под 100%, на данных до LBC - это, скорее, повод для тревоги, чем радости; очень вероятно, что вы просто перекормили нейросеть, отсюда и "выдающиеся" результаты.

Вот наши рекомендации, как избежать GIGO:

1) Держите соотношение между количеством ценовых баров и количеством входов примерно 10 к 1. Т.е. если у нас есть 35 000 ценовых баров, сумма факторов, что вы подаете на вход нейросети, не должна превышать 3 500. При этом это соотношение разнится, оно зависит от глубины котировок. Например, для 1000-2000 баров ценовой истории можно использовать 300-600 входов (здесь не так все строго), т. е. здесь используем соотношение 3:1 для баров/входов; однако для более объемных ценовых исторических данных используйте соотношение 10:1 и даже 20:1.

2) Анализируйте, делайте фильтрацию событий. Надо самому понимать, хотя бы в первом приближении, что может сработать, а что нет.

3) Не нужно увлекаться обучением нейросети, оставлять компьютер на ночь - "пусть обучает", здесь стоит обойтись без фанатизма. 10 000 - 20 000 шагов тренировки будет вполне достаточно для нейросети.

Где увидеть, сколько у меня баров загружено и сколько факторов загружается в нейросеть?

Количество факторов, что вы загружаете в неросетевую модель, указано вот здесь:



Количество же загруженных баров котировок указано вот здесь - до LBC (train) и после (test); вам нужно смотреть на первую цифру, с ней работает нейросеть во время обучения.



Оригинал статьи Сергея Тарасова смотрите здесь

[модуль Neural Net], [статьи Сергея Тарасова], [Новым юзерам Timing Solition], [Пример создания модели], [Нейросетевой анализ в Timing Solution]

Previous post Next post
Up