Conteúdo do Curso
Introdução ao Aprendizado por Reforço
Introdução ao Aprendizado por Reforço
O Que São Métodos de Monte Carlo?
Métodos de Monte Carlo (MC) são uma classe de algoritmos computacionais que dependem de amostragem aleatória para estimar resultados numéricos.
Métodos de Monte Carlo são utilizados quando soluções determinísticas são difíceis ou impossíveis de obter. Eles substituem cálculos exatos por aproximações que melhoram com o aumento do número de amostras aleatórias.
Como funcionam?
Métodos de Monte Carlo podem variar de uma tarefa para outra, mas todos tendem a seguir um único padrão:
- Definir um domínio de possíveis entradas;
- Gerar entradas aleatórias a partir de uma distribuição de probabilidade;
- Avaliar uma função nessas entradas;
- Agregar os resultados para produzir uma estimativa.
Exemplos
Embora o padrão descrito acima possa parecer complexo, estes exemplos devem ajudar a esclarecer a ideia por trás dele.
Cálculo de Integrais
O cálculo de integrais é uma tarefa não trivial que geralmente exige a aplicação de diversas técnicas para se obter o resultado correto.
Vamos tentar aplicar o método de Monte Carlo para resolver esta integral:
- Domínio de entrada: esta integral dupla possui duas variáveis, e ;
- Geração: ambas as variáveis são independentes entre si e distribuídas uniformemente;
- Avaliação: para obter um valor pontual, pode-se utilizar a função sob o sinal de integração;
- Agregação: o valor desta integral pode ser definido como o volume sob a curva. O volume pode ser calculado como o produto da área da base pelo valor médio da altura. A área da base é 1 (quadrado unitário) e a altura média é a média dos resultados obtidos na etapa anterior.
import numpy as np result = 0 # Many samples are required for estimates to be precise for i in range(100000): # Generation of random variables x, y = np.random.uniform(), np.random.uniform() # Computation of point value value = 1 / (1 + (x + y) ** 2) # Mean aggregation result += (value - result) / (i + 1) # Closed-form solution of this integral true_result = 2*np.arctan(2) - np.pi/2 - (1/2)*np.log(5) + np.log(2) print(f"Approximated result: {result}") print(f"True result: {true_result}")
Aproximação de
A aproximação de é um dos usos mais emblemáticos do método de Monte Carlo. Este exemplo ilustra como a amostragem aleatória pode resolver um problema geométrico sem a necessidade de cálculo avançado.
Considere um quadrado unitário com um quarto de círculo inscrito:
- O quadrado abrange ;
- O quarto de círculo possui raio 1 e está centrado na origem.
A área do quarto de círculo é ou , e a área do quadrado é 1. Agora, vamos amostrar pontos aleatórios dentro do quadrado. Com um tamanho de amostra suficientemente grande:
Assim, o valor de pode ser calculado como
import numpy as np import matplotlib.pyplot as plt # Lists for coordinates inside = [] outside = [] # Many samples are required for estimates to be precise for _ in range(100000): # Generation of random variables x, y = np.random.uniform(), np.random.uniform() # Splitting points inside and outside of the circle if x**2 + y**2 <= 1: inside.append((x, y)) else: outside.append((x, y)) # Plotting points plt.figure(figsize=(6,6)) plt.scatter(*zip(*inside), color="blue", s=1, label="Inside") plt.scatter(*zip(*outside), color="red", s=1, label="Outside") plt.legend() plt.xlabel("x") plt.ylabel("y") plt.show() estimate = 4 * len(inside) / (len(inside) + len(outside)) print(f"Estimated value of pi: {estimate}") print(f"True value of pi: {np.pi}")
Bandidos de Múltiplos Braços
No contexto dos bandidos de múltiplos braços, um objetivo fundamental é estimar o valor da ação para cada braço — ou seja, a recompensa esperada ao escolher uma determinada ação. Uma estratégia comum é estimar esses valores por meio da média das recompensas observadas obtidas ao acionar cada braço ao longo do tempo. Essa técnica é, na verdade, um método de Monte Carlo.
Métodos de Monte Carlo para MDPs
Ao contrário dos métodos de programação dinâmica, que dependem de um modelo completo e preciso das dinâmicas do ambiente, os métodos de Monte Carlo aprendem exclusivamente a partir da experiência — ou seja, de sequências reais ou simuladas de estados, ações e recompensas.
Isso torna as abordagens de Monte Carlo especialmente poderosas: elas não exigem nenhum conhecimento prévio sobre como o ambiente funciona. Em vez disso, extraem estimativas de valor diretamente do que ocorre durante a interação. Em muitos cenários do mundo real, onde modelar o ambiente é impraticável ou impossível, essa capacidade de aprender a partir da experiência bruta é uma grande vantagem.
Quando a interação direta com o ambiente é custosa, arriscada ou lenta, os métodos de Monte Carlo também podem aprender a partir de experiências simuladas, desde que exista uma simulação confiável. Isso permite exploração e aprendizado em um ambiente controlado e repetível — embora pressuponha acesso a um modelo capaz de gerar transições plausíveis.
Obrigado pelo seu feedback!