НейроГалактика

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » НейроГалактика » Для начинающих » На грани с философией


На грани с философией

Сообщений 1 страница 12 из 12

1

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

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

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

И уже точно, надо забыть о том, что нейросети могут делать какие-то умозаключения (даже на самом примитивном уровне). Нейросеть просто становится такой, чтобы давать как можно более правильные ответы. Какой там поиск закономерностей? Какие там сопоставления?? Единственный критерий - это стала ли ошибка меньше - и все.

Но отсюда возникает другой вопрос: на сколько же тогда нейросеть "тупая"?? Т.е. что ей надо говорить формально (в виде подаваемых на входы/выходы сигналов), а что она все-таки сама поймет??

Вот, в частности, я попробовал поступить так: вместо того, чтобы подавать на входы нейросети приращения со знаком (например, приращения скользящей средней той же), - т.е. +10 - это значит, данный параметр вырос на 10 пунктов, а -10 - это - упал... так вот, вместо этого я попробовал подавать на входы отдельно модуль этого приращения (10) и отдельно - знак: -1 или 1 или 0 (если не было изменений)....

Получилось плохо! Во-первых, нейросеть стала иметь больше входов, а следовательно, медленнее учиться (у меня на моем будненьком буке это чувствуется особенно остро). Во-вторых, если модуль приращения она предсказывать стала намного лучше, то сторону (растет/падает) она стала предсказывать намного хуже!

Не говоря уже о том, что бокскаунтинг показывал, что для выхода, который предсказывает приращение ни один из входов, отражающих знак этого приращения вообще нафиг не нужен!!! А с другой стороны - для выхода, который отражает знак не важно, каким был модуль приращения!!!

И это - тоже очень плохо! Ведь, простая логика подсказывает, что тренды на форексе имеют некоторую "инерцию" (т.е. они не могут меняться мгновенно)... отсюда человеку легко напрашивается вывод: что если приращение последнее было большим (по сравнению с остальными приращениями) - то вряд ли в следующем ходе будет наблюдаться смена знака, а вот если оно было маленьким - то смена знака вполне возможна! (или переход во флэт = 0).

С другой стороны! есть и хорошие результаты от формализации данных (т.е. от разбиения данных на составляющие): когда я стал подавать на входы отдельно приращения: 10, 11, 13, 16, 19, 35, 24, 22, 15, 9, 7, ... и т.д., а отдельно - среднюю скорость этих приращений, - сеть стала лучше прогнозировать. Т.е., напрашивается вывод, что в некоторых случаях сети надо давать данные по "квантам" (т.е. минимальные порции информации), а в некоторых - нет.

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

Ну, результаты этого эксперимента - будут опубликованы в скором времени (в теме "Эксперимент 2").

