Нейро сети - страница 3

 
joo >>:

Смысл минимизации/максимизации целевой функции E(w1,w2) - поиск глобального экстремума. А если этих глобальных экстремумов - мульён, то какая нам разница, в какой из них свалится NN?!

Хуже, ели она застревает в одном из локальных минимумов/максимумов. Но это уже не проблема NN. Это проблема алгоритма оптимизации.


Описанное gpwr - никак.


Согласен что если все локальные минимумы идентичны по глубине и значит глобальны, то не имеет разницы в каком из них сеть окажется. Но для приведённого мною упрощённого варианта сети с шумным рядом, локальные минимумы существуют также на вершинах поверхности E(w1,w2). Поэтому нужна генетическая оптимизация или градиентный спуск с несколькими вариантами начальных значений чтобы оказаться в долине. Мой пример был предназначен для иллюстрации параллельного математического аппарата нейронных сетей, который приводит к большому количеству локальных минимумов и сложному (длительному) процессу обучения. Этот процесс обучения часто состоит из нескольких шагов использующих разные методы оптимизации: глобальные (genetic algorithm, differential evolution, particle swarm optimization, ant colony optimization) и локальные (gradient descent, conjugate gradient, Levenberg-Marquardt, BFGS), и занимает длительное время.

В основе математики нейронных сетей лежит теорема Колмогорова: любая непрерывная функция n переменных x[1]..x[n], может быть представлена в виде суммы 2n+1 суперпозиций непрерывных и монотонных отображениий единичных отрезков:


Любая непрерывная функция также может быть представлена в виде бесконечного ряда Тeйлора:


Степенной ряд являтся упрощённым вариантом ряда Тейлора:



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

Возьмём степенной ряд первого порядка:


(1) y = f(x[1]..x[n]) = a[0] + sum(a[i]*x[i], i=1..n)


Это нечто иное как линейная функция. Если y,x[1],..,x[n] это члены одного и того же ряда, то имеем линейную авторегрессионную (АР) модель. Однослойная нейронная сеть тоже описывается этой же моделью (1).

Теперь возьмём степенной ряд второго порядка:


(2) y = f(x[1]..x[n]) = a[0] + sum(a[i]*x[i], i=1..n) + sum(b[i,j]*x[i]*x[j], i=1..n,j=1..n)


и так далее. Неизвестными параметрами модели на основе степенного ряда являются коэффициенты a[i],b[i,j],.., которые являются частными производными функции f(x[1]..x[n]) по каждому входу x[i]. Причём выход модели являтся линейной функцией этих коеффициентов в то время как этот же выход является нелинейной функцией входов x[1]..x[n]. Нахождение коэффициентов модели a[i],b[i,j],.., производится путём минимизации суммы квадратов ошибок как и в случае обучения нейронной сети:


Е(a[i],b[i,j],..) = sum( (t[k]-y[k])^2, k=1..p)


Но в случае нейронной сети, у нас получается нелинейный метод наименьших квадратов, а в случае степенного ряда получаем линейный метод наименьших квадратов, который решается довольно просто: находим производные Е(a[i],b[i,j],..) по каждому коэффициенту a[i],b[i,j],.. и приравниваем их нулю. Получаем линейную симметричную систему уравнений с неизвестными a[i],b[i,j],.., которая решается методом Чолеского.

Преимущества метода степенного ряда по сравнению с методом Колмогорова (нейронной сети) являются:

1. Намного проще и быстрее обучение модели: всего одна итерация. Обучение нейронных сетей проводится в 1000-100000 итераций комбинацией разных методов оптимизации.

2. Результат обучения степенного ряда однозначен, т.е. всего один минимум, который и локальный и глобальный. Последовательное обучение нейронной сети приводит к разным локальным минимумам, а значит разным значениям весов и разным моделям одного и того же процесса (временного ряда)

Внизу показана поверхность Е(a,b) для степенного ряда y = a*x + b*x^2 с "шумными" обучающими данными t[k] = cos(x[k]) + rnd:


Заметьте что в отличии от нейронной сети здесь существует только один минимум.

Недостатком нелинейной модели на основе степенного ряда является быстрый рост количества её коеффициентов с ростом порядка степенного ряда. Допустим, n - количество входов (x[1]..x[n]). Количество коэффициентов nc определятся по формулам:

порядок = 1, nc = n+1

порядок = 2, nc = (n+1)*(n+2)/2

порядок = 3, nc = (n+1)*(n+2)*(n+3)/6

порядок = 4, nc = (n+1)*(n+2)*(n+3)*(n+4)/24

...

Например, модель 3-го порядка процесса с 12-ю входами имеет 455 коэффициента. Их скорость нахождения всё равно превышает скорость обучения нейронной сети с меньшим количеством весов. Проблема тут не в замедлении обучения степенного ряда, а в нахождении достаточного количества обучающих наборов x[1..n][k],t[k], которое должно превышать количество кояффициентов модели во избежание её вырождения. На практике, степенной ряд 2-го или 3-го порядка даёт удовлетворительные результаты.

 
gpwr >>:

Я ещё новичёк в сетках поэтому авторитетно говорить не могу,

но помойму все энтузиасты сеток на форуме пытаются сделать ничто иное как линейный решатель(систему линейных уравнений),

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


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

Но решая таким образом вы не ответите на вопрос :

а вот эти вновь поступившие данные которые не имею корней в данной системе это BUY или SELL.

Потому что нет функции определяющей модель.


попробуйте обучить сетку на закрашеную область.

