Pergunta sobre programação de redes neurais - página 6

 
Vinin:


Eu fiz uma grade normal de 256 entradas, uma camada oculta por cada 256 neurônios. E uma camada de saída de um neurônio. E eu treinei tudo perfeitamente no MT4

1. Com algoritmo de testador genético ou com algoritmo de aprendizagem de malha interna?

 
Reshetov:
Pelo algoritmo genético do testador ou por um algoritmo de aprendizado interno da malha?

Tudo feito através de um roteiro. O algoritmo interno
 
Embora houvesse variantes com otimização. Eu fiz um contador e salvei as melhores opções em variáveis globais. Reescreveu-os quando o resultado melhorou. Havia um ajuste perfeito.
 
A questão é que eu tenho todos os pesos e limiares capturados pelo testador GA, ver parâmetros de entrada no relatório, exceto para os últimos 3. A curva de aprendizado é alta, já que a otimização de 10000 barras não leva mais do que 5 minutos. Além disso, não preciso de 256 entradas, já que três é bom o suficiente - mesmo nelas a grade é retrabalhada em preto e branco.
 
Reshetov:


Não preciso de 256 entradas, já que três é suficiente - mesmo com elas, a grade é retrabalhada em preto.

Isto já está fora do escopo do tópico. Não vale a pena discutir. A cada um de seus próprios
 
Vinin:

Isto já está fora do escopo do tópico. Não há necessidade de discuti-lo. A cada um o seu.


O tema estagnou há muito tempo, não fará nenhum mal...

Reshetov:


E além disso, não preciso de 256 entradas, já que três são ruins o suficiente - até mesmo eles reciclam a grade no preto.


Você tem certeza de que ele se retrai? Talvez lhe falte simplesmente "generalização e poder computacional" devido à fraqueza da arquitetura?

O especialista no cruzamento dos dois vagões é ajustado no otimizador, mas só trabalhará em um frente se você tiver muita sorte. E obviamente não se trata de sobretreinamento...

Na verdade, é fácil combater o excesso - aumentar o tamanho da amostra de treinamento para uma vantagem estável no controle ou OOS. NS não consegue se lembrar de toda a amostra, e só tem que generalizar. Neste caso, a diminuição das características do sistema é inevitável, mas aqui depende mais das entradas, por exemplo.

 
Figar0:


O tema há muito que devia ter sido discutido, não há mal nenhum...

Mas é melhor não discutir com os moderadores. Pelo menos as regras que nós IMHO não violamos e no caso do que temos o direito de apelar para a administração.

Figar0:


Você tem certeza de que a retreinamento? Talvez lhe falte apenas "generalização e poder computacional" devido a uma arquitetura fraca?

Sim, tenho certeza.

É fácil de provar. A questão é que se os resultados da otimização forem muito granulosos, os resultados para frente não serão bem sucedidos para eles. Mas podemos ordenar estes mesmos resultados por indicadores e depois procurar mais valores para a terra onde os avanços já dão sucesso. Seria mais correto dizer que os atacantes bem sucedidos estão lotados de resultados de otimização onde esses mesmos resultados não são muito graves, mas também não são muito parfuídos.

O exemplo mais simples. Tomamos um intervalo decente de histórico, removemos o Take and Stop e ajustamos o TS para fazer leituras TC de VS em cada barra e usá-las para negociação. Isto é, se as leituras da grade estiverem contra a lã da posição aberta, nós a viramos. A grade é montada de tal forma que abre apenas alguns negócios e todos eles estão ganhando (não há fator de lucro). Eu não encontrei isto no perceptron de uma camada e até mesmo em redes padrão. A rede é muitas vezes errada lá, por isso realiza uma quantidade decente de negócios mesmo sem paradas e aquisições em uma longa história.

Suponho que isto se deva ao fato de eu ter modificado a primeira camada e ela de alguma forma conseguir alimentar agora as entradas dos dados ocultos estritamente linearmente separáveis. Mas quem sabe, já que meu projeto é muito mais simples do que o do Rosenblatt? A razão mais provável é que toda a rede é ajustada com GA para todos os parâmetros de entrada em uma única passagem e GA é como um tanque procurando por extrema, embora não diretamente, mas os dados multifatoriais para tal otimização são como dois dedos no asfalto, desde que haja um extremo distinto ou vários extremos. Por outro lado, devido à primitividade da primeira camada, ela é muito rápida e bastante afinada.

As modernas redes neurais IMHO foram longe demais ao complicar as camadas de entrada. Como resultado, eles não funcionam muito bem. E em uma rede multicamadas a primeira camada é a mais importante, pois influenciará o resultado final, dependendo do que ela produzir para a camada oculta. Afinal, uma grade normal é mais freqüentemente tripla, e as camadas ocultas e de saída já são um plano linear primitivo no espaço multidimensional.

Outro truque é a normalização dinâmica dos dados de entrada. Se aplicarmos a estática, qualquer mudança na volatilidade (ela certamente mudará para frente) afetará o resultado. Resolvi este problema em favor da dinâmica.

 
Reshetov:

....

E as entradas como na página anterior? É um declive escorregadio ali... Não consigo nem imaginar que tipo de feitiçaria poderia ter sido feita com a NS para obter resultados em uma forma tão primitiva. E qual é a verdade, onde quer que você tire uma amostra de treinamento, ela vai para cima no SOS? O resultado é realmente estável? E quanto aos outros pares e instrumentos? EURUSD é o mais fácil de prever.

Reshetov:

Tive que mexer na estratégia comercial a fim de evitar que a grade se adaptasse.

Eu também não entendo isso. NS deve dar sinais, e me parece ilógico dirigir NS pessoalmente por meio de TS na fase de treinamento. Aqui, de alguma forma, a abordagem é exatamente o oposto. Em que direção o TS foi torcido?

Reshetov:

Outro truque é a normalização dinâmica dos dados de entrada. Se aplicarmos a estática, qualquer mudança na volatilidade (ela certamente mudará para frente) afetará o resultado. Resolvi este problema em favor da dinâmica.

Eu também o pratico - às vezes funciona, às vezes não é tão bom assim. Também dependerá do input, mas esses inputs serão definitivamente beneficiados. É claro que a normalização dinâmica acrescenta informatividade à entrada, mas torna mais difícil a aprendizagem e, como a aprendizagem é "fácil", faz sentido que ela funcione para um resultado positivo.

 
Figar0:

E as entradas como na página anterior? É um declive escorregadio ali com o período de ondulação.

Eu tenho o período de ondulação como uma constante. Costumava ser um parâmetro de entrada, mas colecionei vários testes de avanço bem sucedidos e cheguei à conclusão de que eles dançam em torno desta constante.

Figar0:


Não consigo nem imaginar que truque de magia um NS poderia fazer para obter resultados usando um

...

Eu também não entendo isso. NS deve dar sinais, e dirigir NS através de TS no estágio de treinamento, pessoalmente, me parece ilógico. Aqui, de alguma forma, a abordagem é exatamente o oposto. Em que direção o TS foi torcido?

Todo este material não foi montado em um dia, mas sim em um longo tempo e pouco a pouco. Algumas coisas foram gradualmente acrescentadas, algumas foram polidas e algumas foram removidas do algoritmo.

O trabalho foi feito por:

1. Para minimizar o código. O método de Michelangelo: pegamos um bloco de pedra, cortamos coisas desnecessárias e conseguimos uma escultura (mais tarde este método foi atribuído a Occam e sua navalha).

2. contornando as restrições de otimização dos testadores

3. TC carregado a um tal nível de espessura para se livrar do encaixe

Figar0:

Então é verdade que onde quer que você pegue uma amostra de treinamento, ela vai para cima no OOS? O resultado é realmente estável? E quanto aos outros pares e instrumentos? EURUSD é o mais fácil de prever.

Os resultados no OOS são diferentes, há também ameixas. Seria surpreendente se, após resultados de ajuste consciente, a grade não drenasse no espalhamento. Eu não disse que todos eles eram lucrativos, eu disse que escolhi o mais "saboroso" (pode haver ainda mais "saborosos", pois não olhei para todos eles - há muitos por aí).

A única diferença em relação a outras estratégias: os avanços bem-sucedidos podem ser facilmente encontrados manualmente (ficam lotados quando os resultados são otimizados ) e a escolha é bastante ampla + fatias decentes por parâmetros de entrada individuais, ou seja, extrema com descidas suaves.