Но, в то же время, если ты разделяешь модуль приращения и его знак, то это приводит к плачевным последствиям.... :(

Так, все-таки... насколько же "тупа" нейросеть? какие "выводы" она может сделать из выборки, а какие нет??

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

0

2

На самом деле тема оч. интересная. Действительно, что же делают эти таинственные НС? Сейчас я открою страшную тайну: никто не знает. Шутка. Реально степень понимания того, что делает КОНКРЕТНАЯ сеть, зависит от степени её сложности. Ну это тема отдельная – извлечение правил из НС. Пока для нас это неактуально. Вот когда будет у нас сетка, края стабильно будет правильно классифицировать знак будущего приращения цены, скажем, в 70% случаев, действительно станет интересно, на какие же критерии она опирается при этом…

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

Отредактировано beholder22 (2006-09-21 17:24:37)

0

3

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

Чем больше этих базисов (нейронов в скрытых слоях) тем лучшая аппроксимация достигается. Если зависимость известна априорно, заранее, то можно сразу прикинуть сколько нейронов надо для ее аппроксимации. На каждый «холм» в целевой функции примерно требуется по 2 нейрона.

На втором рисунке показано как неудачно пытается аппрокстмировать туже зависимость перцептрон с 1 скрытым нейроном.

Отредактировано beholder22 (2006-09-21 17:27:05)

0

4

Это абстрактный пример, поскольку целевая функция нами самими задана. На практике же эта функция как правило неизвестна (если б её знали и обучать бы ничего не надо было [знал бы прикуп - жил бы в Сочи :)], а если бы знали хотя бы какие-то ее параметры, то это знач. облегчило бы обучение). Поэтому НС реально интерполирует промежутки между известными точками входа и выхода, стараясь достичь минимальной ошибки. На самом деле наиболее очевидный метод прогноза это метод ближайших соседей. Напр., допустим, что для прогноза знака будущего приращения достаточно знать 3 предыдущих значения, и мы имеем наблюдение в базе данных +10 -20 +30 ---> ВВЕРХ. Мы следим за курсом котировок и встречаем точно такой же ряд +10 -20 +30. Как считаешь какой прогноз надо давать. Правильно, ВВЕРХ. Исходя из имеющихся данных это очевидное решение. НС всегда находит очевидное решение, т.е. самое тривиальное.
Вернемся к первому рисунку. Если мы знаем форму зависимости и размерность этой зависимости меньше трёх, т.е. ее можно визуализировать, то нам вообще нафиг не нужны ни НС, ни любые др. методы. Помнишь как в школе: пальчиком тыкаем в ось Х, ведём перпендикуляр вверх, доходим до линии функции, ведём перпендикуляр влево – на ось Y. Всё - мы нашли выход по входу. И не надо нам ни формул, ни сетей. Собственно сети и математика нам требуются только потому, что мы не можем визуально себе представить зависимость, скажем в 9-мерном пространстве. Т.о. сетка всего лишь интерполирует имеющиеся точки данных. В общем случае это будет какая-нибудь закрученная гиперплоскость в n-мерном пространстве. Давать прогноз новых значений она может только потому, что пространство между им. точками интерполируется. Вот.

Отредактировано beholder22 (2006-09-21 22:45:57)

0

5

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

Ну, и вот еще что... в ближайшем будущем я выложу в разделе Эксперимент 2 результаты (забегая вперед, могу сказать, что НС может весьма точно определять следующий шаг скользящей средней с достаточно большим периодом). Однако, возникает вопрос: что нам это дает?

Ведь любой, более или менее опытный трейдер и так безо всякого труда предскажет с точностью +\- 1-2-3 пункта следующее значение достаточно медленной скользящей средней! (Благо, у него, у трейдера, собственная нейросеть, всяко помощнее будет,  нежели любая из ныне существующих искусственных НС).

Вопрос теперь в том, что надо ставить эксперимент 3: прогнозирование на несколько шагов вперед, путем подставления на каждом шаге прогнозных данных на входы нейросети, умеющий прогнозировать только один шаг.

Что я имею ввиду:
первый шаг - ВХОД:  три фактических данных о приращениях за три последнийх периода;  ВЫХОД: следующий шаг (прогноз)
второй шаг - ВХОД: прогнозное значение, полученное на предыдущем шаге + 2 фактических данных; ВЫХОД: следующий шаг (прогноз)
и т.д.

Однако, возникают смутные сомнения!!!

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

В принципе, ведь, на фактических данных она должна была научиться тому, что если скорость уже достаточно велика, то она должна постепенно начать падать.

А подавать на входы нейросети данные за больше чем 5 последних периодов - это уже фанатизм (бесполезно: boxcounting показывает, что нет никакой зависимости между приращением 6, 7 или более периодов назад и будущим приращением).

Да! вот еще что ;) гы-гы научи, как картинки закачивать??

0

6

определение интерполяции

Интеполяция - заполнение "пробелов" между имеющимися точками данных. Экстраполяция - выход за пределы имеющихся данных

Вопрос теперь в том, что надо ставить эксперимент 3: прогнозирование на несколько шагов вперед

По умному это называется "итеративный прогноз" :)

нейросеть через несколько шагов будет давать прогноз вертикального бесконечнобольшого роста

Если всё нормально такого не должно быть. Точно сказать не могу сейчас. Но кажется MLP в автономном режиме, т.е. когда генерит ВР должен быть стабильным, т.е. его выход конечен. Вообще говоря если он праильно выучил ВР, то в автонмном режиме он должен выдавать сигнал оч. похожий на выученный. Но выученный сигнал у нас конечный (приращения), так что всё д.б. наормально. Этим кстати MLP отличается от линейных систем они в автономном режиме могут создавать только затухающие сигналы или периодические колебания (синусоиды). MLP же в принципе может сгенерить любой мыслимый сигнал (если нейроном и т.п. достаточно), даже хаотический.

