Discussão do artigo "Redes Neurais Profundas (Parte V). Otimização Bayesiana de hiperparâmetros de uma DNN" - página 3

 
Vladimir Perervenko:

No caso do Bayesian, você precisa jogar não apenas com o número de passes, mas também com o número de pontos. Você precisa procurar uma opção mais rápida. Isso é muito tedioso

Para acelerar o processo, adicione os parâmetros ao chamar BayesianOptimisation

maxit = 1 #1 em vez de 100 - número de repetições para GP_fit para previsão de hiperplano
Não notei nenhuma melhoria com 100 repetições em comparação com 1, então agora uso 1.
Ie.

BayesianOptimization(все как у вас , maxit = 1)

maxit=1 via ... será passado para GPfit:: GP_fit e a otimização será executada 1 vez em vez de 100.
Você também pode passar:
control = c(20*d, 10*d, 2*d);#default - control = c(200*d, 80*d, 2*d) - de 200*d selecione 80*d melhores e construa 2*d clusters - onde d é o número de parâmetros a serem otimizados.

Descrição desses parâmetros aqui https://github.com/cran/GPfit/blob/master/R/GP_fit.R

Vladimir Perervenko:

PS. Você não está mudando para o TensorFlow? É apenas um nível mais alto.

Parece que com o Darch 30% no treinamento e 36% no teste eu consigo. Vou terminar o EA, colocá-lo para funcionar e, então, talvez eu o faça.
Embora o Darch tenha pouco suporte, eles corrigiram e melhoraram algumas coisas, mas em janeiro ele foi enviado do CRAN para o arquivo por não corrigir erros (havia um com avaliação de erros no modo de treinamento com validação). Em maio, eles lançaram a versão 13, mas depois voltaram para a versão 12. Agora, a 13ª versão apareceu novamente - aparentemente, ela foi concluída.
 
elibrarius:

Para acelerar o processo, adicione os parâmetros ao chamar o BayesianOptimisation

maxit = 1 #1 em vez de 100 - número de repetições para GP_fit para previsão de hiperplano
Não notei nenhuma melhoria com 100 repetições em comparação com 1, então usei 1.
Ie.

maxit=1 via ... será passado para o GPfit:: GP_fit e a otimização será executada 1 vez em vez de 100.
Você também pode passar:
control = c(20*d, 10*d, 2*d);#default - control = c(200*d, 80*d, 2*d) - escolhe 80*d melhores de 200*d e constrói 2*d clusters - onde d é o número de parâmetros a serem otimizados

Sim, parece funcionar com Darch 30% no treinamento e 36% no teste. Vou terminar o EA, colocá-lo para funcionar e, então, talvez eu o faça.
Embora o Darch tenha um suporte insuficiente, eles corrigiram e melhoraram algumas coisas, mas em janeiro ele foi enviado do CRAN para o arquivo por falha na correção de erros (havia um com estimativa de erro no modo de treinamento com validação). Em maio, eles lançaram a versão 13, mas depois voltaram para a versão 12. Agora a 13ª versão apareceu novamente - aparentemente, eles a concluíram.

Obrigado pela informação. Vou tentar com seus parâmetros.

Faz muito tempo que não os visito no Github. Terei que escrever uma proposta. O pacote darch fornece o uso da GPU, mas eles removeram o pacote que usam para isso do CRAN (para a versão 3.4.4). E seria interessante saber como a GPU afetaria a velocidade e a qualidade.

Boa sorte

 

Há outro freio aqui

https://github.com/yanyachen/rBayesianOptimization/blob/master/R/Utility_Max.R

Também configurei maxit = 1 em vez de 100.

Por ... não pode ser passado, você pode simplesmente carregar sua função Utility_Max no R e usar a versão corrigida.

 
elibrarius:

Outro retardado aqui

https://github.com/yanyachen/rBayesianOptimization/blob/master/R/Utility_Max.R

Também configurei maxit = 1 em vez de 100.

Por ... não pode ser passado, você pode simplesmente carregar sua função Utility_Max no R e usar a versão corrigida.

Eu a verifiquei na otimização do conjunto de redes neurais do artigo da Parte VI. Nem o maxit nem o controle têm um efeito visível no tempo de computação. A maior influência é o número de neurônios na camada oculta. Deixei assim

 OPT_Res <- BayesianOptimization(fitnes, bounds = bonds,
                                  init_grid_dt = NULL, init_points = 20, 
                                  n_iter = 20, acq = "ucb", kappa = 2.576, 
                                  eps = 0.0, verbose = TRUE,
                                  maxit = 100, control = c(100, 50, 8))
