Pular para o conteúdo principal

Optuna para deep reinforcement learning em Python

Descubra como dominar o ajuste de hiperparâmetros com o Optuna. Aprenda a definir hiperparâmetros, configurar sua função objetivo e usar técnicas de amostragem e pruning em deep reinforcement learning.
Atualizado 17 de set. de 2026  · 11 min lido

Explorar com IA

ChatGPTClaudePerplexity

Modelos de machine learning têm hiperparâmetros que impactam diretamente seu desempenho. Você pode pensar nesses parâmetros como a temperatura certa para assar um bolo ou o ângulo ideal para virar uma panqueca. Em reinforcement learning, os hiperparâmetros afetam as aproximações de política e de recompensa e, quando bem ajustados, podem melhorar drasticamente os resultados.

Neste artigo, vamos explorar o Optuna, um poderoso framework open source para otimização de hiperparâmetros. Se você está começando no tema, vale conferir o curso Understanding Machine Learning, que faz uma introdução sem código. Para praticar em Python, experimente nossa trilha Machine Learning Fundamentals with Python, que utiliza scikit-learn. Depois, o curso MLOps Concepts ajuda você a entender como levar modelos de ML do notebook local para produção. Por fim, faça o Preprocessing for Machine Learning in Python, altamente relevante aqui, pois ensina a limpar e preparar seus dados para modelos de machine learning.

O que é o Optuna?

Optuna é um framework open source de otimização de hiperparâmetros para automatizar a busca de configurações. Ele pode ser usado com qualquer framework de machine learning ou deep learning. Algumas das principais capacidades do Optuna incluem: 

  • Paralelização e escala com facilidade: conforme a demanda computacional cresce, o Optuna permite aproveitar treino distribuído e se conectar a backends em nuvem como Kubernetes ou Dask.
  • Busca automatizada por hiperparâmetros ideais: o Optuna procura as melhores combinações de hiperparâmetros quando você define um intervalo para cada um.
  • Algoritmos de ponta para amostragem e pruning: o Optuna inclui algoritmos de última geração, como Median Pruner e WilcoxonPruner, que fazem pruning usando testes estatísticos.
  • Facilidade de uso: é simples de usar e a implementação exige cerca de 5–6 linhas de código!
  • Optuna Dashboard: agora o Optuna permite armazenar e analisar os resultados de todos os seus experimentos com o Optuna Dashboard.
  • Optuna Hub: permite compartilhar e usar recursos criados por contribuidores. 

O que é reinforcement learning (RL)?

ilustração de reinforcement learning com um robô e duas bandeiras, uma verde e uma laranja

Encontrando o caminho ideal. Fonte: imagem do autor

Reinforcement learning (RL) combina machine learning e controle ótimo. Ele estuda como um agente inteligente deve agir em um ambiente dinâmico para maximizar sua recompensa cumulativa. Em termos simples, reinforcement learning é ensinar um agente a tomar decisões que maximizem suas recompensas em um ambiente. A recompensa a cada passo pode ser positiva ou negativa, conforme ele se aproxima do objetivo desejado.

Diferente de machine learning supervisionado, algoritmos de reinforcement learning tomam decisões buscando resultados ótimos, em um processo parecido com tentativa e erro que usamos para atingir metas. Deep reinforcement learning difere de RL clássico por usar redes neurais profundas para aproximar funções complexas. Também podemos dizer que o RL tradicional tende a abordagens mais determinísticas, enquanto o deep RL usa abordagens estocásticas.

Usando Optuna no seu modelo de reinforcement learning

Em um ambiente, pode haver várias rotas até o destino. E, comparado ao aprendizado supervisionado, o deep reinforcement learning é bem mais sensível à escolha de hiperparâmetros como taxa de aprendizado, gamma, número de passos, e assim por diante.

Uma má escolha de hiperparâmetros pode levar a convergência fraca ou instável. Esse desafio é agravado pela variabilidade de desempenho causada pelas sementes aleatórias (usadas para inicializar pesos da rede e o ambiente).

Nesta seção, vamos passar pelo processo de configurar o Optuna e dependências relacionadas, definir o espaço de busca e rodar a otimização para o algoritmo MountainCarContinuous-v0. O MountainCarContinuous-v0 é um dos algoritmos de RL do RL-Zoo, um framework de treino que oferece scripts para avaliar agentes e plotar resultados. O MountainCarContinous-v0 modela um ambiente onde o agente (um carro) tenta alcançar seu objetivo (chegar à bandeira).

