Рыночный этикет или правила хорошего тона на минном поле - страница 25

 
registred писал(а) >>

Господа, расскажите, как боретесь с залетаниями в не глубокие локальные минимумы и с кривыми начальными весами. Я так понимаю, в начале они никак не отражаются на обучении, но в последствии они начинают влиять очень сильно на его результат.

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

paralocus писал(а) >>

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

Alert: W2 [0] = -0.0414 W2 [1] = 0.0188 W2 [2] = -0.0539

Alert: W1[1,0]=-27.0731 W1[1,1]=-30.2069 W1[1,2]=37.6292 W1[1,3]=30.4359 W1[1,4]=-22.7556 W1[1,5]=-37.5899

Тут тебе придётся самостоятельно подумать. Я прогнозирую исключительно знаки ожидаемых приращений цены (+/-1). Связано это и со спецификой торговли (см. Основное Уравненрие Торговли несколькими постами выше) и с тем, что попытка одновременно прогнозировать амплитуду и знак, катастрофически усложняет задачу (растёт архитектура НС и число эпох обучения). Тут никаких мощностей домашней РС может не хватить, даже если не переобучать Сетку на каждом шаге! Так вот, традиционно, при прогнозировании абсолютных значений ВР, контролируют ошибку обучения на каждой эпохе, пока она не станет меньше некоторой. Этот процесс может и не сойтись - Сетка зависнет в бесконечном цикле и нужны механизмы вывода её из коматозного состояния. Когда я экспериментировал с этим, я контролировал скорость уменьшения ошибки обучения и при выполнении условия - рандормировал все веса, т.е. практически начинал обучение заново. При этом приходилось выяснять примерное число эпох, необходимых для обучения и вес каждой эпохи (коэффициент перед коррекцией каждого веса) уменшал по закону 1-j/N. где j пробегает значения от 1 до N. После того, как я отказался от прогноза вмплитуды, сеть стала обучаться быстро и эффективно, так что стало возможным ввести фиксированное число эпох обучения без мониторинга ошибки обучения.

И ещё, переходя от прогноза к прогнозу, я для уменьшения числа эпох, сохранял значения весов Сети без их рандомирования. При этом иногда наблюдался эффект "залипания" некоторых весов, проявлявшийся в их бесконечном увеличении или стремлении к нулю. Боролся я с этим так: при новом прогнозе я на все веса воздействовал как оператором - th(). Помогало эффективно.

 
Neutron >>:
... фиксированное число эпох обучения без мониторинга ошибки обучения.

Вопрос решен!

 

to Neutron

Сейчас переписываю всю свою двухслойку в более компактный вид. Хочу все свести к матричным операциям двух-трех функций. Как закончу - выложу.

Заодно "вырежу" прогноз амплитуды. В самом деле - знака более чем достаточно.

 
Neutron >>:

Тут тебе придётся самостоятельно подумать.

Ты имел ввиду подумать над тем, как перейти от расчета ошибки по амплитуде к расчету ошибки по знаку?

То есть тут?

d_2_out = test - out;                                             // Ошибка на выходе сетки
 

Нет. Я в общем говорил. Очевидно, что ты пойдёшь своей дорогой...

 

Есть пара вопросов, которые, во избежание излишнего ажиотажа здесь, я хотел бы задать через личку.

Знаю, что ты не любитель...

Разрешишь?

 
Спрашиваешь!
 
Neutron >>:
Спрашиваешь!

Тоды загляни в личку на досуге -:)

 
Ответил.
 
Neutron >>:

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

Не совсем понял, что значит "переобучаю на кажлом шаге"?

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