Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 609

 
Sergey Chalyshev:


Jogue sua rede no lixo se ela reagir a valores de gpsh como este. Uma rede normal funciona e aprende em qualquer valor inicial, mesmo a zero.


Disparate.
 

  • Determinação de hiperparâmetros de DNN óptimos

Normalmente, os hiperparâmetros para uma rede neural incluem o número de camadas ocultas, o número de neurônios em cada camada oculta, as funções de ativação, inicialização e regularização aplicadas e o nível de treinamento. A estrutura de otimização do hiperparâmetro é mostrada na figura abaixo.

OptimHP

Fig. 1. Estrutura dos hiperparâmetros em uma rede neural e formas de otimizá-la

Há três maneiras de otimizar os hiperparâmetros:

  1. Pesquisa na rede
  2. Otimização genética
  3. Busca em grade Busca genética Otimização Bayesiana

No primeiro caso para cada hiperparâmetro definimos um vector com vários valores fixos. Então, usando caret::train() ou o nosso próprio script, treinamos o modelo em todas as combinações de valores de hiperparâmetros. Depois disso, é selecionado o modelo com a melhor métrica de qualidade de classificação e seus parâmetros serão aceitos como ótimos. A desvantagem deste método é que, ao definir uma grelha de valores, é provável que falhemos o óptimo.

O segundo método utiliza a possibilidade de busca estocástica dos melhores parâmetros com o uso de algoritmos genéticos. Já discutimos em detalhe vários algoritmos de otimização genéticaneste artigo. Portanto, não vamos repeti-los.

No terceiro caso é utilizada a abordagem Bayesiana (processos Gaussianos e IMS), que iremos testar neste artigo. Vamos usar o pacoterBayesianOptimization(versão 1.1.0). Para a teoria dos métodos utilizados, verJasper Snoek, Hugo Larochelle, Ryan P. Adams (2012) Practical Bayesian Optimization of Machine Learning Algorithms

Hiperparâmetros em redes neurais em geral podem ser divididos em dois grupos: global e local (nó). As globais incluem o número de camadas escondidas, o número de neurônios em cada camada, o nível de treinamento e torque, os pesos de inicialização dos neurônios. Os locais incluem o tipo de camada, função de ativação, dropout/dropconect e outros parâmetros de regularização.

 

Em geral, mais uma vez, recomenda-se muito treino com os mesmos dados.

Eu fiz alguns treinamentos manuais aqui e estou um pouco confuso. Eu esperava que a redução de erros fosse estável, mas salta.

Mesmo treinamentos repetidos na mesma estrutura de rede podem dar resultados com uma diferença de 3-5%, o que também pode interferir com a escolha correta da estrutura.

 

Pode sugerir algum outro comerciante que me possa treinar? Fui aconselhado por um conhecido a treinar (de Polikarp Brekhunov - mudado por Artyom Trishkin), quem sabe, talvez haja outros comerciantes que oferecem cursos de formação?

 
elibrarius:

Em geral, mais uma vez, recomenda-se muito treino com os mesmos dados.

Eu fiz alguns treinamentos manuais aqui e estou um pouco confuso. Estava à espera que a redução do erro fosse estável, mas salta.

Mesmo treinamentos repetidos na mesma estrutura de rede podem dar resultados com diferença de 3-5%, o que também pode interferir com a escolha correta da estrutura.

É assim que deve ser. A inicialização das escalas é feita com pequenos valores de números aleatórios (depende do tipo de inicialização). Para obter resultados reprodutíveis, é necessário colocar o FGS no mesmo estado antes de cada treino. É para isto que serve o set.seed().

Boa sorte.

 
Vladimir Perervenko:

É assim que deve ser. A inicialização dos pesos é feita com pequenos valores de números aleatórios (depende do tipo de inicialização). Para obter resultados reprodutíveis, é necessário colocar o FGS no mesmo estado antes de cada treino. É para isto que serve o set.seed().

Boa sorte,

Ah, bem, eu estava pré-treinamento em Darch RBM em 2 épocas com learnRate = 0.3.

 
Vladimir Perervenko:

  • Determinação de hiperparâmetros de DNN óptimos

