Использование нейросетей в трейдинге - страница 39

 

Жаль, что нет "первопроходцев". Буду копать...

 
Попробовал преобразование Хартли - аналог Фурье. Задачей ставил, использовать прямоугольную оконную функцию сдвигаемую во времени в "прошлое". Разложить получаемые вектора на составляющие, и использовать их для входа НС. В качестве прогноза - изменение спектральных составляющих, с последующим обратным преобразованием. Полученное обратное преобразование спрогнозированного спектра использовалось в индикаторе. ЗДЕСЬ описал подробней.
 

Почитал я такую занимательную статью.

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

Вполне возможно, что такой подход помошает бороться одновременно и с переобучением, и так сказать со "структурной недостаточностью".

В связи с этим вопрос: не встречал ли кто-нибудь исследований подобного принципа в теории НС.

 
alsu:

Почитал я такую занимательную статью.

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

Вполне возможно, что такой подход помошает бороться одновременно и с переобучением, и так сказать со "структурной недостаточностью".

В связи с этим вопрос: не встречал ли кто-нибудь исследований подобного принципа в теории НС.

Видел что-то с "прореживанием сети" при обнаружении малой абсолютной величины в коэффициентах.

Но чтоб в десятки раз, и чтоб как основной принцип "большой-пребольшой избыток потом редукция" - такого не встречал. Хочешь замутить?

Мне интересно. Только вычислительных ресурсов маловато будет. // ГПУ не представляю как приспособить - там выгодно только однотипные схемы просчитывать, а тут каждый раз другая топология сети.

 

MetaDriver:

Хочешь замутить?

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

 
MetaDriver:
ГПУ не представляю как приспособить - там выгодно только однотипные схемы просчитывать, а тут каждый раз другая топология сети.
Однотипные, причем аппаратно реализованные. Эффективность параллельных вычислений вообще сильно преувеличена, на самом деле (есть реальные расчеты и даже докторские защищены по этому поводу) в общем случае они даже медленнее последовательных; причина - в затратах времени на передачу данных.
 
alsu:
Однотипные, причем аппаратно реализованные. Эффективность параллельных вычислений вообще сильно преувеличена, на самом деле (есть реальные расчеты и даже докторские защищены по этому поводу) в общем случае они даже медленнее последовательных; причина - в затратах времени на передачу данных.

Сходу согласиться не могу. Если хорошо понимать специфику, можно на ГПУ исхитриться выжимать в сотни раз большую скорострельность из некоторых задач. Посему при ёмких вычислениях всегда есть смысл попытаться свести задачу к классу тех самых "некоторых". Если получится - выигрыш может быть огромен. Если нет, значит нет - считать последовательно на обычном процессоре.

--

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

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

 
MetaDriver:
Сходу согласиться не могу. Если хорошо понимать специфику, можно на ГПУ исхитриться выжимать в сотни раз большую скорострельность из некоторых задач. Посему при ёмких вычислениях всегда есть смысл попытаться свести задачу к классу тех самых "некоторых". Если получится - выигрыш может быть огромен. Если нет, значит нет - считать последовательно на обычном процессоре.

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

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

Ну, да не об этом сейчас, в данной задаче действительно мало что выйдет с параллелизмом.

 
MetaDriver:// Проблема только в том что для каждой топологии нужна новая программа на OpenCL. Это решаемо путём конструирования базовых ocl-шаблонов и генерации новой ocl-программы автоматически (программно) для заданной топологии.


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

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

А, ладно, продублирую:

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

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