Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
На сколько важно точность для сигмоида?
После 20 точность в 9 знаке...
При обучении влияет. Иногда может очень серьезно влиять на сходимость, вплоть до необучения.
При использовании GA для обучения таких проблем быть не должно.
3-что давать на вход ( тут понятно сколько входов )
4-когда переобучать
5-какой выбрать алгоритм обучения
GA - генетический
BP -
3. Действительно проблема, все зависит от фантазии :) .
4. Вот здесь можно схитрить. Сделать сеть со способностью забывать. Это не так сложно.
Допустим, можно сделать так (классно прокатит при обучении с помощью BP):
ограничить количество паттернов -- допустим 1000.
При появлении следующего паттерна (новый ТФ, допустим)
- удаляем самый старый
- делаем цикл обучения
- для появившегося нового паттерна прогоняем обучение раз 5.
Что получается?
+ Цикл обучения длится недолго.
+ старый паттерн забывается далеко не сразу
- новый паттерн обучается тоже не сразу, но
+ быстрее, чем забывается старый за счет агрессивного обучения (5 раз ПОДРЯД)
- подходит только для BP обучения
5. Это дилемма,
GA -- стабильно спускается к оптимуму, в силу свойств имеет защиту от локальных минимумов, но жрет много памяти, дико медленный.
BP -- не гарантирует результат, хотя вероятность очень велика (т.е. если GA способен обучить, то 95%, что BP тоже обучит), быстрее, не жрет памяти, но нуждается в наворотах типа моментума (избавление от локальных минимумов) и адаптивного шага (минимумы тоже проскакиваются, а также в разы увеличивается скорость обучения)
Я за BP.
3. Действительно проблема, все зависит от фантазии :) .
4. Вот здесь можно схитрить. Сделать сеть со способностью забывать. Это не так сложно.
Допустим, можно сделать так (классно прокатит при обучении с помощью BP):
ограничить количество паттернов -- допустим 1000.
При появлении следующего паттерна (новый ТФ, допустим)
- удаляем самый старый
- делаем цикл обучения
- для появившегося нового паттерна прогоняем обучение раз 5.
Что получается?
+ Цикл обучения длится недолго.
+ старый паттерн забывается далеко не сразу
- новый паттерн обучается тоже не сразу, но
+ быстрее, чем забывается старый за счет агрессивного обучения (5 раз ПОДРЯД)
- подходит только для BP обучения
5. Это дилемма,
GA -- стабильно спускается к оптимуму, в силу свойств имеет защиту от локальных минимумов, но жрет много памяти, дико медленный.
BP -- не гарантирует результат, хотя вероятность очень велика (т.е. если GA способен обучить, то 95%, что BP тоже обучит), быстрее, не жрет памяти, но нуждается в наворотах типа моментума (избавление от локальных минимумов) и адаптивного шага (минимумы тоже проскакиваются, а также в разы увеличивается скорость обучения)
Я за BP.
это пример работы ГА
исходник на СИ...
по скорости ГА хвалят как быстрый
есть еще MGA - тот еще бодрее
---
ну по сути ГА или МГА это быстрый поиск максимума или минимума
по крайней мере специалисты METAQUOTES в тестере применили именно ГА для скорости, а не что то иное ...
по скорости ГА хвалят как быстрый
есть еще MGA - тот еще бодрее
---
ну по сути ГА или МГА это быстрый поиск максимума или минимума
по крайней мере специалисты METAQUOTES в тестере применили именно ГА для скорости, а не что то иное ...
ГА однозначно медленней BP.
Metaquotes применили его вполне правильно, поскольку ГА дико универсальная штука. И естественно он будет быстрее чем простой перебор.
Вопрос в другом, так же как и в нейронках -- буквы распознают не нейронками, а специализированными алгоритмами, FR сетей не использует.
Аналогично для обучения лучше использовать специализированные алгоритмы, они априори лучше.
ГА однозначно медленней BP.
Metaquotes применили его вполне правильно, поскольку ГА дико универсальная штука. И естественно он будет быстрее чем простой перебор.
Вопрос в другом, так же как и в нейронках -- буквы распознают не нейронками, а специализированными алгоритмами, FR сетей не использует.
Аналогично для обучения лучше использовать специализированные алгоритмы, они априори лучше.
А откуда такие сведения, если не секрет? А как же тогда обучение FR на примерах?
И еще чем отличается (принципиально) специализированный алгоритм от обученной(натренированной) нейросети?
А откуда такие сведения, если не секрет? А как же тогда обучение FR на примерах?
И еще чем отличается (принципиально) специализированный алгоритм от обученной(натренированной) нейросети?
Ну во-первых нейросети не самый лучший выход при распознавании символов. Хотя неокогнитрон добился 99.7% со словарем, на иероглифах с поворотами, правда не суть.
Зайдите на RSDN.ru и почитайте ветки, связанные с нейросетями. Там сидят далеко не глупые парни, кстати, думаю, и здесь можно найти парочку из них :) .
Насчет обучения на примерах, например, так:
- векторизируем (делаем скелет)
- считаем пересечения и их взаимное положение
- берем, допустим, пару первых коэффициентов преобразования Фурье, нормализовав предварительно для size insensitive. Кстати, с помощью FT можно добиться и rotate insensitive, ЕМНИП.
- усредняем для примеров
- заносим в базу как эталон
Чем отличается?
Когда используешь спец. алгоритм, ты знаешь, как это работает.
А как это делает нейросеть, ты не знаешь. Ты просто знаешь, что данная конкретная функция, заданная нейросетью, способна интерполировать входы в выходы с высокой степенью точности.
Даааааа!!!!!!!
Кстати RSDN.RU - форум программеров, а не разработчиков нейросетевых алгоритмов и их применения.
Для сведения сообщаю Вам что FineReader использует блоки нейросетевых технологий (последние версии). И еще для получения представлений по нейросетям советую почитать специальную (не научно-популярную) литературу и почитать ветки специализированных форумов.
И еще обученная сеть и есть спец алгоритм. Самый простой приме можно увидеть если сгенерировать C код в программе NeuroShell2. Код сети прекрасно виден.
Для сведения сообщаю Вам что FineReader использует блоки нейросетевых технологий (последние версии). И еще для получения представлений по нейросетям советую почитать специальную (не научно-популярную) литературу и почитать ветки специализированных форумов.
2 YuraZ
Сразу хочу сказать вам большое спасибо, за выложенный код нейросети.
После детального разбора, как я понял, вы используете для ускорения расчетов метод нейронного смещения (массивы _threshold и _t_change), а также метод импульса (Momentum parameter).
У меня возникло несколько вопросов по её реализации.
1) В функции корректировки весов вы меняете _t_change, но затем нигде не используете эту корректировку для вычисления нового массива весов _threshold.
2) При передаче выходного сигнала в функцию сигмоида вы вычитаете из sum параметр _threshold, хотя как пишется в литературе, на этот пороговый вес подается не -1, а +1. А значит надо не отнимать, а прибавлять. Тем более, что при корректировке весов вы подаете именно +1 а не -1.
Вообще я побаловался с этим порогом и импульсом, и оказалось, что он реально помогает скорости расчетам. Время уменьшается в несколько раз.
3) Также меня заинтересовала функция сигмоида. Как я понял, такие его параметры обусловлены вашими практическими наработками в этой области, но думаю, что и вы читали книги Уссермена, где он пишет, что диапазон {0,1} не оптимален. Величина коррекции веса пропорциональна выходному уровню, а нулевой выходной уровень ведет к тому, что вес не меняется. А так как при двоичных входных векторах в среднем половина значений будет равна нулю, то и веса, с которыми они связаны, не будут обучаться!
Решение состоит в приведении входов к диапазону {-0.5,0.5} и добавлению смещения к сигмоиду также на величину 0.5. Такой сигмоид [1/(1+Exp(-х))-0.5], с диапазоном {-0.5,0.5} сокращает время сходимости на 30-50%.
Единственная проблема в этом случае - приведение входного вектора к диапазону {-0.5,0.5}. Придется наверно нормировать. Я попытался это сделать, но почему-то результат сигмоида был всегда положительным. Хотелось бы услышать ваше мнение по этому вопросу.
4) Теперь что касается способа задания входов. Наверно стоит автоматизировать этот процесс. Что скажете на такой подход: На выходе как обычно будем ожидать значения 100, 010, 001.
Чтоб автоматом задать массив выходов предлагаю для каждого бара определить отношение максимальной и минимальной цены на последующем промежутке (например, 5000 баров на минутках). Значение этого соотношения будут показателем, куда двинулась цена. Если оно в районе 1, то флет. Если больше 1, то вверх. Если от 0 до 1 то вниз. Хотя оптимальным для анализа мне кажется необходимо сделать не [0, +ЭЄ], а диапазон [-ЭЄ, -А; -А, A; А, +ЭЄ], что кстати будет соответствовать нашим выходным векторам
На вход сети будем подавать последние K значений N скользящих средних (или разница между MA и средней ценой бара). То есть всего входов будет N*K.
Выкладываю немного облегченный и более понятный базовый код (библиотеку ваших функций). Вообще наверно не стоит на таком раннем этапе разработки делать законченный продукт-эксперт. Давайте для начала реализуем четкую логику расчетов в скрипте. Оттестируем все, а затем на его основе напишем обычный индикатор. А затем уже на этой базе будем двигаться дальше - обратные связи и комитеты сетей, да и вообще наверно много чего интересного.
P.S.
Я надеюсь, вы и дальше будете делиться своими разработками, поэтому есть небольшая просьба. Если вам не помешает, то уберите, пожалуйста, в параметрах редактора "Вставлять пробелы", а то немного сложно читать код. Жду новой версии. Возможны предложения по совместному тестированию.
2 YuraZ
2) При передаче выходного сигнала в функцию сигмоида вы вычитаете из sum параметр _threshold, хотя как пишется в литературе, на этот пороговый вес подается не -1, а +1. А значит надо не отнимать, а прибавлять. Тем более, что при корректировке весов вы подаете именно +1 а не -1.
Вообще я побаловался с этим порогом и импульсом, и оказалось, что он реально помогает скорости расчетам. Время уменьшается в несколько раз.
3) Также меня заинтересовала функция сигмоида. Как я понял, такие его параметры обусловлены вашими практическими наработками в этой области, но думаю, что и вы читали книги Уссермена, где он пишет, что диапазон {0,1} не оптимален. Величина коррекции веса пропорциональна выходному уровню, а нулевой выходной уровень ведет к тому, что вес не меняется. А так как при двоичных входных векторах в среднем половина значений будет равна нулю, то и веса, с которыми они связаны, не будут обучаться!
Решение состоит в приведении входов к диапазону {-0.5,0.5} и добавлению смещения к сигмоиду также на величину 0.5. Такой сигмоид [1/(1+Exp(-х))-0.5], с диапазоном {-0.5,0.5} сокращает время сходимости на 30-50%.
Единственная проблема в этом случае - приведение входного вектора к диапазону {-0.5,0.5}. Придется наверно нормировать. Я попытался это сделать, но почему-то результат сигмоида был всегда положительным. Хотелось бы услышать ваше мнение по этому вопросу.
2. Исходная формула выглядит так -- S[j] = Sum(i)(y[i]*w[i,j] - t[j]). Т.е. порог отнимается, именно поэтому его пороговым значением и назвали. А в формуле пересчета два минуса в итоге дают плюс, т.е. никакой ошибки в использовании порога и пересчете параметров нету.
Если я неправ, автор меня поправит.
3. Это не сигмоид -- это ополовиненный бисигмоид. Время сходимости для этих функций зависит от подаваемых на вход сети данных. Может случиться так, что на бисигмоиде будет сходиться в разы быстрее, однако при подаче других данных может получиться абсолютно другая картина.