Обсуждение статьи "Глубокие нейросети (Часть IV). Создание, обучение и тестирование модели нейросети" - страница 2

 
 SplitData() — разделяем начальный набор dt[] на поднаборы pretrain, train, val, test в соотношении 2000/1000/500/500

Что-то тонкое обучение с учителем на совсем малом наборе происходит - всего 1000 примеров (25% от общего количества)

Не сравнивали качество обучения на этих 1000 и на 3000 (pretrain + train)? Неужели разница мала?

 
I see, wherever money is involved (and easy money in particular) a war and exploitation is expected.
 
elibrarius:

Что-то тонкое обучение с учителем на совсем малом наборе происходит - всего 1000 примеров (25% от общего количества)

Не сравнивали качество обучения на этих 1000 и на 3000 (pretrain + train)? Неужели разница мала?

Отправлял точно когда сервер перезагружался наверное.

Одно из преимуществ использования предобучения - это то, что для тонкого обучения необходимо намного меньше примеров, эпох обучения и уровней обучения. А вот для претренинга желательно побольше примеров. Из моего опыта 1500-2000 примеров вполне достаточно для претренинга. Претренинг разместит веса DNN в области оптимальных решений. Нужно только тонко отшлифовать. Увеличение этих показателей приводит к ухудшению качества. 

Но Вы можете проверить экспериментально.

 

Добрый день, господа трейдеры + программеры + математики... 

Автору - спасибо за статью, разжевано хорошо, даже гдето доходчиво... )

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


ГРАНИЦЫ РЕШЕНИЯ ЗАДАЧИ:

1. Обучение: Найти и отобрать в БД2* найденные повторения Шаблона* в БД1*. Количество повторений и разрешенное отклонение будут полностью характеризовать уверенность в Гипотезе*. Созданная БД2 с повторениями будет значительно меньше по размеру чем БД1 для интересующих ФИ*, а потому менее требовательна к энергозатратам компьютерных мощностей. Преобразовав котировки разных ФИ* в единый типоразмер получим возможность сохранять найденные повторы из разных ФИ* в одну (объединяющую) БД1 - что позволит получить большее количество повторяющихся Шаблонов*.

2. Анализ: При появлении новой точки в Данных*, и соответственно нового Шаблона* - 

2.1. сразу провести новый поиск в БД2 - что позволит сделать быстрый поиск, найденное сохранить в БД3* и соответственно обновить БД2*

2.2. во время простоя провести новый поиск в БД1 - что позволит сделать точный но медленный поиск, найденное сохранить в БД3* и соответственно обновить БД2*

2.3. на основании изменений в БД3* проверить (согласно торговой стратегии) и если нужно изменить торговую позицию 


расшифровка сокращений:

БД1 - База Данных /история котировок всех ФИ* :

   1) в виде цепочки Точек* ограниченной длинной истории, но из которой анализироваться будут группы точек по 20 штук, после анализа данной группы производим сдвиг на одну точку и повторяем анализ

   2) в виде списка из Шаблонов*

БД2 - База данных с повторяющимися Шаблонами*, которые идентичны полностью, либо частично (отброшено любое количество переменных Шаблона*)  

БД3 - База данных с Шаблонами* которые идентичны полностью или частично (с отклонениями до заданного уровня в координатах Точек* Шаблона*) последнему Шаблону, т.е. актуальны сейчас.

ФИ* - Финансовые Инструменты (EURUSD, GBPUSD, _SPX500, ...), каждый финансовый инструмент хранится в отдельном файле

Точка* - состоит из цены, даты, объема, которые в свою очередь могут соответствовать:  закрытию бара/ фракталу / и т.п.

Шаблон* - группа из 20 Точек*

Гипотеза* - результат работы системы анализа ФИ* (как вариант - нейросети).


ВОПРОС ПО ЗАДАЧЕ:

Можно ли поставленную задачу решать с помощью нейросети и если да, то какой метод обучения нейросети тогда наиболее подходящий и почему?

Уточню вопрос: можно ли обучить нейросеть подавая на вход значительное количество Шаблонов* (одна часть шаблона будет содержать ориентиры для определения идентичности, а вторая часть - Гипотезу*). Если ответ "да", то с помощью какого типа нейросети это можно можно сделать и подались ли вам готовые реализации подобного для


Насколько я понял предложенные Вами варианты для этого не подходят.


Задачу написал немного сумбурно - не хотелось вдаваться в тонкости, но хотелось получить ответ на вопрос.

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


С уважением, 

Владимир

 
Владимир:

Добрый день, господа трейдеры + программеры + математики... 

Автору - спасибо за статью, разжевано хорошо, даже гдето доходчиво... )

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


ГРАНИЦЫ РЕШЕНИЯ ЗАДАЧИ:

1. Обучение: Найти и отобрать в БД2* найденные повторения Шаблона* в БД1*. Количество повторений и разрешенное отклонение будут полностью характеризовать уверенность в Гипотезе*. Созданная БД2 с повторениями будет значительно меньше по размеру чем БД1 для интересующих ФИ*, а потому менее требовательна к энергозатратам компьютерных мощностей. Преобразовав котировки разных ФИ* в единый типоразмер получим возможность сохранять найденные повторы из разных ФИ* в одну (объединяющую) БД1 - что позволит получить большее количество повторяющихся Шаблонов*.

2. Анализ: При появлении новой точки в Данных*, и соответственно нового Шаблона* - 

2.1. сразу провести новый поиск в БД2 - что позволит сделать быстрый поиск, найденное сохранить в БД3* и соответственно обновить БД2*

2.2. во время простоя провести новый поиск в БД1 - что позволит сделать точный но медленный поиск, найденное сохранить в БД3* и соответственно обновить БД2*

2.3. на основании изменений в БД3* проверить (согласно торговой стратегии) и если нужно изменить торговую позицию 


расшифровка сокращений:

БД1 - База Данных /история котировок всех ФИ* :

   1) в виде цепочки Точек* ограниченной длинной истории, но из которой анализироваться будут группы точек по 20 штук, после анализа данной группы производим сдвиг на одну точку и повторяем анализ

   2) в виде списка из Шаблонов*

БД2 - База данных с повторяющимися Шаблонами*, которые идентичны полностью, либо частично (отброшено любое количество переменных Шаблона*)  

БД3 - База данных с Шаблонами* которые идентичны полностью или частично (с отклонениями до заданного уровня в координатах Точек* Шаблона*) последнему Шаблону, т.е. актуальны сейчас.

ФИ* - Финансовые Инструменты (EURUSD, GBPUSD, _SPX500, ...), каждый финансовый инструмент хранится в отдельном файле

Точка* - состоит из цены, даты, объема, которые в свою очередь могут соответствовать:  закрытию бара/ фракталу / и т.п.

Шаблон* - группа из 20 Точек*

Гипотеза* - результат работы системы анализа ФИ* (как вариант - нейросети).


ВОПРОС ПО ЗАДАЧЕ:

Можно ли поставленную задачу решать с помощью нейросети и если да, то какой метод обучения нейросети тогда наиболее подходящий и почему?

Уточню вопрос: можно ли обучить нейросеть подавая на вход значительное количество Шаблонов* (одна часть шаблона будет содержать ориентиры для определения идентичности, а вторая часть - Гипотезу*). Если ответ "да", то с помощью какого типа нейросети это можно можно сделать и подались ли вам готовые реализации подобного для


Насколько я понял предложенные Вами варианты для этого не подходят.


Задачу написал немного сумбурно - не хотелось вдаваться в тонкости, но хотелось получить ответ на вопрос.

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


С уважением, 

Владимир

Добрый день.

Для задач обучения и классификации последовательностей изменяющейся длины  однозначно нужно применять LSTM. Есть много разновидностей таких нейросетей. Все зависит от вида входных данных и целей классификации. 

Сейчас появилась возможность применять в R/MT4 все виды нейросетей имеющихся в TensorFlow/Keras/CNTK.

Удачи

 
Vladimir Perervenko:

Добрый день.

Для задач обучения и классификации последовательностей изменяющейся длины  однозначно нужно применять LSTM. Есть много разновидностей таких нейросетей. Все зависит от вида входных данных и целей классификации. 

Сейчас появилась возможность применять в R/MT4 все виды нейросетей имеющихся в TensorFlow/Keras/CNTK.

Удачи


Добрый!

Ответ понятен, спасибо.

Буду двигаться в этом направлении. 

Владимир, как смотрите на объединение усилий? Думаю совместно сможем побороть...

С уважением,

Владимир

 
Владимир:

Добрый!

Ответ понятен, спасибо.

Буду двигаться в этом направлении. 

Владимир, как смотрите на объединение усилий? Думаю совместно сможем побороть...

С уважением,

Владимир

Добрый.

Можем обсудить совместную работу. Но начать смогу после окончания этого цикла статей, надеюсь до конца месяца успею.

Но подготовительно-разъяснительную работу можем начать сейчас. Для эффективной работы мне важно понять основную идею. Сейчас я ене совсем понял Вашу идею. Как то наглядно можно ее представить?

Удачи

 

Здравствуйте,

поясните пожалуйста, почему для разных слоев НС выбираются разные параметры:

darch.unitFunction = c("tanhUnit","maxoutUnit", "softmaxUnit"),
darch.dropout = c(0.1,0.2,0.1),
darch.weightUpdateFunction = c("weightDecayWeightUpdate", "maxoutWeightUpdate","weightDecayWeightUpdate"),

1) просто показать, что в пакете есть большое разнообразие?

2) или указанные комбинации параметров имеют какое-то преимущество? (Из Вашего опыта)

3) или разнообразие полезно в принципе? И надо стараться использовать разные параметры для разных слоев (не обязательно именно те, что указаны в коде).

 
elibrarius:

Здравствуйте,

поясните пожалуйста, почему для разных слоев НС выбираются разные параметры:

1) просто показать, что в пакете есть большое разнообразие?

2) или указанные комбинации параметров имеют какое-то преимущество? (Из Вашего опыта)

3) или разнообразие полезно в принципе? И надо стараться использовать разные параметры для разных слоев (не обязательно именно те, что указаны в коде).

Потому что у них разные функции активации.

Функция активации первого скрытого слоя определяется видом входных данных Поскольку у нас входы в диапазоне +1/-1, то наиболее подходящей будет tanh, но может быть и sigm или maxout. Второй скрытый слой maxout. Выходной конечно softmax.

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

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

А так можете экспериментировать с  любыми параметрами (конечно если они уместны с нашими данными).

Экспериментируйте.

Удачи

 

Здравствуйте,
еще вопрос.
Зачем обучение разбивается на 2 этапа:
1 pretrain и последующее обучение только верхнего слоя DNN
и
2 тонкое обучение всей сети?

Не получим ли мы тот же результат без 2-го этапа, если расширим 1-й этап до
pretrain + тонкое обучение всей сети одновременно
(т.е. установим   rbm.lastLayer = 0, bp.learnRate = 1, darch.trainLayers = T)

Обновление. Поставил эксперимент: (красным показаны изменения в коде)

evalq({
  require(darch)
  require(dplyr)
  require(magrittr)
  Ln <- c(0, 16, 8, 0)
  nEp_0 <- 25
  #------------------
  par_0 <- list(
    layers = Ln,
    seed = 54321,
    logLevel = 5,
    # params RBM========================
    rbm.consecutive = F, # each RBM is trained one epoch at a time
    rbm.numEpochs = nEp_0,
    rbm.batchSize = 50,
    rbm.allData = TRUE,
    rbm.lastLayer = 0,
    rbm.learnRate = 0.3,
    rbm.unitFunction = "tanhUnitRbm",
    # params NN ========================
    darch.batchSize = 50,
    darch.numEpochs = nEp_0,
    darch.trainLayers = T,
    darch.unitFunction = c("tanhUnit","maxoutUnit", "softmaxUnit"),
    bp.learnRate = 1,
    bp.learnRateScale = 1,
    darch.weightDecay = 0.0002,
    darch.dither = F,
    darch.dropout = c(0.1,0.2,0.1),
    darch.fineTuneFunction = backpropagation, #rpropagation
    normalizeWeights = T,
    normalizeWeightsBound = 1,
    darch.weightUpdateFunction = c("weightDecayWeightUpdate",
                                   "maxoutWeightUpdate",
                                   "weightDecayWeightUpdate"),
    darch.dropout.oneMaskPerEpoch = T,
    darch.maxout.poolSize = 2,
    darch.maxout.unitFunction = "linearUnit")
  #---------------------------
 
  DNN_default <- darch(darch = NULL,
                       paramsList = par_0,
                       x = DTcut$pretrain$woe %>% as.data.frame(),
                       y = DTcut$pretrain$raw$Class %>% as.data.frame(),
                        xValid = DTcut$val$woe %>% as.data.frame(),
                        yValid = DTcut$val$raw$Class %>% as.data.frame()
  )
}, env)

получил:


INFO [2017-11-15 17:53:24] Classification error on Train set (best model): 29.1% (582/2000)
INFO [2017-11-15 17:53:24] Train set (best model) Cross Entropy error: 1.146
INFO [2017-11-15 17:53:25] Classification error on Validation set (best model): 30.54% (153/501)
INFO [2017-11-15 17:53:25] Validation set (best model) Cross Entropy error: 1.192
INFO [2017-11-15 17:53:25] Best model was found after epoch 8
INFO [2017-11-15 17:53:25] Final 0.632 validation Cross Entropy error: 1.175
INFO [2017-11-15 17:53:25] Final 0.632 validation classification error: 30.01%
INFO [2017-11-15 17:53:25] Fine-tuning finished after 4.4 secs

У вас после второго этапа

INFO [2017-11-15 17:49:45] Classification error on Train set (best model): 32.57% (326/1001)
INFO [2017-11-15 17:49:45] Train set (best model) Cross Entropy error: 1.244
INFO [2017-11-15 17:49:45] Classification error on Validation set (best model): 30.74% (154/501)

Т.е. ошибка на валидационном участке такая же, т.е. 30%

Перед этим пробовал с

xValid = DTcut$train$woe %>% as.data.frame(),

yValid = DTcut$train$raw$Class %>% as.data.frame()

как в коде этапа 1, и получил:

INFO [2017-11-15 17:48:58] Classification error on Train set (best model): 28.85% (577/2000)
INFO [2017-11-15 17:48:58] Train set (best model) Cross Entropy error: 1.153
INFO [2017-11-15 17:48:59] Classification error on Validation set (best model): 35.66% (357/1001)

Подумал, что одним этапом ошибку в 30% не получить, но после валидации набором из этапа 2 все стало так же хорошо, как у вас.
Возможно, что просто DTcut$val набор лучше  DTcut$train набора, потому он и в моем одном этапе показал такие же хорошие результаты, что и в ваших 2-х этапах.

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