O "New Neural" é um projecto de motor de rede neural Open Source para a plataforma MetaTrader 5. - página 71

 
Joo:

Se considerarmos o treinamento de neurônios como nível micro (ciclos de processamento de matriz independente em AG, cálculo de neurônios individuais de uma rede, etc.) e nível macro (o PF inteiro), então não temos dúvidas e problemas com o primeiro - tudo funciona em paralelo e funcionará bem na GPU.

Mas há um problema com o nível macro. Antes de mais, suspeito que isso não seja possível devido a limitações da quantidade de informações tratadas na GPU. Poderíamos trabalhar em torno disso, usando o testador regular e a nuvem (cada nível macro será transferido para agentes separados, e lá será processado em nível micro - se o host permitir, é claro). Mas não temos as ferramentas para controlar o testador externamente para usar a AG externa.

Portanto, teremos de nos limitar à aceleração no nível micro. A aceleração também será muito decente, uma vez que as malhas e os próprios GAs abundam em cálculos independentes um do outro.

Quanto à própria UGA, se você não tocar no ajuste fino para OpenCL, você não tem praticamente nada para melhorar (talvez apenas alguns fragmentos de código, mas não será útil graças àqueles que participaram do tópico de discussão do algoritmo no artigo). Você só pode tentar selecionar configurações de UGA especificamente para redes de treinamento.


As GPUs modernas têm 1GB de RAM ou mais.

Não consigo imaginar uma amostra de treino de tamanho maior.

Eu estou bem com nível macro - testado )

Seria razoável usar a seguinte arquitetura para GA: GA em si na CPU, enquanto cálculos pesados de FF na GPU

 
ela.humana:

Posso ter um pequeno exemplo para usar no MT5?


Um exemplo de quê? Um indicador de rede neural, uma estratégia de rede neural, ...? ?
 
yu-sha:

As GPUs modernas têm 1 GB de RAM ou mais

Mal consigo imaginar uma amostra de treino de um tamanho maior.

Se não estou enganado, as placas gráficas modernas têm dois tipos de RAM - a partilhada, que pode ser de vários GBytes e é bastante lenta, e a que cada processador de GPU individual tem - rápida, mas uma pequena quantidade de algumas centenas de KB. O meu raciocínio era que é aqui que o problema pode surgir.

yu-sha:

Não há nada de errado com o nível macro - testado )

Mas, se você o diz, então eu aceito a sua palavra e agora estou calmo. :)

yu-sha:

Para GA é razoável usar a seguinte arquitetura: GA em si na CPU, e cálculos de FF pesados na GPU

Bem, é uma questão de técnica, como eles dizem. Podias fazê-lo dessa maneira. Até onde eu sei, OpenCL permite que você selecione no código quais núcleos devem ser usados para realizar cálculos - na CPU ou GPU.

 
yu-sha:
Um exemplo de quê? Um indicador de rede neural, uma estratégia de rede neural, ...? ?
Como configurar uma arquitetura de rede solta (não totalmente conectada), onde se alimentar, onde tirar, onde estão os pesos?
 
Joo:

Se não estou enganado, as placas gráficas modernas têm dois tipos de memória operacional - a memória compartilhada, que pode ser de vários GBytes e que é bastante lenta, e a que cada processador de GPU individual tem - rápida, mas uma pequena quantidade de algumas centenas de KB. Eu raciocinei que é aqui que o problema pode surgir.

O "lento" comum é o analógico completo de DDR para CPU (~0.75 - 1.00GHz - não muito lento)

Rápido é a contrapartida da memória cache da CPU.

As GPUs permitem gerir esta mesma memória on-chip (cache), ao contrário das CPUs (posso estar errado, mas de alguma forma não me deparei com tal questão).

Mas todas estas são questões adicionais de optimização, pode viver sem elas.

 

ela.humana:

yu-sha:
Um exemplo de quê? Indicador de rede neural, estratégia de rede neural, ... ?
Como configurar uma arquitetura de rede solta (não totalmente conectada), onde se alimentar, onde tirar, onde estão os pesos?

Sim, sim, precisamos de um exemplo de empurrão e depois vamos descobrir.

Uma AG padrão e uma nuvem ajudariam a fazer o cálculo paralelo do FF. Especialmente como Renat prometeu:

De jeito nenhum, o testador GA é limitado a 64 bits de busca, e para pesos de treinamento você precisa de 16-64 bits para cada peso (depende da precisão da busca), e os pesos podem ser de até 12 mil, e podem ser dezenas e centenas de milhares. A UGA pode lidar muito bem com isso, enquanto o testador não pode.

Então, ou MQ deve ser solicitado para atualizar a GA (o que tenho feito sem sucesso por dois anos) ou UGA será muito mais lento do que em cluster.

 
yu-sha:

Lento" comum - este é o analógico de CPU completo do DDR (~0.75 - 1.00GHz - não muito lento)

Rápido - esta é a contrapartida para a memória cache da CPU.

As GPUs permitem gerir esta mesma memória on-chip (cache), ao contrário das CPUs (posso estar errado, mas de alguma forma não me deparei com tal questão).

Mas todas estas são questões de optimização adicionais, e podemos viver sem elas.

Não é o ponto, memória, e na GPU será difícil implementar as voltas da lógica de objetos, eu tenho uma boa idéia de como implementar o NS como uma interação complexa de objetos dentro dos quais existem funções de cálculo da GPU (isto é sobre o nível micro), mas eu não posso imaginar como esse objeto complexo codifica todo esse NS para deslizar a GPU como vários FF com diferentes conjuntos de pesos (nível macro) ????

A questão é retórica, embora se alguém imaginar que não se importa em ouvir.

 

Eu tenho uma ideia engraçada:

Talvez para pedir ao MQ API para definir tarefas para cluster?

para distribuir a tarefa diretamente da MQL5, contornando o testador. É claro que é uma tarefa complicada, muitas verificações têm de ser feitas, mas é controlável.

Já o dominei, mas tenho de fazer algum trabalho.

 
Urain:

Sim, sim, precisamos de um exemplo de empurrão e depois vamos descobrir.

Exemplo 1:

Declaração de tarefa:

- precisamos de restaurar o algoritmo do indicador, cujas fontes não estão disponíveis (ou é um indicador de "redesenho" - a propósito, não é um mau professor para NS), mas sabemos os valores em cada barra

- os valores do indicador estão no intervalo (-1;+1)

Entradas:

- sabemos (suspeito?) que este indicador usa os últimos 10 preços de fecho


Exemplo #2:

Declaração de Problemas:

- Precisamos encontrar a estratégia de negociação da rede neural que melhor negocia (maximizar Lucro/MaxDD) em um trecho da história

Dados de entrada:

- MACD normalizado (13,35), MACD (50,100), RSI(8), RSI(13)

Exemplo #3:

Declaração de tarefa:

- Para ensinar a uma rede neural uma tabela de multiplicação

Dados de entrada:

- multiplicadores de x,y na faixa (-1;+1)

Você pode propor o seu próprio exemplo e, se for possível, eu lhe mostrarei a arquitetura de rede em XML.

 
yu-sha:

Você pode sugerir o seu próprio exemplo e, se possível, posso mostrar-lhe a arquitectura da rede em XML

e mais importante, o código fonte de como esta arquitetura foi criada, como o arquivo XML é gerado.

Razão: