Discussão do artigo "Redes Neurais Profundas (Parte IV). Criação, treinamento e teste de um modelo de rede neural" - página 2
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Algo sutil acontece com o aprendizado com o professor em um conjunto muito pequeno - apenas 1.000 exemplos (25% do total)
Você não comparou a qualidade do aprendizado nesses 1.000 e em 3.000 (pré-treinamento + treinamento)? A diferença é realmente pequena?
Algo sutil de aprendizado com o professor em um conjunto muito pequeno está acontecendo - apenas 1.000 exemplos (25% do total)
Você não comparou a qualidade do ensino nesses 1.000 e em 3.000 (pré-treinamento + treinamento)? A diferença é realmente pequena?
Enviei exatamente quando o servidor estava reiniciando, eu acho.
Uma vantagem de usar o pré-treinamento é que, para o treinamento refinado, você precisa de muito menos exemplos, épocas de treinamento e níveis de treinamento. Para o pré-treinamento, por outro lado, é desejável ter mais exemplos. De acordo com minha experiência, 1.500 a 2.000 exemplos são suficientes para o pré-treinamento. O pré-treinamento colocará os pesos da DNN na área das soluções ideais. Ele só precisa de um ajuste fino. O aumento desses pesos leva à degradação da qualidade.
Mas você pode verificar experimentalmente.
Boa tarde, senhores traders + programadores + matemáticos...
Para o autor - obrigado pelo artigo, ele está bem explicado e até compreensível.... )
Vladimir, tenho uma pergunta de preconceito pessoal, por favor, responda se possível:
LIMITES DA SOLUÇÃO DO PROBLEMA:
1. treinamento: Localizar e selecionar no DB2* as repetições encontradas do Template* no DB1*. O número de repetições e o desvio permitido caracterizarão totalmente a confiança na Hipótese*. O DB2 criado com repetições terá um tamanho muito menor do que o DB1 para os FIs de interesse* e, portanto, será menos exigente em termos de consumo de energia do computador. Ao converter as citações de diferentes FI* em um único tipo de tamanho, poderemos salvar as repetições encontradas de diferentes FI* em um único DB1 (unificador), o que nos permitirá obter um número maior de modelos* repetidos.
2 Análise: Quando um novo ponto aparece nos dados* e, consequentemente, um novo padrão* - 2.1.
2.1. executar imediatamente uma nova pesquisa no DB2, o que permitirá fazer uma pesquisa rápida, salvar os dados encontrados no DB3* e atualizar o DB2* adequadamente
2.2. durante o tempo de inatividade, realizar uma nova pesquisa no DB1, o que permitirá fazer uma pesquisa precisa, porém lenta, salvar os dados encontrados no DB3* e atualizar o DB2* adequadamente
2.3. com base nas alterações no DB3*, verificar (de acordo com a estratégia de negociação) e, se necessário, alterar a posição de negociação
decifrar as abreviações:
DB1 - Banco de dados/histórico de cotações de todos os FIs* :
1) na forma de uma cadeia de Pontos* limitada por um longo histórico, mas a partir da qual grupos de 20 pontos serão analisados; depois de analisar esse grupo, fazemos um deslocamento de um ponto e repetimos a análise.
2) como uma lista de modelos*
DB2 - Banco de dados com Templates* repetidos, que são total ou parcialmente idênticos (qualquer número de variáveis de um Template* é descartado).
DB3 - Banco de dados com Templates*, que são total ou parcialmente idênticos (com desvios para o nível especificado nas coordenadas dos Template* Points*) ao último Template, ou seja, atual agora.
FI* - Instrumentos financeiros (EURUSD, GBPUSD, _SPX500, ...), cada instrumento financeiro é armazenado em um arquivo separado
Ponto* - consiste em preço, data, volume, que, por sua vez, pode corresponder a: fechamento de barra/fractal/etc.
Modelo* - um grupo de 20 pontos*
Hipótese* - o resultado do sistema de análise FI* (como uma variante - rede neural).
PERGUNTA SOBRE A TAREFA:
A tarefa em questão pode ser resolvida usando uma rede neural e, em caso afirmativo, qual é o método mais adequado para treinar a rede neural e por quê?
Deixe-me esclarecer a pergunta: é possível treinar uma rede neural alimentando um número significativo de modelos* (uma parte do modelo conterá pontos de referência para a determinação da identidade e a segunda parte conterá uma hipótese*). Se a resposta for "sim", que tipo de rede neural pode ser usada para fazer isso e você encontrou alguma implementação pronta para isso?
Pelo que entendi, as variantes propostas por você não são adequadas para isso.
Escrevi a tarefa de forma um pouco resumida - não queria entrar em sutilezas, mas queria obter uma resposta para a pergunta.
Quanto a mim, posso dizer o óbvio: as redes neurais me atraem, mas ainda não consegui me aprofundar nelas.
Abraços,
Vladimir
Boa tarde, senhores traders + programadores + matemáticos...
Para o autor - obrigado pelo artigo, ele está bem explicado e até compreensível.... )
Vladimir, tenho uma pergunta de preconceito pessoal, por favor, responda se possível:
LIMITES DA SOLUÇÃO DO PROBLEMA:
1. treinamento: Localizar e selecionar no DB2* as repetições encontradas do Template* no DB1*. O número de repetições e o desvio permitido caracterizarão totalmente a confiança na Hipótese*. O DB2 criado com repetições terá um tamanho muito menor do que o DB1 para os FIs de interesse* e, portanto, será menos exigente em termos de consumo de energia do computador. Ao converter as citações de diferentes FI* em um único tipo de tamanho, poderemos salvar as repetições encontradas de diferentes FI* em um único DB1 (unificador), o que nos permitirá obter um número maior de modelos* repetidos.
2 Análise: Quando um novo ponto aparece nos dados* e, consequentemente, um novo padrão* - 2.1.
2.1. executar imediatamente uma nova pesquisa no DB2, o que permitirá fazer uma pesquisa rápida, salvar os dados encontrados no DB3* e atualizar o DB2* adequadamente
2.2. durante o tempo de inatividade, realizar uma nova pesquisa no DB1, o que permitirá fazer uma pesquisa precisa, porém lenta, salvar os dados encontrados no DB3* e atualizar o DB2* adequadamente
2.3. com base nas alterações no DB3*, verificar (de acordo com a estratégia de negociação) e, se necessário, alterar a posição de negociação
decifrar as abreviações:
DB1 - Banco de dados/histórico de cotações de todos os FIs* :
1) na forma de uma cadeia de Pontos* limitada por um longo histórico, mas a partir da qual grupos de 20 pontos serão analisados; depois de analisar esse grupo, fazemos um deslocamento de um ponto e repetimos a análise.
2) como uma lista de modelos*
DB2 - Banco de dados com Templates* repetidos, que são total ou parcialmente idênticos (qualquer número de variáveis de um Template* é descartado).
DB3 - Banco de dados com Templates*, que são total ou parcialmente idênticos (com desvios para o nível especificado nas coordenadas dos Template* Points*) ao último Template, ou seja, atual agora.
FI* - Instrumentos financeiros (EURUSD, GBPUSD, _SPX500, ...), cada instrumento financeiro é armazenado em um arquivo separado
Ponto* - consiste em preço, data, volume, que, por sua vez, pode corresponder a: fechamento de barra/fractal/etc.
Modelo* - um grupo de 20 pontos*
Hipótese* - o resultado do sistema de análise FI* (como uma variante - rede neural).
PERGUNTA SOBRE A TAREFA:
A tarefa em questão pode ser resolvida usando uma rede neural e, em caso afirmativo, qual é o método mais adequado para treinar a rede neural e por quê?
Deixe-me esclarecer a pergunta: é possível treinar uma rede neural alimentando um número significativo de modelos* (uma parte do modelo conterá pontos de referência para a determinação da identidade e a segunda parte conterá uma hipótese*). Se a resposta for "sim", que tipo de rede neural pode ser usada para fazer isso e você encontrou alguma implementação pronta para isso?
Pelo que entendi, as variantes propostas por você não são adequadas para isso.
Escrevi a tarefa de forma um pouco resumida - não queria entrar em sutilezas, mas queria obter uma resposta para a pergunta.
Quanto a mim, posso dizer o óbvio: as redes neurais me atraem, mas ainda não consegui me aprofundar nelas.
Abraços,
Vladimir
Boa tarde.
Para tarefas de treinamento e classificação de sequências de comprimento variável, você deve definitivamente aplicar o LSTM. Há muitas variedades dessas redes neurais. Tudo depende do tipo de dados de entrada e dos objetivos de classificação.
Agora é possível aplicar no R/MT4 todos os tipos de redes neurais disponíveis no TensorFlow/Keras/CNTK.
Boa sorte
Boa tarde.
Para tarefas de treinamento e classificação de sequências de comprimento variável, você definitivamente deve usar o LSTM. Há muitas variedades dessas redes neurais. Tudo depende do tipo de dados de entrada e dos objetivos de classificação.
Agora é possível aplicar no R/MT4 todos os tipos de redes neurais disponíveis no TensorFlow/Keras/CNTK.
Boa sorte
Boa sorte!
A resposta é clara, obrigado.
Vou seguir nessa direção.
Vladimir, o que você acha de unirmos forças? Acho que juntos podemos superar...
Com todo respeito,
Vladimir
Muito bem!
A resposta está clara, obrigado.
Vou seguir nessa direção.
Vladimir, o que você acha de unirmos nossas forças? Acho que podemos lutar juntos...
Com todo o respeito,
Vladimir
Muito bem.
Podemos discutir o trabalho conjunto. Mas poderei começar após o término desta série de artigos, espero poder fazê-lo até o final do mês.
Mas podemos começar o trabalho preparatório e explicativo agora. Para um trabalho eficaz, é importante que eu entenda a ideia básica. Agora não estou entendendo muito bem sua ideia. Você pode visualizá-la de alguma forma?
Boa sorte
Olá,
Poderia explicar por que são escolhidos parâmetros diferentes para camadas diferentes de NS?
darch.unitFunction = c(" tanhUnit"," maxoutUnit", " softmaxUnit"),
darch.dropout = c(0.1,0.2,0.1),
darch.weightUpdateFunction = c("weightDecayWeightUpdate", "maxoutWeightUpdate","weightDecayWeightUpdate"),
1) apenas para mostrar que há uma grande variedade no pacote?
2) ou as combinações especificadas de parâmetros têm alguma vantagem? (De acordo com sua experiência).
3) ou a diversidade é útil em princípio? E deve-se tentar usar parâmetros diferentes para camadas diferentes (não necessariamente exatamente aqueles especificados no código).
Olá,
Poderia explicar por que são escolhidos parâmetros diferentes para camadas diferentes de NS?
1) apenas para mostrar que há uma grande variedade no pacote?
2) ou as combinações especificadas de parâmetros têm alguma vantagem? (De acordo com sua experiência).
3) ou a diversidade é útil em princípio? E devemos tentar usar parâmetros diferentes para camadas diferentes (não necessariamente exatamente os especificados no código).
Porque elas têm funções de ativação diferentes.
A função de ativação da primeira camada oculta é determinada pelo tipo de dados de entrada. Como temos entradas no intervalo +1/-1, a mais adequada é tanh, mas também pode ser sigm ou maxout. A segunda camada oculta é maxout. A saída, obviamente, é softmax.
Desistência por experiência própria. Camadas diferentes podem e, em princípio, devem ter parâmetros diferentes. Nem todos os pacotes oferecem uma possibilidade tão ampla de variação de parâmetros.
A escolha de uma combinação desses hiperparâmetros para obter o menor erro de classificação é um problema de otimização (haverá um exemplo na quinta parte do artigo).
Portanto, você pode fazer experimentos com quaisquer parâmetros (é claro, se eles forem relevantes para os dados).
Faça um experimento.
Boa sorte
Olá,
outra pergunta.
Por que o treinamento é dividido em dois estágios:
1 pré-treinamento e, em seguida, treinamento apenas da camada superior da DNN
e
2 aprendizado fino de toda a rede?
Não obteríamos o mesmo resultado sem o segundo estágio se estendêssemos o primeiro estágio para
pré-treinamento + aprendizado fino de toda a rede ao mesmo tempo
(ou seja, definir rbm.lastLayer = 0, bp.learnRate = 1, darch.trainLayers = T)?
Atualização. Configurei um experimento:(o vermelho mostra as alterações no código)
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)
Obtido:
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
Você tem após a segunda etapa.
INFO [2017-11-15 17:49:45] Erro de classificação no conjunto de treinamento (melhor modelo): 32,57% (326/1001)
INFO [2017-11-15 17:49:45] Erro de entropia cruzada do conjunto de treinamento (melhor modelo): 1,244
INFO [2017-11-15 17:49:45] Erro de classificação no conjunto de validação (melhor modelo): 30.74% (154/501)
Ou seja, o erro no conjunto de validação é o mesmo, ou seja, 30%
Antes disso, tentei com
yValid = DTcut$train$raw$Class %>% as.data.frame()
como no código da etapa 1, e obtive:
INFO [2017-11-15 17:48:58] Erro de classificação no conjunto de trem (melhor modelo): 28.85% (577/2000)
INFO [2017-11-15 17:48:58] Erro de entropia cruzada do conjunto de treinamento (melhor modelo): 1.153
INFO [2017-11-15 17:48:59] Erro de classificação no conjunto de validação (melhor modelo): 35.66% (357/1001)
Pensei que era impossível obter um erro de 30% com um estágio, mas após a validação com o conjunto de validação do estágio 2, ele foi tão bom quanto o seu.
É possível que apenas o conjunto DTcut$val seja melhor do que o conjunto DTcut$train, por isso ele também teve um desempenho tão bom em meu estágio único quanto em seus dois estágios.