elapsed = 14.42 Round = 1       numFeature = 9.0000     r = 7.0000      nh = 36.0000    fact = 9.0000   Value = 0.7530 
elapsed = 42.94 Round = 2       numFeature = 4.0000     r = 8.0000      nh = 46.0000    fact = 6.0000   Value = 0.7450 
elapsed = 9.50  Round = 3       numFeature = 11.0000    r = 5.0000      nh = 19.0000    fact = 5.0000   Value = 0.7580 
elapsed = 14.17 Round = 4       numFeature = 10.0000    r = 4.0000      nh = 35.0000    fact = 4.0000   Value = 0.7480 
elapsed = 12.36 Round = 5       numFeature = 8.0000     r = 4.0000      nh = 23.0000    fact = 6.0000   Value = 0.7450 
elapsed = 25.61 Round = 6       numFeature = 12.0000    r = 8.0000      nh = 44.0000    fact = 7.0000   Value = 0.7490 
elapsed = 8.03  Round = 7       numFeature = 12.0000    r = 9.0000      nh = 9.0000     fact = 2.0000   Value = 0.7470 
elapsed = 14.24 Round = 8       numFeature = 8.0000     r = 4.0000      nh = 45.0000    fact = 2.0000   Value = 0.7620 
elapsed = 9.05  Round = 9       numFeature = 7.0000     r = 8.0000      nh = 20.0000    fact = 10.0000  Value = 0.7390 
elapsed = 17.53 Round = 10      numFeature = 12.0000    r = 9.0000      nh = 20.0000    fact = 6.0000   Value = 0.7410 
elapsed = 4.77  Round = 11      numFeature = 9.0000     r = 2.0000      nh = 7.0000     fact = 2.0000   Value = 0.7570 
elapsed = 8.87  Round = 12      numFeature = 6.0000     r = 1.0000      nh = 40.0000    fact = 8.0000   Value = 0.7730 
elapsed = 14.16 Round = 13      numFeature = 8.0000     r = 6.0000      nh = 41.0000    fact = 10.0000  Value = 0.7390 
elapsed = 21.61 Round = 14      numFeature = 9.0000     r = 6.0000      nh = 47.0000    fact = 7.0000   Value = 0.7620 
elapsed = 5.14  Round = 15      numFeature = 13.0000    r = 3.0000      nh = 3.0000     fact = 5.0000   Value = 0.7260 
elapsed = 5.66  Round = 16      numFeature = 6.0000     r = 9.0000      nh = 1.0000     fact = 9.0000   Value = 0.7090 
elapsed = 7.26  Round = 17      numFeature = 9.0000     r = 2.0000      nh = 25.0000    fact = 1.0000   Value = 0.7550 
elapsed = 32.09 Round = 18      numFeature = 11.0000    r = 7.0000      nh = 38.0000    fact = 6.0000   Value = 0.7600 
elapsed = 17.18 Round = 19      numFeature = 5.0000     r = 3.0000      nh = 46.0000    fact = 6.0000   Value = 0.7500 
elapsed = 11.08 Round = 20      numFeature = 6.0000     r = 4.0000      nh = 20.0000    fact = 6.0000   Value = 0.7590 
elapsed = 4.47  Round = 21      numFeature = 6.0000     r = 2.0000      nh = 4.0000     fact = 2.0000   Value = 0.7390 
elapsed = 5.27  Round = 22      numFeature = 6.0000     r = 2.0000      nh = 21.0000    fact = 10.0000  Value = 0.7520 
elapsed = 7.96  Round = 23      numFeature = 7.0000     r = 1.0000      nh = 41.0000    fact = 7.0000   Value = 0.7730 
elapsed = 12.31 Round = 24      numFeature = 7.0000     r = 3.0000      nh = 41.0000    fact = 3.0000   Value = 0.7730 
elapsed = 7.64  Round = 25      numFeature = 8.0000     r = 4.0000      nh = 16.0000    fact = 7.0000   Value = 0.7420 
elapsed = 6.24  Round = 26      numFeature = 13.0000    r = 5.0000      nh = 6.0000     fact = 1.0000   Value = 0.7600 
elapsed = 8.41  Round = 27      numFeature = 11.0000    r = 8.0000      nh = 8.0000     fact = 7.0000   Value = 0.7420 
elapsed = 8.48  Round = 28      numFeature = 6.0000     r = 7.0000      nh = 15.0000    fact = 2.0000   Value = 0.7580 
elapsed = 10.11 Round = 29      numFeature = 12.0000    r = 6.0000      nh = 17.0000    fact = 4.0000   Value = 0.7310 
elapsed = 6.03  Round = 30      numFeature = 8.0000     r = 3.0000      nh = 12.0000    fact = 1.0000   Value = 0.7540 
elapsed = 8.58  Round = 31      numFeature = 13.0000    r = 5.0000      nh = 18.0000    fact = 2.0000   Value = 0.7300 
elapsed = 6.78  Round = 32      numFeature = 13.0000    r = 2.0000      nh = 15.0000    fact = 8.0000   Value = 0.7320 
elapsed = 9.54  Round = 33      numFeature = 10.0000    r = 3.0000      nh = 37.0000    fact = 9.0000   Value = 0.7420 
elapsed = 8.19  Round = 34      numFeature = 6.0000     r = 1.0000      nh = 42.0000    fact = 3.0000   Value = 0.7630 
elapsed = 12.34 Round = 35      numFeature = 7.0000     r = 2.0000      nh = 43.0000    fact = 8.0000   Value = 0.7570 
elapsed = 20.47 Round = 36      numFeature = 7.0000     r = 8.0000      nh = 39.0000    fact = 2.0000   Value = 0.7670 
elapsed = 11.51 Round = 37      numFeature = 5.0000     r = 9.0000      nh = 18.0000    fact = 3.0000   Value = 0.7540 
elapsed = 32.71 Round = 38      numFeature = 7.0000     r = 7.0000      nh = 40.0000    fact = 6.0000   Value = 0.7540 
elapsed = 28.33 Round = 39      numFeature = 7.0000     r = 9.0000      nh = 38.0000    fact = 5.0000   Value = 0.7550 
elapsed = 22.87 Round = 40      numFeature = 12.0000    r = 6.0000      nh = 48.0000    fact = 3.0000   Value = 0.7580 

 Best Parameters Found: 
Round = 12      numFeature = 6.0000     r = 1.0000      nh = 40.0000    fact = 8.0000   Value = 0.7730                                  maxit = 100, control = c(100, 50, 8))

Melhor 10

OPT_Res %$% History %>% dp$arrange(desc(Value)) %>% head(10) %>%
    dp$select(-Round) -> best.init
  best.init
   numFeature r nh fact Value
1           6 1 40    8 0.773
2           7 1 41    7 0.773
3           7 3 41    3 0.773
4           7 8 39    2 0.767
5           6 1 42    3 0.763
6           8 4 45    2 0.762
7           9 6 47    7 0.762
8          11 7 38    6 0.760
9          13 5  6    1 0.760
10          6 4 20    6 0.759

Valor - F1 médio. Não é um desempenho ruim.

Para acelerar os cálculos, precisamos reescrever algumas funções do pacote. A primeira coisa é substituir todos os ncol(), nrow(), que são muitos, por dim()[1], dim()[2]. Elas são executadas dezenas de vezes mais rápido. E provavelmente, como há apenas operações de matriz, usar GPU (pacote gpuR). Não poderei fazer isso sozinho, posso sugerir ao desenvolvedor?

Boa sorte

 
Vladimir Perervenko:

Verifiquei a otimização do conjunto de redes neurais do documento PartVI. Nem o maxit nem o controle têm um tempo de execução visível. A maior influência é o número de neurônios na camada oculta. Deixei assim

Melhor 10

Valor - F1 médio. Não é um desempenho ruim.

Para acelerar os cálculos, precisamos reescrever algumas funções do pacote. A primeira coisa é substituir todas as funções ncol(), nrow() por dim()[1], dim()[2]. Elas são executadas dezenas de vezes mais rápido. E provavelmente, como há apenas operações de matriz, usar GPU (pacote gpuR). Não poderei fazer isso sozinho, posso sugerir isso ao desenvolvedor?

Boa sorte

Otimize apenas alguns parâmetros. Eu otimizei 20 partes e, quando os pontos conhecidos se tornaram 20-40 partes, o cálculo apenas do GPfit levou dezenas de minutos; nessas condições, você verá a aceleração.

E o número de neurônios afeta apenas o tempo de cálculo do próprio NS.

 
elibrarius:

Basta otimizar alguns parâmetros. Eu otimizei 20 peças e, quando os pontos conhecidos se tornaram 20-40 peças, o cálculo apenas do GPfit levou dezenas de minutos.

E o número de neurônios afeta apenas o tempo de cálculo do próprio NS.

Acho que sim.

 
Como exatamente eu o utilizo, como organizo meu sistema de negociação em uma rede neural ou em uma negociação automatizada EA mais complexa?
[Excluído]  
Olá, Vladimir,
Estou trabalhando nos derivados do MACD para dispositivos móveis Android e estou precisando de ajuda para escrever um algoritmo preciso no formulário de preenchimento de parâmetros de propriedades.
Obrigado,
Paulo