Olá, Dimitriy,
Descobri uma nova sequência NN: aproveite <3
![]()
A imagem também pode ser simplesmente arrastada para o texto ou colada com Ctrl+V
Descobri uma nova sequência NN: aproveite <3
bool CreateDescriptions(CArrayObj *actor, CArrayObj *critic)
{
//---
CLayerDescription *descr;
//---
se(!ator)
{
ator = new CArrayObj();
se(!ator)
return false;
}
if(!critic)
{
critic = new CArrayObj();
se(!crítico)
return false;
}
//--- Ator
ator.Clear();
//--- Camada de entrada
Se(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronBaseOCL;
int prev_count = descr.count = (HistoryBars * BarDescr);
descr.window = 0;
descr.activation = None;
descr.optimisation = ADAM;
se(!ator.Add(descr))
{
delete descr;
return false;
}
//--- camada 1
se(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBatchNormOCL;
descr.count = prev_count;
descr.batch = 1000;
descr.activation = None;
descr.optimisation = ADAM;
se(!ator.Add(descr))
{
delete descr;
return false;
}
//--- camada 2
se(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = BarDescr;
descr.window = HistoryBars;
descr.step = HistoryBars;
descr.window_out = 8;
descr.activation = LReLU;
descr.optimisation = ADAM;
se(!ator.Add(descr))
{
delete descr;
return false;
}
//--- camada 3
se(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count;
descr.window = 8;
descr.step = 8;
descr.window_out = 4;
descr.activation = LReLU;
descr.optimisation = ADAM;
se(!ator.Add(descr))
{
delete descr;
return false;
}
//--- camada 4
se(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
prev_count = descr.count = 1024;
descr.optimise = ADAM;
descr.activation = LReLU;
se(!ator.Add(descr))
{
delete descr;
return false;
}
//--- camada 5
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
prev_count = descr.count = 1024;
descr.optimise = ADAM;
descr.activation = LReLU;
se(!ator.Add(descr))
{
delete descr;
return false;
}
// Camada Softmax
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronSoftMaxOCL;
descr.count = 1024;
descr.optimise = ADAM;
descr.activation = LReLU;
se(!ator.Add(descr))
{
delete descr;
return false;
}
// Camada de atenção multicamada multicabeça
se(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 1024;
descr.optimisation = ADAM;
descr.activation = LReLU;
se(!ator.Add(descr))
{
delete descr;
return false;
}
//--- camada 6
se(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronConcatenate;
descr.count = LatentCount;
descr.window = prev_count;
descr.step = AccountDescr + 6;
descr.optimise = ADAM;
descr.activation = SIGMOID;
se(!ator.Add(descr))
{
delete descr;
return false;
}
//--- camada 7
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
se(!ator.Add(descr))
{
delete descr;
return false;
}
//--- camada 8
se(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
se(!ator.Add(descr))
{
delete descr;
return false;
}
//--- camada 9
se(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 6;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
se(!ator.Add(descr))
{
delete descr;
return false;
}
//--- Crítico
crítico.Clear();
//--- Camada de entrada
se(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
prev_count = descr.count = LatentCount;
descr.window = 0;
descr.activation = None;
descr.optimisation = ADAM;
se(!critic.Add(descr))
{
excluir descr;
return false;
}
//--- camada 1
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronConcatenate;
descr.count = 512;
descr.window = prev_count;
descr.step = 6;
descr.optimise = ADAM;
descr.activation = LReLU;
se(!critic.Add(descr))
{
excluir descr;
return false;
}
//--- camada 2
se(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 512;
descr.activation = LReLU;
descr.optimisation = ADAM;
se(!critic.Add(descr))
{
excluir descr;
return false;
}
//--- camada 3
se(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 512;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!critic. Add(descr))
{
delete descr;
return false;
}
--- camada 4
if(!( descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 1;
descr.optimise = ADAM;
descr.activation = None;
if(!critic. Add(descr))
{
delete descr;
return false;
}
//---
return true;
}
A imagem também pode ser simplesmente arrastada para o texto ou colada com Ctrl+V
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Novo artigo Redes neurais de maneira fácil (Parte 49): Soft Actor-Critic (SAC) foi publicado:
Continuamos nossa exploração dos algoritmos de aprendizado por reforço na resolução de problemas em espaços de ação contínua. Neste artigo, apresento o algoritmo Soft Actor-Critic (SAC). A principal vantagem do SAC está em sua capacidade de encontrar políticas ótimas que não apenas maximizam a recompensa esperada, mas também têm a máxima entropia (diversidade) de ações.
Neste artigo, proponho apresentar a vocês mais um algoritmo - Soft Actor-Critic (SAC). Este algoritmo foi introduzido pela primeira vez no artigo "Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor" (janeiro de 2018). Ele foi apresentado praticamente ao mesmo tempo que o TD3 e compartilha algumas semelhanças, mas também possui diferenças nos algoritmos. O principal objetivo do SAC é maximizar a recompensa esperada levando em consideração a máxima entropia da política, permitindo encontrar soluções ótimas diversas em ambientes estocásticos.
O Soft Actor-Critic utiliza um Ator com política estocástica. Isso significa que, em um estado S, o Ator pode escolher uma ação A' de todo o espaço de ações com uma certa probabilidade Pa'. Em outras palavras, a política do Ator em cada estado específico permite escolher não apenas uma ação ótima específica, mas qualquer uma das ações possíveis (mas com uma probabilidade determinada). E durante o treinamento, o Ator aprende essa distribuição de probabilidade para obter a máxima recompensa.
Essa característica da política estocástica do Ator permite explorar diversas estratégias e encontrar soluções ótimas que podem estar ocultas ao usar uma política determinística. Além disso, a política estocástica do Ator leva em consideração a incerteza no ambiente circundante. Na presença de ruído ou fatores aleatórios, essa política pode ser mais robusta e adaptável, permitindo gerar ações diversas para interagir eficazmente com o ambiente circundante.
Autor: Dmitriy Gizlyk