um gif mostrando um carro subindo a montanha para alcançar a bandeira no topo, ilustrando o algoritmo mountain car

Representação do algoritmo MountainCarContinuous-v0 ajustado. Imagem do autor.

Como começar com o Optuna

Para começar, você precisa:

  1. Configurar as definições dependentes do seu modelo.
  2. Definir os hiperparâmetros e sugerir o intervalo de valores para cada um.
  3. Definir sua função objetivo, que contém o modelo ou função que você quer otimizar. Também defina um CallBack para retornar avaliações periódicas.
  4. Criar um estudo no Optuna e executar a função otimizada por um número específico de tentativas (trials).

Configurando Optuna e Stable-Baselines3

Depois de criar um novo ambiente virtual, instalamos os pacotes. Observação: o Optuna suporta Python 3.7 ou superior. Se quiser revisar como criar um ambiente virtual, leia nosso tutorial Virtual Environment in Python.

pip install optunapip install stable-baselines3pip install sb3-contrib

Importe os pacotes necessários

Vamos usar o pacote gym para criar o ambiente onde o agente irá executar ações.

from stable_baselines3.common.env_util import make_vec_envfrom stable_baselines3 import A2Cimport gymimport optunafrom optuna.pruners import MedianPrunerfrom optuna.samplers import TPESamplerfrom optuna.visualization import plot_optimization_history, plot_param_importancesfrom typing import Any, Dictimport torchimport torch.nn as nnprint(optuna.__version__)

Este projeto vai usar o MountainCarContinuous-v0 com Advantage Actor-Critic (A2C). Advantage Actor-Critic (A2C) — um dos algoritmos Actor-Critic — é uma arquitetura híbrida que combina métodos baseados em valor (mede a recompensa de uma ação tomada) e baseados em política (controla as ações do agente), ajudando a estabilizar o treino ao reduzir a variância.

Defina os hiperparâmetros

Vamos definir as configurações usadas nesta tarefa.

N_TRIALS = 100  # Número máximo de tentativas (trials)N_JOBS = 1 # Número de jobs em paraleloN_STARTUP_TRIALS = 5  # Parar a amostragem aleatória após N_STARTUP_TRIALSN_EVALUATIONS = 2  # Número de avaliações durante o treinoN_TIMESTEPS = 100000  # Orçamento de treinoEVAL_FREQ = int(N_TIMESTEPS / N_EVALUATIONS)N_EVAL_ENVS = 5N_EVAL_EPISODES = 10TIMEOUT = int(60 * 15)  # 15 minutosENV_ID = "MountainCarContinuous-v0"DEFAULT_HYPERPARAMS = {    "policy": "MlpPolicy",    "env": ENV_ID,}

Vamos sugerir um intervalo de valores para os hiperparâmetros.

def a2c_hyper_params(trial: optuna.Trial) -> dict:    """Amostra hiperparâmetros de A2C para um trial do Optuna."""    return {        "learning_rate": trial.suggest_float("learning_rate", 1e-5, 1e-2),        "gamma": trial.suggest_float("gamma", 0.9, 0.9999),        "n_steps": trial.suggest_int("n_steps", 5, 2048),        "ent_coef": trial.suggest_float("ent_coef", 1e-8, 1e-2),        "vf_coef": trial.suggest_float("vf_coef", 0.1, 1.0),        "max_grad_norm": trial.suggest_float("max_grad_norm", 0.3, 10)    }

Defina a função objetivo

Foi definida uma função de CallBack, TrialEvalCallback(), porque queremos retornar resultados de avaliação periódicos das tarefas de otimização. Confira o notebook no Google Colab para a implementação do callback.

def objective(trial: optuna.Trial) -> float:    """    Esta função será usada pelo Optuna para avaliar um conjunto de hiperparâmetros por vez.Dado um objeto trial, ela vai amostrar hiperparâmetros, avaliá-los e reportar o resultado.    :param trial: objeto trial do Optuna    :return: recompensa média por episódio após o treino    """    kwargs = DEFAULT_HYPERPARAMS.copy()    # 1. Amostrar hiperparâmetros e atualizar os argumentos nomeados    kwargs.update(a2c_hyper_params(trial))    # 2. Criar o modelo de RL    model = A2C(**kwargs)    # 3. Criar ambientes de avaliação com make_vec_env, ENV_ID e N_EVAL_ENVS    eval_envs = make_vec_env(ENV_ID, n_envs=N_EVAL_ENVS)    # 4. Criar o callback TrialEvalCallback     eval_callback = TrialEvalCallback(        eval_envs,        trial,        n_eval_episodes=N_EVAL_EPISODES,        eval_freq=EVAL_FREQ,        deterministic=True,        verbose=0,    )    nan_encountered = False    try:        # Treinar o modelo        model.learn(N_TIMESTEPS, callback=eval_callback)    except AssertionError as e:        # Às vezes, hiperparâmetros aleatórios podem gerar NaN        print(e)        nan_encountered = True    finally:        # Liberar memória        model.env.close()        eval_envs.close()    # Informar ao otimizador que o trial falhou    if nan_encountered:        return float("nan")    if eval_callback.is_pruned:        raise optuna.exceptions.TrialPruned()    return eval_callback.last_mean_reward

Mecanismos eficientes de amostragem e pruning

Pruning é reduzir parâmetros ou regiões do espaço de busca com menor chance de resultado ideal — neste caso, podando após um determinado orçamento. No Optuna, o pruning remove trials que têm desempenho pior nas etapas iniciais do treino. Isso reduz o conjunto de parâmetros e o tempo para chegar ao espaço de busca ótimo. O Optuna possui alguns pruners, incluindo o Median Pruner, que usa a regra de parada pela mediana. Saiba mais sobre Pruners na documentação do Optuna.

Implementando o MedianPruner do Optuna 

O algoritmo Median Pruner faz pruning se o melhor resultado atual for pior que a mediana dos resultados anteriores. A divisão por três é usada porque só queremos podar após 1/3 do orçamento máximo ser utilizado.

pruner = MedianPruner(n_startup_trials=N_STARTUP_TRIALS, n_warmup_steps=N_EVALUATIONS // 3)

Implementando o TPESampler do Optuna

Selecione o sampler, que pode ser random, TPESampler, CMAES, etc.

sampler = TPESampler(n_startup_trials=N_STARTUP_TRIALS)

Crie o estudo e inicie a otimização

Agora estamos prontos para criar um estudo no Optuna.

study = optuna.create_study(sampler=sampler, pruner=pruner, direction="maximize")try:study.optimize(objective, n_trials=N_TRIALS, n_jobs=N_JOBS, timeout=TIMEOUT)except KeyboardInterrupt:    passprint("Number of finished trials: ", len(study.trials))print("Best trial:")trial = study.best_trialprint(f" Value: {trial.value}")print(" Params: ")for key, value in trial.params.items():    print(f" {key}: {value}")print(" User attrs:")for key, value in trial.user_attrs.items():    print(f" {key}: {value}")

Recursos avançados do Optuna

Vamos dar uma olhada em alguns recursos mais avançados do Optuna.

Ferramentas de visualização do Optuna

O Optuna oferece um dashboard que permite visualizar, acompanhar e analisar execuções atuais e anteriores. Antes, você talvez precisasse conectar uma ferramenta de tracking, como MLFlow, para gerenciar os resultados.

Exemplo do Optuna Dashboard

Optuna Dashboard. Fonte: Optuna

Integração com sistemas distribuídos para experimentos em larga escala

O suporte do Optuna a treino distribuído permite conectar seu backend distribuído, como Kubernetes ou Dask, para aproveitar mais recursos computacionais em experimentos em grande escala. Você também pode conectar um backend de armazenamento para guardar e gerenciar os resultados das sessões. É possível usar armazenamento em nuvem como o do Dask ou SQLite para execuções locais.

Dicas para usar o Optuna em deep reinforcement learning

Aqui vão algumas dicas para evitar armadilhas comuns no ajuste de hiperparâmetros:

  • Avalie se você realmente precisa ajustar hiperparâmetros: às vezes, basta treinar por mais passos.
  • Esteja preparado para resultados inconsistentes: repetir o mesmo experimento com os mesmos hiperparâmetros em RL não garante resultados idênticos.
  • Considere os desafios do tamanho do espaço de busca: como em ML tradicional, um espaço muito pequeno pode nunca conter os parâmetros ideais. Se for grande demais, a busca pode demorar demais.

Optuna vs. HyperOpt e outras ferramentas

Para fechar, vamos comparar Optuna, HyperOpt e RayTune em termos de facilidade de uso, suporte e outras dimensões.

 
Recursos Optuna HyperOpt RayTune
Facilidade de uso API amigável Exige muita configuração API abrangente, porém mais complexa
Suporte a PyTorch/TensorFlow e outros frameworks de ML Sim Sim Sim
Otimização distribuída/paralela Sim Suporte limitado Sim
Pruning/Parada Sim Não, apenas early stopping Sim
Ferramenta de visualização Sim Não Sim
Algoritmos de busca TPESampler, Random Sampler, CmAESampler, GridSampler, QMCSampler, NSGAIISampler, PartialFixedSampler, GPSampler TPE, Random Search Random Search, Grid Search, HyperBand, BOHB, PBT, ASHA

Conclusão

Neste artigo, revisamos os conceitos de otimização de hiperparâmetros e reinforcement learning. Você também aprendeu como configurar o Optuna e conectá-lo ao seu algoritmo de RL favorito. Agora é hora de colocar a mão na massa e aplicar esses conceitos em um projeto seu — antigo ou novo.

Para se aprofundar, explore a documentação oficial do Optuna e este tutorial de reinforcement learning sobre otimização de hiperparâmetros.

Considere também outros recursos da DataCamp para continuar aprendendo, como nossos tutoriais What is Reinforcement Learning From AI Feedback? e What is Reinforcement Learning from Human Feedback?. Se você está se preparando para entrevistas na área, confira nossos posts 25 Machine Learning Projects for All Levels e Top 25 Machine Learning Interview Questions.

Desenvolver habilidades de aprendizado de máquina

Eleve suas habilidades de aprendizado de máquina ao nível de produção.
Comece a Aprender De Graça

Bunmi Akinremi's photo
Author
Bunmi Akinremi
LinkedIn
Twitter

Engenheiro de machine learning e poeta

Perguntas frequentes

O que é o Optuna e como ele funciona?

Optuna é um framework open source de otimização de hiperparâmetros projetado para automatizar o ajuste em modelos de machine learning. Você define os hiperparâmetros a serem ajustados, a função objetivo e executa o estudo.

Por que devo usar o Optuna para deep reinforcement learning?

O Optuna lida com espaços de busca complexos e de alta dimensão, faz pruning de trials pouco promissores e integra facilmente com frameworks populares de deep learning.

Como posso integrar o Optuna nos meus projetos de reinforcement learning existentes?

Para integrar o Optuna ao deep reinforcement learning, selecione os hiperparâmetros e defina um espaço de busca para cada um, especifique a função objetivo que avalia o desempenho do seu modelo e crie um estudo que rode a função por n trials. Este artigo traz um passo a passo dessa integração.

O Optuna pode ser usado com frameworks populares de deep reinforcement learning, como TensorFlow e PyTorch?

Sim, o Optuna é compatível com TensorFlow e PyTorch.

Quais hiperparâmetros em algoritmos de reinforcement learning podem ser otimizados?

Você pode otimizar a taxa de aprendizado, número de passos, gamma, função de ativação e a arquitetura da rede.

Tópicos
Python
Aprendizado de máquina

Aprenda machine learning com a DataCamp

Curso

Entendendo Machine Learning

2 h
308.6K
Uma introdução ao aprendizado de máquina sem programação.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

Tutorial

Introdução ao Q-learning: um tutorial para iniciantes

Aprenda o algoritmo de aprendizado por reforço sem modelo mais popular com um tutorial em Python.
Abid Ali Awan's photo

Abid Ali Awan

11 min

Tutorial

Tutorial do Adam Optimizer: Intuição e implementação em Python

Compreender e implementar o otimizador Adam em Python. Com o PyTorch, você aprenderá a intuição, a matemática e as aplicações práticas do machine learning

Tutorial

Otimização em Python: Técnicas, pacotes e práticas recomendadas

Este artigo ensina a você sobre otimização numérica, destacando diferentes técnicas. Ele discute os pacotes Python, como SciPy, CVXPY e Pyomo, e fornece um notebook DataLab prático para você executar exemplos de código.
Kurtis Pykes 's photo

Kurtis Pykes

11 min

Tutorial

Tutorial de regressão Lasso e Ridge em Python

Saiba mais sobre as técnicas de regressão lasso e ridge. Compare e analise os métodos em detalhes.
DataCamp Team's photo

DataCamp Team

10 min

Python

Tutorial

Tutorial para entender a regressão logística em Python

Aprenda sobre a regressão logística, suas propriedades básicas e crie um modelo de aprendizado de máquina em um aplicativo do mundo real em Python.
Avinash Navlani's photo

Avinash Navlani

10 min

Tutorial

Tutorial de mineração de regras de associação em Python

Descobrindo padrões ocultos em Python com mineração de regras de associação
Moez Ali's photo

Moez Ali

14 min

Ver MaisVer Mais