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

 
paralocus писал(а) >>

Привет, Neurton! Вобщем, с двухслойкой пока не получается.

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

Т.е. мои результаты таковы: 8 эпох - сетка не учится, 12 эпох - сетка учится, 13 эпох - сетка не учится.

Короче результатами похвастать пока не могу.

На всякий случай распишу алгоритм, который у меня реализован. Посмотри, может я что-то упустил.

1. В перцептроне D бинарных входов, один из которых постоянный +1.

2. Используемый ВР - последовательные приращения котира по ряду Open.

3. До начала работы все веса инициализируются небольшими случайными величинами из диапазона +/-1.

4. Длинна обучающего вектора расчитывается как P = 4 * D*D /D = 4*D.

5. Обучающий вектор подается на вход сетки и вычисляется ошибка сети как Qs = Test - OUT, где Test - значение ВР на n+1, т.е. следующем, отсчете, OUT - выход сетки на n отсчете.

6. Для получения значения ошибки на входах Q ошибка сетки Qs умножается на производную сжимающей функции (1 - OUT+OUT): Q = Qs *(1 - OUT*OUT) .

7. Расчитывается и накапливается в течении всей эпохи вектор коррекции для каждого веса, входящего в нейрон COR[i] += Q*D[i]

8. Отдельно расчитывается и накапливается в течении всей эпохи квадрат ветора коррекции для каждого веса, входящего в нейрон SQR[i] += COR[i]*COR[i]

9. По окончании эпохи, для каждого веса вычисляется персональная коррекция и добавляется к этому весу W[i] += COR[i]/SQR[i]

Пробовал использовать коэффициент (1 - j/N), а так же рандомировать веса, абсолютные значения которых выросли свыше 20. Рандомирование помогает лучше.

P.S поправил ошибку в тексте

paralocus, засунь своей девушке на вход Это:

Вместо цен открытия. И выложи результат. Если не обучится, значит ошибка катастрофична и нужно серьёзно выискиваться.

P.S. Ты на норму вектора делишь или на квадрат? Нужно на норму, но то, что ты написал похоже на сумму квадратов без извлечения корня.

 

Спасибо, пробую.

Вот результаты девушки по AUDUSD, H4, D = 13, 33 эпохи. Тестирование проводилось на участке истории с 2009.01.08 по 2009.05.21

Есть еще несколько точек(количество эпох: 31, 25, 14, 10, 7), полученных с помощью оптимизатора, но по ним результаты работы хуже.





P.S. Точно! Корень - то... квадратный... я и забыл извлечь!

 
paralocus писал(а) >>

P.S. Точно! Корень - то... квадратный... я и забыл извлечь!

Прям как в том анекдоте про Чапаева! :-)

 
Neutron >>:

Прям как в том анекдоте про Чапаева! :-)

-:) ... Плачет, но шашку точит...

 

Не, там Петька все кусты повыдёргивал во дворе - попросили найти квадратный корень:-)

Вот, смотри. Это двуслойная Нс-ка с двумя входами и 8-ю обучающими эпохами на каждом отсчёте. Всего 500 отсчётов и вероятность правильного предсказания высчитывается как среднее по 10 независимым экспериментам (для статзначимости результата):

Красным показан результат на обучающей выборке, синим - на тестовой. Видно, что результаты отличаются не сильно и это есть благо, поскольку говорит о не переобученности сети. Часто ошибка заключается в том, что глядя только на результат обучения НС, выбирают слишком короткий обучающий вектор (меньше оптимальной длины) и добиваютя почти 100% попаданий на обучающей выборки. При этом, не смотрят на результаты предсказаний на выборке не принимавшей участия в обучении! А тут полный пипец, как правило результат около нуля. Это и есть переобучение, сетка просто выучила наизусть урок и не способна сама сочинять стихи. Потом удивляются, отчего происходит слив.

 

Ура!!!

Только что мой депозит перевалил 1К !

Neutron, а входы бинарными отавлять для сетки обучающейся по твоей формуле тестовой выборки?

 

Я разбиваю ВР построенный по этой формуле на отрезки одинакового приращения цены H и беру первую разность. Полученные приращения округляю до +/-1 пытаюсь предсказать. Нп рис. по оси абсцис отложен торговый горизонт Н в пунктах, по оси ординат - вероятность. Так что, входы бинарные.

 

Я так и понял. Чтобы посмотреть на эту формулу глазами вывел её на график как индюк. Засунул все это хозяйство на вход сетки, а вот как увидеть результаты - ума не приложу.

Т.е. посредством тестера - не получится. Можно только веса распечатывать и смотреть - как там она... жива аль нет.

Нет, все же чуть не так. Я не разбивал полученный ВР на отрезки одинакового приращения, а брал последовательные приращения ВР на D отсчетах.

 
paralocus писал(а) >>

Я так и понял. Чтобы посмотреть на эту формулу глазами вывел её на график как индюк. Засунул все это хозяйство на вход сетки, а вот как увидеть результаты - ума не приложу.

Т.е. посредством тестера - не получится. Можно только веса распечатывать и смотреть - как там она... жива аль нет.

Нет, все же чуть не так. Я не разбивал полученный ВР на отрезки одинакового приращения, а брал последовательные приращения ВР на D отсчетах.

Может веса вывести на экран через Comment()?

 
FION >>:

Может веса вывести на экран через Comment()?

Можно, но это не удобно, т.к. каждый последующий вызов Comment() будет "забивать" результаты предыдущего вывода, поскольку будет производится по тем же графическим координатам, что и предыдущий. Поэтому лучше Print();

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