Entre outros pares eu testei um pouco em ouro e GBPUSD - mais ou menos o mesmo.

 
Reshetov:

O pessimismo é determinado pelas limitações do testador de estratégia, ou seja, se as faixas de valores de entrada forem grandes ou o número desses mesmos valores exceder o limite, o otimizador se recusa a começar. Portanto, afinal de contas existem limites.

Hoje eu finalmente terminei de construir uma rede neural escrita inteiramente em MQL4 com arquitetura 3:3:1 (três neurônios na entrada, três entradas ocultas, uma saída). Todas as camadas são configuradas usando o testador GA. Mas o problema é que para 1 camada você precisa de pelo menos 12 parâmetros de entrada, pelo menos com valores de -1 a 1 em passos de 1 (como Rosenblatt). Mas o otimizador não consegue lidar com tantos. Tive que me contornar e simplificar a primeira camada.

Em contraste com a malha de outra pessoa, a malha feita por ela mesma é melhor, pois pode ser atualizada. Por exemplo, além de tornar a primeira camada não-standard, acrescentei a normalização dinâmica dos dados de entrada.

Os sinais nas entradas são bastante primitivos:

Apesar da primitividade mencionada acima, a grade se mostra muito treinável, ou seja, pesos e limites são facilmente escolhidos de modo que os resultados dos testes se revelam sem um único erro (sem fator de lucro). Mas depois de tal encaixe, o teste de avanço começa imediatamente a cair sobre a propagação. Tive que mexer na estratégia comercial, de modo a não permitir que a rede se ajustasse.

Valeu a pena o esforço, embora tenha feito meu cérebro virar de dentro para fora:

Estes são os resultados do teste. De 1 a 273 negócios - otimização, depois teste de avanço.

E aqui está o teste de avanço:

Aqui estão os resultados do teste de avanço:

Relatório de teste de estratégia
RNN
Alpari-Demo (Build 409)

Símbolo EURUSD (Euro vs Dólar americano)
Período 1 Hora (H1) 2011.10.24 00:00 - 2012.01.13 23:59 (2011.10.24 - 2012.01.14)
Modelo Por preços abertos (somente para Consultores Especialistas com controle explícito de abertura de barra)
Parâmetros t1=54; t2=4; t3=48; x1=194; x2=128; x3=68; y1=1; y2=1; y3=-1; t4=136; sl=900; lots=1; mn=888;

Bares na história 2431 Carrapatos modelados 3862 Qualidade da simulação n/d
Erros de descasamento de cartas 0




Depósito inicial 10000.00



Lucro líquido 14713.00 Lucro total 40711.60 Perda total -25998.60
Rentabilidade 1.57 Pagamento previsto 88.10

Desembolso absoluto 2721.60 Máximo de drawdown 4800.00 (39.74%) Drawdown relativo 39.74% (4800.00)

Total de negócios 167 Posições curtas (% ganho) 101 (67.33%) Posições longas (% ganho) 66 (92.42%)

Ofícios rentáveis (% de todos) 129 (77.25%) Perdas comerciais (% do total) 38 (22.75%)
A maior comércio lucrativo 900.00 perdendo negócio -907.20
Média negócio lucrativo 315.59 perdendo comércio -684.17
Máximo ganhos contínuos (lucro) 13 (2557.00) Perdas contínuas (perda) 4 (-3605.40)
Máximo Lucro contínuo (número de vitórias) 3511.60 (11) Perda contínua (número de perdas) -3605.40 (4)
Média prêmios contínuos 4 perda contínua 1





O mais interessante é que mesmo na tabela podemos ver que a seção de otimização é pior do que a de frente. Isto raramente acontece. Embora eu tenha selecionado este como o melhor de muitos outros, ou seja, outros atacantes têm resultados muito piores do que os de otimização, mas ainda assim eles têm os melhores.


Obrigado pela dica! Você e Vinin são uma autoridade para mim. O mais interessante é que ambos estão certos e não sabem que estão indo em paralelo, em direção ao mesmo objetivo. Eu tirei, de um e do outro e agora estou esperando o resultado. Você está criando uma nova direção, mas uma direção muito difícil!!!
Razão: