Нейросети.

Тема в разделе "Нейросети", создана пользователем лёксус, 2 авг 2009.

  1. Murat

    Murat Новичок

    А если зараниее задать возможное направление? Т.е. чтобы не просто как попало развивались возможные события, а по по пути наименьшего сопротивления так сказать.
     
  2. лёксус

    лёксус Активный пользователь

    Занимался исследованием входных данных.
    Определенная ясность в отношении входных данных наступила.
    Если умудриться сделать так, чтобы входные вектора распределились равномерно по всей поверхности единичной окружности, то получится очень не плохой вариант. Т.е. входные данные будут различимы и хорошо поддадутся классификации. А если вектора входных данных свалены в кучку в одном месте, то тут мало хорошего. Понятно, что такие данные разделить существенно труднее, если вообще возможно. Т.е. разделить-то их можно в любом случае, но тут разделение явно будет хреновым, а значит и классификации оставит желать много лучшего.

    Вариант хорошего распределения входных данных. Цифирьки (количества однотипных входных векторов) разбежались более-менее равномерно по всем значениям от -1 до +1
    good.jpg

    Вариант плохого распределения входных данных. Входные вектора скучковались в двух значениях.
    bad.jpg

    Думаю, что этот эксперимент можно считать подтверждением, что хорошая предобработка входных данных - очень полезная штука.
     
  3. лёксус

    лёксус Активный пользователь

    Заранее задать возможное направление в большинстве случаев невозможно. Но возможно сделать так, чтобы действительно было <i>не просто как попало</i>.
     
  4. DVDima

    DVDima indifférent Команда форума

    Думаю вот эта база знаний неплохая для первого знакомства. <span class='inv'><![CDATA[<noindex>]]></span><a href="http://www.onix-trade.net/forum/go.php?http://ru.wikipedia.org/wiki/Нейросеть" rel="nofollow" target="_blank">http://ru.wikipedia.org/wiki/Нейросеть</a><span class='inv'><![CDATA[</noindex>]]></span>
     
  5. лёксус

    лёксус Активный пользователь

    Я тут вспомнил, drummus задавал вопрос о перцептронах. На момент ответа у меня совершенно вылетел из головы перцептрон Решетова. Строго говоря, перцептроном это называть нельзя. Поскольку перцептрон - это нейросеть. А нейросеть - это нелинейная функция. А если внимательно посмотреть на перцептрон Решетова, то становится понятно, что это, однозначно, функция, но функция <i><b>линейная</b></i>. А вот как эту функцию использовали... :blink:
     
  6. лёксус

    лёксус Активный пользователь

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

    В вопросе RimiDr'а содержится 4 вопроса. Точнее, 4 ответа.
    Могу такие ответы дать, но не понятно в каком ключе. Т.е. в рамках собственного программирования в среде MQL или описать работу с каким-нибудь пакетом (ПО). В принципе, можно и пакет. NeuroShell 2, например. Если MQL, то в сетке Кохонена, которую я выложил всё это есть. Если не понятно, можно разобрать его построчно - что для чего нужно и где там что находится.
     
  7. лёксус

    лёксус Активный пользователь

    Лирическое отступление. Наткнулся почти случайно.

    <span class='inv'><![CDATA[<noindex>]]></span><a href="http://www.onix-trade.net/forum/go.php?http://habrahabr.ru/blogs/trading/68737/" rel="nofollow" target="_blank">http://habrahabr.ru/blogs/trading/68737/</a><span class='inv'><![CDATA[</noindex>]]></span>

    Такое ощущение, что не согдня завтра всё свершится. :unsure:
     
  8. vasiliy52

    vasiliy52 Новичок

    Что является выходными данными? или как использовать настроенные веса?
     
  9. лёксус

    лёксус Активный пользователь

    Понятно. Всё выше написанное писал для самого себя... :bs:
     
  10. лёксус

    лёксус Активный пользователь

    Много экспериментов с простой сеткой типа 2х3 показали не плохие результаты. Но одно НО всё-таки вылезло. Решил увеличить "мощность" сетки, сделал 15х15 и получилась ерунда. Часть весов сваливалась в ноль и уже не измела своих значений - одного этого достаточно, чтобы разработку отправить в корзину. Ну и ещё несколько аналогичных нюансов. После нескольких попыток починить, снес всё, что было. Купил пива, положил перед глазами учебник и сделал всё по учебнику. Теперь, вроде, работает, как надо. Но учебник - это теория, а во время практики вылазит много практических вопросов, на которые теория ответов не дает. Может, кто-нибудь проверит качество и соответствие теории и практики - намудрил я там или всё-таки всё близко?

    Это скрипт
    Посмотреть вложение __s_Koh_OEMA.mq4
    Это "учебник"
    Посмотреть вложение SOM.rar

    Пинцип построения такой:
    Читаются данные, приводятся к единичному вектору и складываются в массив in_data.
    Вычисляются начальные веса синапсов. Попробовал двумя способами - выпуклая комбинация и арифметическое среднее. В обоих случаях результаты работы сетки совпали один в один. Правда, выпуклую комбинацию сделал не совсем по правилам. Совсем по правилам надо модифицировать сами входные данные и тут же использовать их в процессе обучения для подстройки весов. Я использовал формулу выпуклой комбинации, но значения записывал в массив начальных весов WW0. Возможно, получил тоже арифметическое среднее, только другим способом. Но пока решил сделать так, поскольку меньше гемора и проверке работоспособности не мешает. А дальше происходит обучение сетки. Тут попробовал соблюсти теорию как можно тщательней. Т.е. в обучении используются эпохи и понятие окрестной зоны. Сначала радиус окрестности равен числу нейронов и подстраиваются веса всех нейронов, со временем, через определенное количество эпох этот радиус уменьшается и начинают подстраиваться только соседние к победителю нейроны. А последние 1-2 эпохи подстраиваются веса только для нейронов-победителей. Кроме этого ещё вставил и торможение нейронов, которые слишком часто получают аккредитацию.

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

    P.S. Скрипт гоняю на евре Н1.
    Кстати, проверил обучение аналогичной сетки в NeuroShell 2. Вроде бы, судя по цифирькам, которые изменяются, процессы обучения протекают и там и там одинаково.
     
  11. Loknar

    Loknar Активный пользователь

    привет

    ты вот говоришь исследования заглохли.. не совсем так.. я например как начал этим заниматься в 2007 так и продолжаю, второе высшее пошел получать по когнитивной психологии для того чтоб еще лучше разобраться в проблеме предсказания человеком. хотя конечно это уже не просто сетки а нечто более глубокое.. теперь по самой теме.. выводы к которым я пришел за почти 2 года исследований такие :
    1. линейность данных (т.е. абсолютные величины) будут работать только на время, пока есть тренд, породивший эти данные, т.е. чтобы сеть работа более-менее робастно надо максимально избегать "5-го периода МАшки", "12-барного зигзага", подстроек под определенные ТП и СЛ и так далее
    2. очень важен момент предсказания. сетка должна учиться предсказывать нечто такое, что ты хочешь получать от нее. Опять же возвращаюсь к предыдущему выводу - предсказывать 1-2-3 и т.д. баров может быть эффективно но не робастно. Я пока для себя этой проблемы не решил, хотя есть мысли что возможно объединение масштабов даст эффект получше в плане робастности (устойчивости во времени).
    3. ну и последний вывод : сами данные - это первая проблема, которую вы должны решить прежде чем думать об использовании сетей. Если у вас нет каких-то индикаторов, стратегий, правил, которые позволяют эффективно торговать - сеть вряд ли поможет. Ну или по другому говоря - вы уже должны быть успешным в той или иной степени в торговле, и эта торговля должна быть системной. Тот же беттер говорил что у него уже была стратегия с какими-то индикаторами перед тем как он начал натаскивать на нее сеть.

    ну и если есть вопросы какие-то конкретные - буду сюда иногда заглядывать чтобы отвечать.
     
  12. лёксус

    лёксус Активный пользователь

    Когнитивная психология? Это круто. Желаю добиться тебе желаемого. Теперь я буду знать, кому вопросы задавать, ежели чего... В будущем. На сегодняшний день когнитивность для меня пока находится за рамками. Пока что круги нарезаю в основном вокруг ассоциативности. Хотя, на мой дилетантский взгляд, эти 2 штуки в каком-то месте должны быть связаны.

    Насчет исследований я, наверное, не совсем верно выразился. Сами по себе исследования эти не заглохли. Наоборот, эта спираль пока что только сильнее набирает обороты. Но пару лет назад не было форума, где бы народ толпой не грыз этот гранит. А потом как-то враз образовалась тишина. Насколько я знаю, в большей степени сейчас эксплуатируется НСДТ, особенно после того, как появилась связка с МТ4. В меньшей степени кто-то пишет свои разработки на разных языках программирования, вплоть до создания целых систем со своим собственным интерфейсом (и графическим, в том числе).

    С твоим 3 пунтком полностью согласен. Такое же вИдение проблемы. И система, конечно, есть. Торговать можно, что я и делаю от случая к случаю. Только чтобы торговать нормально и не пропускать сигналы, надо воткнуться в монитор на 24 часа в сутки и стать его (монитора) приставкой. Чтоб ей не быть, копья и ломаются. А нейро по той простой причине, что все остальные способы уже перепробованы.


    Пока конкретных вопросов нет. Какие были - я на них уже сам себе ответил. Сейчас всё это в разработке. Новые вопросы будут (наверное), когда наступит очередной этап.
     
  13. лёксус

    лёксус Активный пользователь

    Поигрался сегодня с сеткой Кохонена, которую выложил несколькими постами раньше. Попробовал прикрутить слой Гроссберга. Результаты получились, но не очень. Правда со слоем Гроссберга присутствует некоторая непределенность. В разных изданиях я встречал три варианта:
    1. Слой Гроссберга учится также, как и слой Кохонена. В слой Гроссберга передается выигравший нейрон слоя Кохонена.
    2. Слой Гроссберга учится также, как и слой Кохонена. В слой Гроссберга передается совокупность нейронов слоя Кохонена (от одного до всех).
    3. Слой Гроссберга учится с учителем для достижения желаемого выхода от нейронов слоя Гроссберга.

    А ещё я встречал в одном издании интересную мысль, что можно сетку Кохонена использовать не как традиционный классификатор, в котором рассматривается только выгравший (один) нейрон = номеру класса, а все нейроны. Нейроны кроме выигравшего ведь тоже имеют какое-то состояние. Т.о. со слоя Кохонена можно "снять" паттерн. Вот этой ситуацией я и воспользовался. Поэтому выбрал второй вариант. Но повторю, результат мне не понравился. Возможно, не красивый результат получился по двум причинам. Во-первых, я облегчил себе задачу, т.е. написал алгоритм обучения слоя Гроссберга "в легкой форме". А, во-вторых, я применил "неприличный" на сегодняшний день способ определения экстремумов - воспользовался зигзагом. Но вот какая получилась интересная картинка выходов со слоя Кохонена. Я записал выходную инфу в файл и в екселе построил диаграммки. Оказалось, что состояния нейронов для верхних и нижних экстремумов зеркальные. А между экстремумами диаграмма выглядит, как сумма этих двух, т.е. 2 горба с небольшой впадиной посередине. (на картинке "промежуточной" диаграммы нет)
    PAT_Kohonen.jpg

    Увидев такую интересную закономерность, я выкинул слой Гроссберга и вместо него вставил легоньку статистическую обработку выходных паттернов. И вот тут результат меня порадовал. По-моему, разделение налицо. Даже такой простенькой сеточкой.
    screenshot.jpg
     
    1 человеку нравится это.
  14. лёксус

    лёксус Активный пользователь

    Сегодня провел серию экспериментов с входными данными. Попробовал всякие разные комбинации цен и индикаторов, цен, индикаторов. Картинка (которая со стрелками в предыдущем посте) меняется, хотя разделение остается ощутимым. В общем, результат подтвердил первоначальное предположение - "тяжесть" нормальной работы нейро-системы на 70%-90% лежит "в области" входных данных. В большей степени успех зависит от того, какие именно данные взяты и в ещё большей, как именно они подготовлены. Т.е. обязательно должны быть качественные входные данные и хороший миксер для них. Но в результате экспериментов вылез хороший дополнительный момент, который мне лично, раньше в голову не приходил. Оказалось, что "тяжесть" проблемы входных данных можно (и, видимо, нужно) рабить, как минимум, на 2 этапа, т.е. использовать отдельно взятую сетку для предварительной обработки входных данных. И с полученным результатом такой предобработки уже лучше должна справиться другая сетка. В общем-то, америки я не открыл, мне раньше встречались (хоть и не часто) подобные решения, но я думал, что это продиктовано решением каких-то частных случаев. Теперь думаю, что в таком подходе есть более глубокий смысл.
     
  15. SLN

    SLN Новичок

    Прежде чем заниматься нейросетями необходимо решить для себя две задачи:
    1. Ручная торговля по своей стратегии дает +
    2. Автоматическая торговля по выше названной стратегии дает +, пусть очень маленький.

    После этого есть смысл с помощью нейросетей оптимизировать уже проверенную стратегию на увеличение профита.
    Учитывая то , что нейросети - это всего лишь высокотехнологичный инструмент, и не более того, получить положительный результат без предварительно созданной стратегии - это как угадать в лото 6 из 36... так сказать - можно пробовать до конца жизни!
     
  16. onixfriend

    onixfriend Новичок

    Я занимался прежде немного акциями. Начинал строить нейросеть, но жизнь отвлекла в сторону. Теперь имею нек. опыт, время и желание продолжить свои эксперименты в привязке к Форексу( здесь я новичек ).

    Это для затравки, а теперь по существу:

    1. я не понял что должна делать сеть:
    -- прогнозировать направление движения?
    -- прогнозировать котировки
    -- проводить теханализ

    2. По моим представлениям сеть должна быть 3-х слойной.

    3 Скрипты вещь интерпретативная и работают принципиально медленно.
    Поэтому в реальном времени получить какой-либо приемлемый результат нереально( каламбур вышел )
     
  17. лёксус

    лёксус Активный пользователь

    Тут спорить не о чем. Но есть, что дополнить.
    Наличие стратегии (да ещё и прибыльной) и её нейро обработка - идеальный вариант. Но это только одна сторона медали. Сами подумайте, сколько разных стратегий, столько и вариантов решений. Много стратегий, много решений. Получается, что нейросетевая обработка существующей стратегии - частный случай. А может быть какой-то общий подход? Думаю, да. И думаю, что это вторая сторона медали. Вспомните, с чего нейросетинг начинался. Тогда появились новые (для большинства) понятия - кластеры, паттерны... Предпринимались попытки поиска закономерностей, которые (предполагалось) можно найти только используя нейросети. А потом уже строились стратегии, использующие найденные закономерности. Как видим, ситуация с точностью до наоборот. И какая из сторон медали наиболее продуктивна - вопрос. В любом случая, я бы не настаивал на обязательности существования прибыльной стратегии, хотя мне этот путь тоже кажется путём с наименьшим сопротивлением.
     
  18. SLN

    SLN Новичок

    Про вторую сторону медали - это и есть "6 из 36". Никто не отрицает, что можно выиграть. Вопрос - в какой жизни?
    Так что лучше все же остановиться на первой стороне...
     
  19. лёксус

    лёксус Активный пользователь

    1. По идее, сетка должна выполнять функцию, для которой она сделана и обучена. Это может быть, что угодно. Вариантов масса. И из этой массы надо выбрать 2-3 наиболее реальных задачи. Тех. анализ сетка проводить не должна. Тех. анализ должен быть той базой, на основе которой формируются входные данные.

    2. Вовсе не обязательно. 3-х слойная сеть - классика жанра, т.е. это сеть прямого распространения с одним скрытым слоем. Как мы знаем, это классический перцептрон. Но даже в этой классике допускается использование скрытых слоёв от 1 до 3. А вообще-то, сетки могут быть совершенно любые. Все зависит от поставленной задачи. Вот, например, в NeuroShell 2 есть такой набор. Можно решить почти любую задачу разумной сложности.
    <div align="center"> NETS.jpg </div>

    3. Скриптами я всегда пользуюсь на стадии разработки. Во-первых, это удобно. Срабатывают однократно при запуске, аналогично исполняемым файлам типа *.exe. Работают очень быстро. Разрешены и нормально работают все функции - звуковые, файловые операции, вывод диалоговых окон, подключение любых библиотек, в том числе и API. Во-вторых, у меня ещё не было случая, чтобы скрипт повесил терминал (в отличие от некоторых индикаторов). В-третьих, после отработки всех основных моментов код без (или почти без) изменений переносится в индикатор или советник.
     
  20. лёксус

    лёксус Активный пользователь

    А не получит ли отклик такая идея? Что если нам слепить быстренько простую слабо прибыльную/убыточную стратегию. А потом начать прикручивать к ней нейро для достижения стабильно хороших результатов. Для наглядности и лучшего понимания процесса.
     

Поделиться этой страницей