ТЕ обучить так чтоб при поступлении на вход координат из этой области сетка выдавала 1, а на координаты из незакрашенной области 0.

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

истина если больше d или истина если меньше d (d соответственно порог). (если в чём не прав не судите строго)

 
gpwr >>:

После тщательного изучения нейронных сетей и использования разных алгортимов обучения, начиная от градиентного спуска и кончая генетикой, я пришёл к выводу что математический аппарат нейронных сетей неидеален.

Не обязательно иметь в руках идеал. Это все перекликается с вопросом о том, какой процент движения можно позволить себе пропустить с целью повышения достоверности входа на рынок. В идеале хотелось бы брать 100%, прямо по зигзагу ;-). На практике для многих будет грааль, если взять хотя бы 50% по каждому ребру.

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

 
gpwr писал(а) >>

У вас есть сеть приносящяя стабильный профит?

А что по вашему озачает "стабильный профит"?

 
marketeer >>:

Не обязательно иметь в руках идеал. Это все перекликается с вопросом о том, какой процент движения можно позволить себе пропустить с целью повышения достоверности входа на рынок. В идеале хотелось бы брать 100%, прямо по зигзагу ;-). На практике для многих будет грааль, если взять хотя бы 50% по каждому ребру.

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


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

Насчёт комитета сетей у меня свое мнение: бесполезно всё это. Вот всем кто верит в комитеты сетей такой вопрос. Допустим одна сеть даёт правильные сигналы в 60% случаев. Другая сеть даёт правильные сигналы тоже в 60% случаев. Теперь давайте обьеденим эти две сети и посчитаем правильные сигналы, выбранные обоими сетями одновременно. То есть, если обе сети указывают "buy" или "sell", то выдаётся соответствующий сигнал "buy" или "sell". Если одна сеть выдаёт "buy", а другая "sell", то сигнал не выдаётся. Какова вероятность что эти сигналы правильны?

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

 
gpwr писал(а) >>

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

Насчёт комитета сетей у меня свое мнение: бесполезно всё это. Вот всем кто верит в комитеты сетей такой вопрос. Допустим одна сеть даёт правильные сигналы в 60% случаев. Другая сеть даёт правильные сигналы тоже в 60% случаев. Теперь давайте обьеденим эти две сети и посчитаем правильные сигналы, выбранные обоими сетями одновременно. То есть, если обе сети указывают "buy" или "sell", то выдаётся соответствующий сигнал "buy" или "sell". Если одна сеть выдаёт "buy", а другая "sell", то сигнал не выдаётся. Какова вероятность что эти сигналы правильны?

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

Пример не очень хороший...

Способов построения алгоритмических композиций(комитетов) много. Вы предлагаете Голосование, из своего опыта могу сказать далеко не самый лучший способ, простое взвешивание, зачастую, лучше.

Если простое взвешивание не помогает, то значит функция ошибки у всех базовых алгоритмов одинаковая -> ошибка систематическая. автокорреляция(ФункОш[i]||ФункОш[i+1]) как правило значимая > 0.8. А корреляция функций ошибок базовых алгоритмов вобще к 1 стремится, а за счёт чего тогда спрашивается должно быть улучшение? Комитеты строят полагая что базовые алгоритмы друг друга скомпенсируют, для того чтобы была хоть какая-то польза нужно чтобы корреляции между фун-ми ошибки не было.

И не будем забывать об AdaBoost'е - он реально работает, но там свои подводные камни.

 
gpwr >>:

Вероятно, Вы забыли, как впрочем забывают большинство нейрописателей на этом форуме, судя по оставленным коментам, о обучении без учителя. Зачем, если использовать в торговле NN, то обязательно надо NN учить чему то? Мы сами себя то адекватно учить торговать не в состоянии. Говоря о комитете сетей, подразумеваете то, что каждая NN обучена независимо друг от друга? И почему они дают сигналы отдельно друг от друга? При построении NN, и тем более комитета NN, единственным правильным решением будет "обучение без учителя". В головном мозге несколько отделов головного мозга, и больше десятка подотделов. Каждый из них выполняет свою функцию, обрабатывая внешнюю к ним информацию. А решение обладатель этого "комитета" принимает одно. Как так получается? Это возможно благодаря тому, что комитет сетей должен функционировать в звязке друг с другом - в комплексе, иначе ничего не получится, произойдет "раздвоение личности".

 
StatBars >>:

чуть чуть меня опередил :)

 
gpwr >>:

Насчёт комитета сетей у меня свое мнение: бесполезно всё это. Вот всем кто верит в комитеты сетей такой вопрос. Допустим одна сеть даёт правильные сигналы в 60% случаев. Другая сеть даёт правильные сигналы тоже в 60% случаев. Теперь давайте обьеденим эти две сети и посчитаем правильные сигналы, выбранные обоими сетями одновременно. То есть, если обе сети указывают "buy" или "sell", то выдаётся соответствующий сигнал "buy" или "sell". Если одна сеть выдаёт "buy", а другая "sell", то сигнал не выдаётся. Какова вероятность что эти сигналы правильны?

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

вероятность правильного сигнала (0.6*0.6)/(0.6*0.6+0.4*0.4)=69,23%, это в теории)

пример со сборищем ученых некорректен. от вероятности переход к среднему.

окромя статистики есть и другие забавные разделы математики :)

 
gpwr писал(а) >> Это везде написано что сеть нужно обучать до тех пор пока ошибка на тестируемой выборке не перестанет уменьшаться.

На самом деле всё гораздо сложнее. Когда вы её обучите до минимальной ошибки на тестируемой выборке, скорее всего вы получите переобученную сеть......

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