А вообще НС могут демонстрировать, что-то типа "интеллекта". Напр., их можно научитьудваивать частоту входного сигнала. Подаем на вход сигнал с частотой f, а на выход 2f. Потом если ей подать сигнал с частотой напр., 3f - она выдаст 6f. Это в общем то достаточно нетривиально. Но это тоже ничего больше, чем аппроксимация функций. В принципе и чел. интеллект в опр. смысле можно рассматривать как устройство для аппроксимации зависимостей.

Картинки - крайняя правая кнопка в диалоге "Ответить" (там где форматирование и проч.).

Отредактировано beholder22 (2006-09-22 23:05:03)

0

7

Спасибо за такое простое и понятное объяснение.

Ну, что же, я понял: нейросеть, все-таки не может породить какое-то такое явление, которого не наблюдалось в обучающей выборке (при чем, в данном случае, под словом "наблюдение" подразумевается - восприятие объекта теми "сенсорами", которые у нее есть (входы) в рамках той модели, которая заложена (обучающее множество)).

И это, конечно же, радует... Ну, остается только проэкспериментировать...

О результатах, опять же, доложу.

Спасибо за разъяснения - как картинки закачивать ;)

0

8

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

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

0

9

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

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

А если, например, мы рассматриваем такой случай: "В 70% случаев (данные - абсолютно условные) после двух белых свечей типа "альпенист" (см. определения "алпенист", "бродяга": Б. Уильямс. Хаос торговли) бывает черная свеча типа "бродяга"..."  ну, так вот, рассматривая этот паттерн, мы научили (или даже "переобучили" нашу НС так, чтобы она давала в 100% случаев ожидаемый ответ. Разве не приведет это на практике к тому, что в 70% случаев она будет права (уже на реальных данных, которых не было в обучающем множестве)??...

0

10

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

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

Конечно же, это - круто... обучить НС этому - проще пареной репы. "Обучить" этому обычную программу на каком-нибудь "классическом" языке программирования было бы немного (или намного) сложнее. Однако, какой нам прок с того? .... - практически - никакого.... конечно, НС что-то там обобщает и способна делать некоторые выводы даже относительно таких данных, которых не было в обучающем множестве, однако... она всего лишь нам скажет, что:
- если скользящая средняя раньше шла медленно вниз, а потом стала быстрее идти, то, вероятно, и в следующем периоде она будет идти вниз также или быстрее;
- если скользящая средняя идет горизонтально, то тут - фик его знает... то ли вверх, то ли вниз... но если при этом другая скользящая выше, чем эта, то, вероятнее всего, вверх... а если ниже, то вероятнее всего, вниз;
- если скользящая средняя раньше шла очень сильно вниз, а потом стала замедляться... - то в следующем периоде, вероятнее всего, она будет еще медленнее....
... и т.д. и т.п. в таком духе.

Новой информации - ноль целых, ноль десятых. Мы получили зеркальное отражение тех знаний, которые мы "вдохнули" в НС. Важно это??? ... хм, ну, чисто для автоматизации, возможно, и важно. ЧИСТО ДЛЯ АВТОМАТИЗАЦИИ! Т.е., я к тому, что, например, когда (и если) мы тут совместно или каждый сам по себе придумаем Грааль или Граали.... то можно будет научить НС-ку работать вот по этой вот Граальной стратегии ... и пусть она себе работает...

а до тех пор..............

надо как-то иначе обучать нейросети. Эх! Шальной разряд мне в синапсы! Что-то как-то... тупик какой-то ощущается.  :notme:

:hm:

0

11

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

0

12

Это - очень радостно, что ты настроен оптимистично!  :yu:

Здесь я только напишу, что мне бы хотелось, если такое возможно, увидеть на страницах нашего форума... что-нить типа "Эксперимент-5. Профессиональное прогнозирование с помощью НС", если, конечно, уже пришло ТО время, когда ты, Вадим, мог бы сам показать, как надо (хотя бы в общих чертах), показать, что можно получить... и пркомментировать результаты эксперимента.

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

0


Вы здесь » НейроГалактика » Для начинающих » На грани с философией