A crescente popularidade do Deep Reinforcement Learning (DRL) na esfera da economia pode ser atribuída à sua habilidade de lidar com sistemas econômicos intrincados e dinâmicos. Este discurso se esforça para navegar pela base matemática do DRL e iluminar suas possíveis aplicações no âmbito da economia, com ênfase especial no projeto arquitetônico do DRL e sua eficácia demonstrável em várias implementações econômicas.
Os componentes da aprendizagem profunda por reforço
No centro das técnicas de aprendizagem profunda (DL) estão multidões de neurônios operando em simbiose em várias arquiteturas em camadas, cujo objetivo principal é a execução de tarefas de aprendizagem específicas. Esses neurônios interconectados interagem com os dados recebidos em conjunto com uma função de perda, um processo que permite a recalibração constante de seus pesos individuais, otimizando assim sua capacidade de se adequar às características do fluxo de dados recebido. Na estrutura de várias camadas, cada nó utiliza a saída das camadas anteriores para formar representações que se aproximam e simplificam cada vez mais os dados de entrada primários. Ao mesmo tempo, vários neurônios implementam configurações de peso diferentes para interpretar os mesmos dados de forma diferente e em paralelo.
Por outro lado, a Aprendizagem por Reforço (RL) oferece uma base matemática para facilitar a aprendizagem autônoma impulsionada por encontros experienciais. Dentro da estrutura da RL, os agentes autônomos se envolvem diretamente com o ambiente, executando ações que aumentam gradativamente sua eficiência operacional. Esse aprimoramento é obtido por meio de uma metodologia de tentativa e erro que visa maximizar as recompensas cumulativas, tudo isso sem a necessidade de dados rotulados.
Aprendizado por reforço profundo: A fusão de potenciais
O aprendizado por reforço profundo (DRL) representa a união bem-sucedida dos pontos fortes inerentes ao DL e ao RL. Ele se diferencia por demonstrar escalabilidade, permitindo assim sua aplicação a problemas de alta dimensão e lidando de forma eficaz com os padrões ruidosos e não lineares inerentes aos dados econômicos.
Ao fundir as metodologias de RL e DL, a DRL aproveita a aproximação robusta de funções e as propriedades de aprendizado de representação das redes neurais profundas (DNN). Equipado com essas ferramentas, ele navega por padrões de dados econômicos complexos e não lineares com um nível de eficiência que o diferencia. Esse amálgama de RL e DL, juntamente com a potência da DNN, capacita o DRL a superar os desafios impostos pela natureza intrincada dos sistemas econômicos.
Formulação matemática do DRL em finanças e opções binárias
O problema de RL para o agente que lida com um ambiente enquanto o objetivo é maximizar as recompensas cumulativas pode ser modelado com um Processo de Decisão de Markov (MDP) com um conjunto de 5 itens (S, A, T, R, λ), em que S (espaço de estado), A (espaço de ação), T ∈ [0,1] (função de transição), R (função de recompensa) e γ ∈ [0,1] (fator de desconto). Utilizando como base o estudo “Comprehensive Review of Deep Reinforcement Learning Methods and Applications in Economics“, O agente de RL tem como objetivo buscar o retorno esperado ideal com base na função de valor Vπ(s) por:
Vπ(s) = E(∑k=0∞γkrk+t|st=s. π) onde V* = maxπ∈Π Vπ(s)
De forma análoga, a função de valor Q pode ser expressa como:
Qπ(s,a) = E(∑k=0∞γkrk+t|st=s,at=a. π) onde Q* = maxπ∈ Π Qπ(s,a)
𝑉𝜋(𝑠)=𝔼(∑∞𝑘=0𝛾𝑘𝑟𝑘+𝑡|𝑠𝑡=𝑠. 𝜋) where 𝑉∗=max𝜋∈Π 𝑉𝜋(𝑠)
onde:
𝑟𝑡=𝔼𝑎~𝜋(𝑠𝑡,.)ℛ(𝑠𝑡,𝑎, 𝑠𝑡+1)
ℙ(𝑠𝑡+1|𝑠𝑡, 𝑎𝑡)=T(𝑠𝑡. 𝑎𝑡. 𝑠𝑡+1) with 𝑎𝑡~𝜋(𝑠𝑡)
A Q value function pode ser expressa como:
𝑄𝜋(𝑠.𝑎)=𝔼(∑∞𝑘=0𝛾𝑘𝑟𝑘+𝑡|𝑠𝑡=𝑠.𝑎𝑡=𝑎. 𝜋) where 𝑄∗=max𝜋∈Π 𝑄𝜋(𝑠.𝑎)
Em operações envolvendo opções binárias (onde o investidor tenta capturar rapidamente a tendência do mercado), como muitos traders utilizam na Binary Deriv, o algoritmo de Q-learning é modificado com a utilização do operador Bellman (representado por ℬ):
𝑄∗(𝑠.𝑎)=(ℬ𝑄∗) (𝑠.𝑎)
A expressão técnica do operador Bellman fica:
(ℬ𝐾)(𝑠,𝑎)=∑𝑠́ ∈𝑆T(𝑠,𝑎,𝑠́ ) (ℛ(𝑠,𝑎,𝑠́ )+𝛾 max𝑎́ ∈𝒜 K(𝑠́ ,𝑎́ ))
Então, sob a construção de uma rede profunda para aproximar os valores dos coeficientes, tem-se:
𝑌𝑄𝑘=𝑟+𝛾 max𝑎́ ∈𝒜 𝑄(𝑠́ ,𝑎́ ; 𝜃¯𝑘) [para uma rede simples]
𝑌𝐷𝐷𝑄𝑁𝑘=𝑟+𝛾𝑄(𝑠́ , argmax𝑎∈𝒜 𝑄(𝑠́ ,𝑎; 𝜃𝑘); 𝜃¯𝑘) [para double Q network]
Onde utiliza-se o gradiente descendente estocástico para atualização da policy:
∇𝜔𝑉𝜋𝜔(𝑠0)=𝔼𝑠~𝜌𝜋𝜔,𝑎~𝜋𝜔[∇𝜔(log 𝜋𝜔(𝑠, 𝑎))𝑄𝜋𝜔(𝑠,𝑎)]
Unir Policy Gradient (PG) e Deep Q-Learning (DQN) em uma única estrutura traz alguma complexidade adicional, pois essas são duas abordagens bastante diferentes para o aprendizado por reforço. DQN é uma abordagem baseada em valor, enquanto PG é uma abordagem baseada em policy. No entanto, existem alguns algoritmos que tentam combinar essas duas abordagens, como o Actor-Critic Method, onde o actor é atualizado usando a abordagem de gradiente de política e o crítico é atualizado usando uma abordagem semelhante ao DQN.
A função de perda do crítico (Q) pode ser definida como a diferença entre a estimativa atual de Q e a estimativa de destino (r + γ * Q’). A ideia aqui é minimizar essa diferença:
L = 1/2 * E [(r + γ * Q(s’, a’) – Q(s, a))^2]
Onde:
L é a função de perda
E é a esperança matemática
r é a recompensa
γ é o fator de desconto
s e a são o estado e a ação atual
s’ e a’ são o próximo estado e a próxima ação
A atualização do actor envolve o cálculo do gradiente da política para melhorar a política. Isso é feito maximizando a função de objetivo J(θ):
∇_θ J(θ) = E [∇_θ log π(a|s; θ) * Q(s, a)]
Onde:
∇_θ J(θ) é o gradiente da política
π(a|s; θ) é a política parametrizada por θ
Q(s, a) é a função de valor de ação
A função de valor de ação Q(s, a) obtida pelo crítico é usada para atualizar o actor.
Fazendo uma fusão dessa abordagem com RegreNet, a escolha ótima em operações financeiras pode ser melhorada. RegretNet é uma abordagem mais recente de aprendizado de máquina que procura aprender um mapa de alocação que minimiza um certo tipo de arrependimento. O arrependimento é uma medida de quão boa é uma decisão em comparação com a melhor decisão que poderia ter sido tomada. Em particular, a RegretNet procura minimizar o arrependimento em relação a uma classe de mecanismos.
A matemática por trás da RegretNet depende do conhecimento de redes neurais, otimização convexa e teoria dos jogos. O trabalho “Optimal Auctions through Deep Learning: Advances in Differentiable Economics” traz alguns desses conceitos.
Suponha que temos uma rede neural com pesos θ. Dada uma entrada x, a rede neural produz uma alocação y e um pagamento p. A alocação y e o pagamento p são parâmetros aprendidos da rede neural.
A função de perda é baseada em uma medida de arrependimento. Em particular, é o máximo arrependimento em relação a todos os possíveis desvios unilaterais. Matematicamente, a função de perda é dada por:
L(θ) = E_x [max_{y’} [u(y’, x) – p + max_{p’} [u(y, x) – p’]]]
onde u(y, x) é a utilidade do agente para a alocação y dada a entrada x, e os máximos são tomados em relação a todas as possíveis alocações y’ e pagamentos p’.
O objetivo é encontrar os pesos θ que minimizam essa função de perda.
Isso é feito usando técnicas de otimização baseadas em gradientes, como o gradiente descendente estocástico.
A RegretNet é uma estrutura para aprendizado de mecanismos. Para dar um pouco mais de contexto, no aprendizado de mecanismos, temos um ambiente com múltiplos agentes, cada um com seu próprio tipo privado t. Cada agente recebe uma alocação y e realiza um pagamento p.
A utilidade de um agente i é definida como u_i(y_i, t_i) – p_i, onde y_i é a alocação para o agente i, t_i é o tipo do agente i e p_i é o pagamento do agente i.
A RegretNet é uma rede neural que, dado um perfil de tipo t, produz uma alocação y e pagamentos p. Matematicamente, isso é representado por (y, p) = RegretNet(t), onde os pesos da rede neural são θ.
A função objetivo da RegretNet é minimizar o arrependimento, que é uma medida de quão longe a alocação e o pagamento estão do ideal para cada agente. Matematicamente, o arrependimento do agente i é definido como:
R_i(y, p, t) = max_{y’_i, p’_i} [u_i(y’_i, t_i) – p’_i – (u_i(y_i, t_i) – p_i)]
O objetivo é minimizar o arrependimento máximo em todos os agentes, ou seja, minimizar max_i R_i(y, p, t).
A função de perda da RegretNet é, portanto, o valor esperado do arrependimento máximo, que pode ser escrito matematicamente como:
L(θ) = E_t [max_i R_i(y, p, t)]
onde a expectativa E_t é tomada sobre a distribuição conjunta de tipos t.
Para treinar a RegretNet, utilizamos técnicas de otimização baseadas em gradientes para encontrar os pesos θ que minimizam a função de perda L(θ).
No entanto, o desafio é que a função de perda inclui o operador max, que não é diferenciável. Para superar isso, a RegretNet usa a técnica de otimização do subgradiente, que permite lidar com funções não diferenciáveis.
A arquitetura final considerando a rede de pagamentos p pode ser representada na figura abaixo:
Sendo zij as alocações de unidades de demanda, podemos gerar scores normalizados como segue:
Como opções binárias são um tipo de instrumento financeiro que paga um valor fixo se uma certa condição é cumprida, e nada caso contrário, a condição é normalmente se o preço de um ativo subjacente será acima (opção de compra) ou abaixo (opção de venda) de um preço de exercício específico em um momento específico.
A formulação matemática para um modelo de previsão de opções binárias requer uma compreensão profunda de finanças quantitativas, análise de séries temporais e aprendizado de máquina. Uma versão inicial de um algoritmo para operar opções binárias pode ser a seguinte:
– Coletar dados históricos do ativo subjacente.
– Definir um horizonte de tempo para a previsão (por exemplo, o preço em 60 segundos).
– Treinar um modelo de aprendizado de máquina nos dados históricos para prever se o preço do ativo será maior ou menor do que o preço de exercício após o horizonte de tempo definido.
– Usar o modelo treinado para fazer previsões em dados novos ou ao vivo e tomar decisões de negociação com base nessas previsões.
– Considerar os custos de transação, a gestão de riscos e a estrutura de mercado.
O código abaixo é uma implementação inicial em Haskell, que pode ser aprimorada e incorporada como um método automatizado na corretora Quotex:
-- Define o tipo de dados para o preço de um ativo data AssetPrice = AssetPrice { price :: Float, time :: UTCTime } -- Função para coletar dados históricos collectHistoricalData :: IO [AssetPrice] collectHistoricalData = do -- Aqui, você implementaria a lógica para coletar os dados históricos -- Esta função retorna uma lista vazia como exemplo return [] -- Função para treinar o modelo de previsão trainModel :: [AssetPrice] -> (AssetPrice -> IO Bool) trainModel historicalData = \assetPrice -> do -- Aqui, você implementaria a lógica para treinar o modelo de previsão -- usando os dados históricos e retornar uma função que faz previsões -- Esta função retorna sempre True como exemplo return True -- Função para operar opções binárias operateBinaryOptions :: (AssetPrice -> IO Bool) -> AssetPrice -> IO () operateBinaryOptions predict assetPrice = do prediction <- predict assetPrice if prediction then putStrLn "Comprar opção de compra" else putStrLn "Comprar opção de venda" -- Função principal main :: IO () main = do historicalData <- collectHistoricalData let predict = trainModel historicalData -- Aqui, você implementaria a lógica para coletar o preço atual do ativo -- e passá-lo para a função operateBinaryOptions -- Este código usa um preço fictício como exemplo let currentPrice = AssetPrice {price = 100.0, time = UTCTime (fromGregorian 2023 8 1) 0} operateBinaryOptions predict currentPrice
Uma Regretnet em Haskell seguiria essa lógica:
data Agent = Agent { agentType :: Float, allocation :: Float, payment :: Float } utility :: Agent -> Float utility agent = (agentType agent) * (allocation agent) - (payment agent) regret :: Agent -> Float -> Float -> Float regret agent newAllocation newPayment = max 0 ((agentType agent) * newAllocation - newPayment - utility agent) regretNetLoss :: [Agent] -> Float regretNetLoss agents = sum (map (\agent -> regret agent (allocation agent) (payment agent)) agents)
Deep Reinforcement Learning adaptativo em trading de ações e administração de portfólios
O DDPG adaptativo pode usar um esquema de atualização mais dinâmico em comparação com o algoritmo DDPG clássico, ou seja, as redes de críticos e atores podem ser atualizadas de maneira mais adaptativa, dependendo das características específicas dos dados do mercado de ações. Um esquema simplificado de atualização adaptativa poderia ser arquitetado como:
Critic minimizando a perda:
L = E[ (Q(s, a|θQ) – y)^2 ]
onde y = r + γ * Q'(s’, μ'(s’|θμ’)|θQ’)
Atualize a policy do actor usando o gradiente de policy amostrado:
∇θμ J ≈ E[ ∇a Q(s, a|θQ) * ∇θμ μ(s|θμ) ]
Atualize as redes de destino:
θQ’ = τθQ + (1 – τ)θQ’
θμ’ = τθμ + (1 – τ)θμ’
Nas equações acima:
(s, a) é o par estado-ação atual.
r é a recompensa.
γ é o fator de desconto.
(s’, μ’) é o próximo par estado-ação.
Q é a rede crítica.
μ é a rede de atores.
τ é um hiperparâmetro para controlar a taxa de atualização das redes de destino.
O DDPG adaptativo pode ajustar essas atualizações dependendo de algumas métricas relacionadas ao desempenho do algoritmo ou ao estado do mercado de ações, introduzindo um nível extra de adaptabilidade. Pensando e administração de portfólio, o estudo “Deep deterministic portfolio optimization” faz uma abordagem interessante.
Aproveitando essas ideias, vamos denotar o estado na etapa de tempo t por s_t, que pode incluir informações relevantes sobre os preços anteriores e outras características dos ativos, o portfólio atual e talvez alguns outros indicadores de mercado.
A ação a_t na etapa de tempo t é um vetor que representa a proporção da carteira a ser investida em cada ativo.
A recompensa r_t na etapa de tempo t poderia ser definida como a alteração no valor do portfólio devido à ação tomada no momento t.
O objetivo do agente seria maximizar a recompensa cumulativa, ou seja, o crescimento do portfólio em uma sequência de negociações.
Representação do estado (s_t): O estado deve ser uma representação do portfólio atual e das condições de mercado. Pode incluir as participações atuais dos ativos, o histórico recente de preços e outros indicadores técnicos ou fatores macroeconômicos.
Representação da ação (a_t): A ação pode ser um vetor de números reais em que cada elemento indica a proporção da carteira a ser investida em um determinado ativo.
Função de recompensa (r_t): A recompensa pode ser a taxa logarítmica de retorno do portfólio após a execução da ação. Se V(t) denota o valor total do portfólio no momento t, então a recompensa poderia ser definida como r_t = log(V(t) / V(t-1)).
Policy (μ(s|θμ)): A policy é uma função que mapeia um estado para uma ação. No contexto do gerenciamento de portfólio, poderia ser uma rede neural que recebe como entrada a representação do estado e gera um vetor de pesos do portfólio para o próximo período de negociação.
Função Q (Q(s, a|θQ)): A função Q é uma função que recebe um estado e uma ação e retorna o retorno esperado dessa ação nesse estado. Novamente, isso poderia ser representado por uma rede neural.
O algoritmo de aprendizado prosseguiria atualizando iterativamente a policy e a função Q usando o algoritmo DDPG adaptativo, conforme discutido anteriormente.
Ricardo Teixeira, colunista do buenaenergia.cl, é Ph.D. em Machine Learning pela Carnegie Mellon University e possui mais de 15 anos de experiência em mercados financeiros.