НС + индикаторы. Эксперимент. - страница 11

 
Figar0 >>:

Пора поднять веточку, все-таки она посвящена входам НС и новую тему заводить не стану...

Появилась пара совсем простых теоритических вопросов-раздумий.

*

Ать). Подавая в НС варианты входов, которые утрировано выглядят примерно так:

а) Open[0]-Open[1], Open[0]-Open[2], Open[0]-Open[3], Open[0]-Open[4],..., Open[0]-Open[N]

б) Open[0]-Open[1], Open[1]-Open[2], Open[2]-Open[3], Open[3]-Open[4],..., Open[N-1]-Open[N]

рассчитывал получить примерно одинаковый результат. Все-таки входы весьма тавтологичны. Ан нет, результаты далеко не всегда даже рядом лежат, как и на участке обучения так и вне его. Пробовал разные варианты сетей, разные нейросетевые пакеты, везде картина примерно одинакова... Почему? несовершенство механизма обучения? "Слабость" сети? Многого от нее хочу?

*

Два). Хочу услышать мнение опытных или считающих себя таковыми нейросетевиков, как далеко должны быть входы от цены в нащей прикладной задаче прогнозирования ценового ВР? Мои опыты показывают, что использование всяческих индикаторов, "производных N-го порядка" от цены, в лучшем случае, вообщем-то ничего не дает. Цена, максимум сглаживание, экстремумы, все остальное от опиум для НС.. Не считаете?

Ать) Информация "тавтологична" для Вас, для меня, для многиз других программирующих на мкл... Не пробовали взаимную корреляцию построить и посмотреть насколько коррелированы входы? Вне участка обучения, по личным опытам, отличие возникает только из за нестационарности подаваемого...

Два)По-поводу "как далеко должны быть входы от цены" - относительно, у меня наоборот, использование производных улучшает критерий... Лично я не считаю. Какие входы должны быть зависит от выхода(задачи), задача(выход) от того как Вы придумаете(грубо говоря).

 
Figar0 >>:

Ать). Подавая в НС варианты входов, которые утрировано выглядят примерно так:

а) Open[0]-Open[1], Open[0]-Open[2], Open[0]-Open[3], Open[0]-Open[4],..., Open[0]-Open[N]

б) Open[0]-Open[1], Open[1]-Open[2], Open[2]-Open[3], Open[3]-Open[4],..., Open[N-1]-Open[N]

рассчитывал получить примерно одинаковый результат. Все-таки входы весьма тавтологичны. Ан нет, результаты далеко не всегда даже рядом лежат, как и на участке обучения так и вне его. Пробовал разные варианты сетей, разные нейросетевые пакеты, везде картина примерно одинакова... Почему? несовершенство механизма обучения? "Слабость" сети? Многого от нее хочу?

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

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

Он практически не видит сначала разницу. Я не увидел. :)

До тех пор не видит разницы, пока не начнет понимать, какие цифры скрываются под знаками формул. Тут сразу становится понятным, в чем разница, Большая разница.


Вот скрин графика а),

Мы видим практически идеальную линию, начинающеюся от бесконечности до значения разницы между Open[0]-Open[1]:



Тепрерь взглянем на график б):



Разница, как говорится на лицо! Во втором случае значения нашей функции "скачут" возле 0, во вполне себе определенных границах.

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

Figar0 >>:
Два). Хочу услышать мнение опытных или считающих себя таковыми нейросетевиков, как далеко должны быть входы от цены в нащей прикладной задаче прогнозирования ценового ВР? Мои опыты показывают, что использование всяческих индикаторов, "производных N-го порядка" от цены, в лучшем случае, вообщем-то ничего не дает. Цена, максимум сглаживание, экстремумы, все остальное от опиум для НС.. Не считаете?

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

 
joo писал(а) >>

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

Вот скрин графика а),

Что-то мне подсказывает, что Вы не правильно графически интерпретировали формулу a).

Ваш график это что-то типа (вариант из):

f[0] = Open[0]-Open[1] Понятно.

f[1] = Open[0]-Open[2] Т.е. заглябываем в будущее?

Или подменяем Open[0] на текущее значение, т.е.

f[1] = Open[1]-Open[2] Т.е. формула б)

Или кхм

f[1] = Open[1]-Open[3] Но это не следует из контекста

Как я понял (по крайней мере именно это я имел ввиду при подобных "экпериментах" со входами), всё это массив из N-1 цифр в "точке 0", т.е. f[0][N-1]

в точке f[1][N-1] будет Open[1]-Open[2], Open[1]-Open[3], ...

Т.е. рисовать надо n-1-мерную плоскость.

То, что результаты разные - естественно. А вот какие входы "правильнее" (для одних и тех же выходов) сам пока не решил.

ЗЫ. Искал давно и в "черных ящиках".

 
SergNF >>:

Что-то мне подсказывает, что Вы не правильно графически интерпретировали формулу a).

А Вы зря советуетесь с этим "Что-то".

Сделайте индикатор и посмотрите.

SergNF >>:

То, что результаты разные - естественно. А вот какие входы "правильнее" (для одних и тех же выходов) сам пока не решил.

ЗЫ. Искал давно и в "черных ящиках".

Что значит результаты разные? Какие входы, такие и выходы! А какие из них "правильные", описал постом выше.

 
joo писал(а) >>

А Вы зря советуетесь с этим "Что-то".

Наверное Вы правы :)

Сделайте индикатор и посмотрите.

Верхний "график" входного вектора!!!!! DBuffer[i]=Close[i]-Close[i+DPeriod];

Нижний "график" входного вектора!!!!! DBuffer[i]=Close[i+DPeriod]-Close[i+DPeriod+1];