No segundo caso utilizo a possibilidade de busca estocástica dos melhores parâmetros, utilizando algoritmos genéticos.

Para negociação, a idéia de otimização de modelos (TS) é altamente questionável, pois qualquer otimização busca picos / troughs, e não precisamos deles. Precisamos, idealmente, de planaltos que sejam tão grandes quanto possível. Estes planaltos devem ter uma propriedade notável: alterações nos parâmetros do modelo NÃO devem levar à evasão de planaltos.

Isto é sobre optimização.

Na verdade, aqui também devemos acrescentar o problema da estabilidade dos parâmetros do modelo que, se mudarem, estão dentro de um intervalo de confiança bastante estreito (5%). Parece-me que a estabilidade dos parâmetros do modelo resulta na situação em que o desempenho do modelo está num determinado patamar e se de repente obtivermos um resultado muito bom enquanto testamos o modelo, significa que atingimos o ponto mínimo, temos uma condição instável que nunca ocorrerá na prática, além disso, uma parada estará situada em torno deste ponto ótimo.

PS.

A propósito, no testador os desenvolvedores proporcionaram tal oportunidade de procurar por um platô por cor. Pessoalmente, utilizo o testador como ferramenta de acabamento e tomo parâmetros que se referem a um quadrado com quadrados da mesma cor à sua volta. Esta é uma clara expressão do meu conceito de planalto.

 
elibrarius:

Ah, bem, eu tenho feito 2 épocas de pré-aprendizagem em Darch RBM com learnRate = 0.3.

Dentro de darch() há um parâmetro semente = NULL por padrão. defina-o para algum estado, por exemplo semente = 12345.

Este é um pequeno valor de aprendizagem. Comece com learnRate = 0.7, numEpochs = 10 para RBM e NN. Mas estes são os dados do tecto. Você precisa otimizar para um conjunto de dados específico.

Boa sorte.

 
Vladimir Perervenko:
Existe um parâmetro semente = NULL dentro da função darch() por padrão. Ajuste-o para um determinado estado, por exemplo semente = 12345.

Este é um pequeno valor de aprendizagem. Comece com learnRate = 0.7, numEpochs = 10 para RBM e NN. Mas isto são dados do tecto. Você precisa otimizar para um conjunto de dados específico.

Boa sorte.

Obrigado! Eu vou tentar.
 
SanSanych Fomenko:

Para negociação, a idéia de otimização de modelos (TS) parece altamente questionável, pois qualquer otimização está procurando por picos / troughs, e nós não precisamos deles. Precisamos, idealmente, de platôs planos, o maior possível. Estes planaltos devem ter uma propriedade notável: alterações nos parâmetros do modelo NÃO devem levar à evasão de planaltos.

Isto é sobre optimização.

Na verdade, aqui também devemos acrescentar o problema da estabilidade dos parâmetros do modelo que, se mudarem, estão dentro de um intervalo de confiança bastante estreito (5%). Parece-me que a estabilidade dos parâmetros do modelo resulta na situação em que o desempenho do modelo está num determinado patamar e se de repente obtivermos um resultado muito bom enquanto testamos o modelo, significa que atingimos o ponto mínimo, temos uma condição instável que nunca ocorrerá na prática, além disso, uma parada estará situada em torno deste ponto ótimo.

PS.

A propósito, no testador os desenvolvedores proporcionaram tal oportunidade de procurar por um platô por cor. Pessoalmente, utilizo o testador como ferramenta de acabamento e tomo parâmetros que se referem a um quadrado com quadrados da mesma cor à sua volta. Esta é uma expressão clara do meu conceito de "plateau".

1. De que optimização estás a falar? Qual planalto? Qual modelo? Se você está falando de uma rede neural, seria estranho não treinar (otimizar parmetros) o DNN antes de usá-lo.

2. Que parâmetros do modelo(?) devem ser estáveis?

Não entendo os teus pensamentos.

Eu estava falando em otimizar os hiperparâmetros do DNN, o que deve ser feito necessariamente e não no testador.

Razão: