Discussão do artigo "Construindo uma rede neural profunda do zero em linguagem MQL" - página 2

 
Anddy Cabrera #:

Oi Li,

Atualizei o artigo com dois arquivos de demonstração. Um para MQL5 e outro para MQL4. O DeepNeuralNetwork.mqh pode ser usado para ambos, mql5 e mql4.


De qualquer forma, estou anexando esses arquivos aqui para mostrar como usá-los.


Se tiver mais perguntas, entre em contato comigo.

Realmente muito bom o artigo, experimentei a demonstração e notei que apenas yValues[1] pode fornecer valores superiores a 0,5, os valores de yValues[0] e yValues[2] são de no máximo 0,2 ou 0,3.
 
nail sertoglu #:

Obrigado pelos códigos que você compartilhou. Tentei entender a maneira como você os usa.


Tenho algumas dúvidas em relação a yValues[0] , yValues[1], yValues[2], pois eles NÃO estão mudando e sempre 0 ,33333 mas_xValues[1,2,3] estão mudando com a nova barra; portanto, se a negociação for baseada em yValues, não vejo NENHUMA NEGOCIAÇÃO, enquanto a NEGOCIAÇÃO OCORRE quando as condições são baseadas em _xValues.

A culpa é minha ou simplesmente um erro de codificação em seu código original?

Atualize a função a seguir para retornar `bool` em vez de `void` e você verá que houve um número incorreto de pesos fornecidos.

bool SetWeights(double &weights[])
     {
      int numWeights=(numInput*numHiddenA)+numHiddenA+(numHiddenA*numHiddenB)+numHiddenB+(numHiddenB*numOutput)+numOutput;
      if(ArraySize(weights)!=numWeights)
        {
         printf("Bad weights length (%i), expected %i", ArraySize(weights), numWeights);
         return false;
        }

Observe que você também precisa atualizar os pesos no topo do arquivo (não é suficiente atualizá-los somente quando você inicializa a rede :P

#define  SIZEI 25 // entrada * oculto A
#define  SIZEA 25 // A oculto * B oculto
#define  SIZEB 15 // saída B * oculta
 
Oi Anddy,

Este é um artigo muito bom.
Tenho algumas perguntas.
1) Posso usar a ativação Sigmoid e Tan-h como saída em um neurônio de várias camadas por combinação?
2) É necessário atualizar os pesos na parte superior do arquivo, conforme sugerido por Karlis Balcers?
#define  SIZEI 20 // (entrada * A oculto)+A oculto
#define  SIZEA 25 // (hidden A * hidden B)+hidden B
#define  SIZEB 18 // (hidden B * output)+output
Observação: SIZEI deve ser 20 e SIZEB deve ser 18, correto?
3) Anexei um diagrama de rede neural profunda conforme descrito neste artigo, está correto?

Muito obrigado


EADNN

 
Ele funciona como um algoritmo genético com otimizador, selecionando valores que melhoram o resultado final
 
<Deleted>
 

Bela animação.

Uma rede neural de duas camadas é uma rede neural "superficial", não uma rede neural profunda. As redes neurais profundas incluem redes com mais de três camadas ocultas. Devido às peculiaridades do treinamento dessas redes neurais, foram desenvolvidos métodos de aprendizagem profunda.

O artigo, como um exemplo de programação em MCL, provavelmente é útil. Para se familiarizar com o tópico de MLP - certamente necessário. Como exemplo de aplicação de rede neural - não é completo e está muito aquém do estado atual do tópico.

Em geral, sem a otimização dos hiperparâmetros, a rede neural não oferece qualidade satisfatória.

Eu simplesmente não entendo por que construir uma bicicleta com meios improvisados, se há um mar de programas prontos sobre esse tópico?

 
Para entender NS é bom e claro.
 

Correção. Há uma definição de rede profunda no artigo. Eu não a vi.

O processo de otimização dos pesos de uma rede neural usando genética não é literalmente "aprendizado". Afinal, trata-se de otimização. O treinamento usa métodos completamente diferentes. Embora essa variante do uso de redes neurais também seja praticada e com bastante sucesso.

Para compreender o funcionamento de uma rede neural, é importante entender como ela é treinada por meio da retropropagação de erros. Bem, já estou implicando com você :)

Boa sorte

 
Muito obrigado ao autor pelo artigo. Como uma pessoa que está longe das redes neurais, ele me ajudou muito a entender a essência das coisas e foi muito interessante do ponto de vista de uma maior familiarização com o tópico. Mais uma vez, obrigado!
 

Existe alguma maneira de incorporar a retropropagação de erros nessa rede?

Por alguma razão, há uma opinião de que essa rede seria mais flexível e forneceria entradas melhores - outputs....

Uma rede com retropropagação de erros não é uma rede completamente diferente, é?