Обсуждение статьи "Глубокие нейросети (Часть IV). Создание, обучение и тестирование модели нейросети" - страница 2
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Что-то тонкое обучение с учителем на совсем малом наборе происходит - всего 1000 примеров (25% от общего количества)
Не сравнивали качество обучения на этих 1000 и на 3000 (pretrain + train)? Неужели разница мала?
Что-то тонкое обучение с учителем на совсем малом наборе происходит - всего 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.
Удачи
Добрый день.
Для задач обучения и классификации последовательностей изменяющейся длины однозначно нужно применять 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) или разнообразие полезно в принципе? И надо стараться использовать разные параметры для разных слоев (не обязательно именно те, что указаны в коде).
Здравствуйте,
поясните пожалуйста, почему для разных слоев НС выбираются разные параметры:
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%
Перед этим пробовал с
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-х этапах.