Дальше будет лингвистический разбор исходного поста и ... опять к вопросу о корректности формулировок в ТЗ. ;)

 
SergNF >>:

Наверное Вы правы :)

Верхний "график" входного вектора!!!!! DBuffer[i]=Close[i]-Close[i+DPeriod];

Нижний "график" входного вектора!!!!! DBuffer[i]=Close[i+DPeriod]-Close[i+DPeriod+1];


Дальше будет лингвистический разбор исходного поста и ... опять к вопросу о корректности формулировок в ТЗ. ;)

Ну да, значит не важецкое ТЗ получилось у вопрошающего, раз два человека по разному растолковали вопрос. :)

Надо подождать Figar0, что он скажет.

 
StatBars писал(а) >>

Какие входы должны быть зависит от выхода(задачи), задача(выход) от того как Вы придумаете(грубо говоря).

Какие могут быть выходы? Сигналы, работая по которым надеемся получить плавный рост эквити без просадок) Хотя задачу НС можно действительно поставить по разному....

joo писал(а) >>

Ну да, значит не важецкое ТЗ получилось у вопрошающего, раз два человека по разному растолковали вопрос. :)

Надо подождать Figar0, что он скажет.

Честно говоря не думал что могут возникнуть подобные разночтения... Издержки того, что варим НС в своих тесных мирках. SergNF правильно понял мое "ТЗ") Два входных вектора, где из одного запроста можно получить другой и при этом разные результаты на выходе. И кажется я начинаю понимать почему разные, завтра проведу пару экспериментов, и попробую оформить это понимание в буквы...

 
Figar0 >>:

Какие могут быть выходы? Сигналы, работая по которым надеемся получить плавный рост эквити без просадок) Хотя задачу НС можно действительно поставить по разному....

Сигналы по которым надеемся получить плавный рост - один из типов задач, а принципов построения может быть много, но многие всёравно будут очень похожи(хотя бы по корреляции). И выход имелся ввиду именно в таком контексте.

Что сами то думаете по этому поводу?

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

 
Figar0 писал(а) >>

И кажется я начинаю понимать почему разные, завтра проведу пару экспериментов, и попробую оформить это понимание в буквы...

Ну вроде сложилось определенное понимание, вывод:

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

Переварив этот вывод, погряз в изучении ГА.

StatBars писал(а) >>

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

Однозначно, зря... Сверять часы хоть иногда неплохо бы)

Начну с себя. На текущий момент сети готовлю исключительно на MQL, и обучаю их исключительно в тестере/оптимизаторе терминала. Впрочем, некоторые компоненты входов исследую в Statistic'e. Такой подход имеет и недостатки и определенные плюсы. Самый жирный плюс -обучение сети непосредственно в среде применения, и учить ее можно конечной цели - профиту. В качестве архитектуры экспериментальным путем остановился на MLP, с небольшим колличеством слоев: входящий, выходящий и один-два скрытых. Более чем достаточный апроксиматор ИМХО. Сейчас думаю как поуму добавит в MLP обратные связи. Колличество используемых входов ~ от 50 до 200, большее колличество усложнит архитектуру и обучение, да и сдается мне, - будет избыточным.

Может что-то из того что я описал странно, может нет, если что удивляться не стоит, я нейросетевик самоучка, к тому же ревностно охраняющий свой моск от излишков пыльной литературы)

 

Я использую MQL для предобработки данных, выгрузки их внужный формат, анализ результатов сети. Сети обучаю только в НШ2. Естественно есть и сети на МКЛ и С++, но с НШ2 лучше...

Сетки как правило не более обычной 3-х слойной(MLP), большее не требуется.

Кстати, на счёт входов, максимум подавал 128, некоторыми экспериментами выяснил, что больше чем 20-30 входов - это уже сильный избыток, и скорее всего удаление не значащих сильно улучшит критерий обучения. Если меньше 40 входов, то ещё вопрос может быть спорным, но более 40 входов это 100% переизбыток.

Критерий обучения стандартный в НШ2 - ско.

Обязательно использую тестовую выборку для того, чтобы избежать подгонку сети. Причём деление выборки последовательное - первая часть выборки допустим с 2005.01.01 - 2006.01.01 - обучающая выборка, тестовая - 2006.01.01 - 2006.04.01. Многие могут усомниться в том, что такой способ обучения избавляет от переобучения сети, но я уверен на 100% что именно это избавляет от переобучения, если у вас не избавляет, то проблема в другом, т.е. я очень не рекомендую менять разбиение выборки, точнее обучать именно так(с 2-я выборками). Рассудите сами для Вас что важнее?: Чтобы сначала сеть была стабильна, но нужно было бы дорабатывать её чтобы она стала ещё и достаточно прибыльной :) ИЛИ Сеть прибыльна, но хз когда она станет неприбыльной, т.е. сначала увидим прибыль, а потом разберёмся с стабильностью работы. Здесь стабильность работы я имел в виду не плавный рост эквити, а то что на разных форвард тестах сеть показывает разные результаты(сливает депо и наоборот увеличивает).

Лично для меня первое важнее, именно в этом напрвлении я развиваюсь. Сейчас добился определённых результатов, например: (я уже говорил это на форуме, но повторюсь) есть "генеральная выборка", обучаю сеть примерно на 20-30% от ген. выборки, сеть после обучения работает везде одинаково, на всей выборке, причём даты "генеральной выборки" с 2003-по текущее время.

С прибыльностью сетки, тоже уже приблизился очень близко к решению. Сеть распознаёт 84% примеров, а 87% минимальный порог при котором стабильный-плавный рост

эквити. Причём когда только начал решать эту задачу распознавание было на уровне 70%.

Причина обращения: