Curso
Todo modelo de machine learning que você treina está resolvendo um problema de otimização — e o que você realmente quer otimizar é chamado de função objetivo.
Em termos simples, é uma função matemática que mede quão "boa" é uma solução. Ela recebe um conjunto de entradas e devolve um único score. O objetivo é sempre encontrar os valores que maximizam ou minimizam esse score. Funções objetivo estão no coração de tudo, de programação linear a deep learning. É daquelas coisas que você passa a ver em todo lugar depois que entende como funcionam.
Neste artigo, vou explicar o que são funções objetivo, como elas diferem de funções de loss e de custo, e como são usadas em machine learning e otimização.
Quer um mergulho em deep learning que continua atual em 2026? Inscreva-se no nosso curso Deep Learning in Python para criar um portfólio em PyTorch.
O que é uma função objetivo?
Uma função objetivo é uma função matemática que avalia quão boa é uma solução.
Você fornece um conjunto de entradas — parâmetros do modelo, variáveis de decisão — e ela retorna um único número. Esse número indica o quão bem sua solução atual se sai. Quanto maior (ou menor) esse número, melhor (ou pior) é a solução.
Aproveitando o tema, vamos falar de otimização em geral.
É o processo de encontrar as entradas que empurram esse número na direção certa. Se você quer minimizar, busca o menor valor possível. Se quer maximizar, busca o maior. De qualquer forma, é a função objetivo que você usa como referência.
Em bom português, pense nela como um sistema de pontuação. Cada solução candidata recebe uma nota, e seu trabalho é encontrar a que tem a melhor nota.
Função objetivo vs. função de loss vs. função de custo
Esses três termos são usados como sinônimos o tempo todo — mas não significam exatamente a mesma coisa.
A função objetivo é o termo mais amplo. É qualquer função que você tenta maximizar ou minimizar. Não precisa envolver erro ou previsão — ela apenas define o que "melhor" significa para o seu problema.
Uma função de loss mede o erro para um único exemplo de treino — o quão distante a previsão do seu modelo está do valor real. O erro quadrático médio para um ponto de dados, por exemplo, é uma função de loss.
Uma função de custo agrega o loss em todo o conjunto de dados, geralmente por meio da média. É a função que você de fato minimiza durante o treino — ela resume o desempenho do modelo em todos os exemplos, não apenas em um.
Na prática, a maioria dos frameworks e artigos de ML usa esses termos de forma flexível. Você verá "loss" onde "cost" seria mais preciso, e "objective" sendo usado para se referir aos três.
As distinções importam quando você lê artigos científicos. O contexto indica a que termo o autor realmente se refere.
Para uma comparação mais concreta, veja a tabela abaixo:

Tabela de comparação entre função objetivo/loss/custo
Funções objetivo em otimização
Todo problema de otimização tem um objetivo e um conjunto de limites.
A função objetivo define o objetivo — o que você está tentando maximizar ou minimizar. As restrições definem os limites — as fronteiras dentro das quais sua solução precisa ficar. Juntas, elas enquadram o problema.
Considere um exemplo simples de alocação de recursos.
Digamos que você gerencia uma fábrica que produz dois produtos e quer maximizar o lucro. Sua função objetivo captura o lucro total em função de quantas unidades de cada produto você fabrica. Suas restrições capturam os limites — matérias-primas disponíveis, horas de máquina, capacidade de mão de obra. A função objetivo diz o que otimizar e as restrições dizem com o que você pode contar.
A programação linear é um dos cenários mais comuns onde isso se aplica. É um método para otimizar uma função objetivo linear sujeita a restrições lineares. É usada em logística, agendamento, cadeia de suprimentos, finanças e muito mais. A matemática é bem estabelecida e os solvers conseguem lidar com problemas com milhares de variáveis.
É importante notar que a função objetivo não muda as restrições existentes — ela apenas diz ao solver o que buscar. Se você muda a função objetivo, obterá uma solução completamente diferente, mesmo com as mesmas restrições.
Funções objetivo em machine learning
Em machine learning, a função objetivo define o que o seu modelo está, de fato, aprendendo a fazer.
Sempre que você treina um modelo, executa um algoritmo de otimização (pense em gradient descent, Adam, RMSProp) que ajusta os parâmetros para minimizar ou maximizar a função objetivo. O modelo não sabe nada sobre o seu problema. Ele só enxerga o score que a função objetivo fornece e tenta melhorar esse score a cada atualização.
Isso significa que sua escolha de função objetivo molda o resultado. Vale a pena testar algumas para ver qual funciona melhor no seu caso.
Erro quadrático médio (regressão)
O erro quadrático médio (MSE) é a função objetivo padrão para problemas de regressão. Ele mede a diferença quadrática média entre as previsões do seu modelo e os valores-alvo reais.

Fórmula do MSE
Elevar ao quadrado torna todos os erros positivos e penaliza erros grandes mais do que pequenos. Uma previsão com erro de 10 contribui com 100 para a soma — não apenas 10. Isso torna o MSE sensível a outliers, algo para ficar de olho em dados reais mais bagunçados.
import numpy as np
y_true = np.array([3.0, 5.0, 2.5, 7.0])
y_pred = np.array([2.8, 5.2, 2.0, 6.5])
mse = np.mean((y_true - y_pred) ** 2)
print(f"MSE: {mse:.4f}")

Saída do MSE
Cross-entropy loss (classificação)
A cross-entropy loss é a função objetivo padrão para problemas de classificação. Ela mede o quão distante a distribuição de probabilidades prevista pelo modelo está da distribuição verdadeira das classes.

Função de perda de cross-entropy
Se o modelo atribui alta probabilidade à classe correta, o loss é baixo. Se ele está confiante e erra, o loss fica alto — e isso é penalizado. É isso que empurra o modelo a prever a classe certa e a ter confiança nisso.
import numpy as np
# True labels (one-hot encoded)
y_true = np.array([1, 0, 0])
# Model's predicted probabilities
y_pred = np.array([0.7, 0.2, 0.1])
cross_entropy = -np.sum(y_true * np.log(y_pred))
print(f"Cross-Entropy Loss: {cross_entropy:.4f}")

Saída da cross-entropy
Log-likelihood
Log-likelihood é comum em modelos probabilísticos e estatísticos. A função maximiza a probabilidade de que os parâmetros do seu modelo tenham gerado os dados observados.

Fórmula do log-likelihood
Trabalha-se com o log da verossimilhança em vez da própria verossimilhança porque ele transforma um produto de probabilidades em uma soma, o que é muito mais fácil de computar e otimizar.
Na prática, a maioria dos frameworks minimiza o negative log-likelihood (NLL) em vez de maximizar o log-likelihood. É a mesma coisa — só invertida para que o gradient descent consiga trabalhar.
import numpy as np
from scipy.stats import norm
# Observed data
data = np.array([1.2, 2.3, 1.8, 2.1, 1.9])
# Assumed model parameters
mu, sigma = 2.0, 0.5
# Compute negative log-likelihood
nll = -np.sum(norm.logpdf(data, loc=mu, scale=sigma))
print(f"Negative Log-Likelihood: {nll:.4f}")

Saída do log-likelihood
No fim das contas, treinar é apenas otimização. Cada forward pass calcula o valor da função objetivo. Cada backward pass calcula os gradientes. E cada atualização de parâmetro move o modelo na direção que melhora o score.
Funções objetivo convexas vs. não convexas
Nem toda função objetivo é igual. O formato dela determina o quão difícil é otimizar e se dá para confiar na solução encontrada.
Funções objetivo lineares
Uma função objetivo linear oferece uma relação em linha reta entre entradas e saída. Quando você altera qualquer entrada por um valor fixo, a saída muda por um valor fixo.
Funções lineares são usadas em programação linear, onde tanto a função objetivo quanto as restrições são lineares. Isso as torna a classe mais simples de funções objetivo para otimizar, já que os solvers conseguem encontrar de forma confiável o ótimo global, mesmo em problemas grandes.
Funções objetivo não lineares
Uma função objetivo não linear tem uma relação mais complexa entre entradas e saída. A maioria dos problemas do mundo real — e quase todos os modelos de machine learning — se encaixam nessa categoria.
MSE é não linear. Cross-entropy é não linear. As superfícies de loss de redes neurais são não lineares. A complexidade extra permite capturar relações ricas nos dados, mas também torna a otimização mais difícil.
Funções convexas versus não convexas
É aqui que a coisa fica interessante.
Uma função convexa tem formato de tigela. Qualquer segmento de reta traçado entre dois pontos da curva fica acima ou sobre a curva. Isso garante que qualquer mínimo local também seja o mínimo global — ou seja, se o otimizador encontrar um fundo, é o fundo de verdade.
Uma função não convexa tem formato mais irregular — vários vales, platôs e pontos de sela. Otimizadores podem ficar presos em um mínimo local, um vale que parece o fundo mas não é. Redes neurais profundas têm superfícies de loss altamente não convexas, por isso treinar exige cuidado com taxa de aprendizado, escolha de otimizador e inicialização.
Problemas convexos são resolvidos exatamente; problemas não convexos são resolvidos aproximadamente. A qualidade da solução depende da sua estratégia de otimização.
Para quem é mais visual, aqui vai uma comparação entre funções objetivo lineares, não lineares, convexas e não convexas:

Comparação de tipos de função objetivo
Como funções objetivo são otimizadas
Depois de definir a função objetivo, você precisa de uma forma de minimizá-la ou maximizá-la. É aí que entram os algoritmos de otimização.
A abordagem mais comum é o gradient descent. A ideia é calcular o gradiente da função objetivo em relação aos parâmetros do modelo e dar um pequeno passo na direção que reduz o valor. Depois, repetir até que o valor pare de melhorar.
O gradiente nada mais é do que a derivada da função objetivo.
Ele indica a inclinação na sua posição atual e em que direção é a "subida". Para minimizar a função, você se move na direção oposta. Para maximizar, vai junto com ela.
Esse processo é iterativo: para chegar à solução, você faz uma série de pequenos ajustes, cada um aproximando os parâmetros do ótimo. O tamanho de cada passo é controlado pela taxa de aprendizado. Um valor grande demais pode fazer você "pular" o ótimo; um valor pequeno demais deixa o treino lento.
Na prática, a maioria dos frameworks usa variantes do gradient descent mais rápidas e estáveis que a versão básica:
- Stochastic Gradient Descent (SGD) calcula o gradiente com um único exemplo aleatório por passo, em vez do dataset completo
- Mini-batch gradient descent usa um pequeno lote de exemplos por passo — um meio-termo entre SGD e full-batch
- Adam adapta a taxa de aprendizado para cada parâmetro, o que facilita a configuração
A função objetivo precisa ser diferenciável, ou pelo menos majoritariamente diferenciável, para que métodos baseados em gradiente funcionem. Sem derivada não há gradiente — e o otimizador fica sem rumo. É um ponto-chave para lembrar.
Exemplo de função objetivo
Vamos trazer isso para o concreto com um problema simples de regressão linear.
Suponha que você quer prever preços de casas com base na metragem. Você tem um dataset de casas com preços conhecidos e quer ajustar uma linha que minimize o erro de previsão. Sua função objetivo é o erro quadrático médio (MSE), cuja fórmula você já conhece.
As entradas são os parâmetros do modelo — a inclinação (slope) e o intercepto da linha. A saída é um único número — o erro quadrático médio entre todas as previsões. Aqui, quanto menor, melhor.
Veja como uma possível implementação em Python poderia ficar:
import numpy as np
np.random.seed(42)
# Generate some fake housing data
square_footage = np.random.uniform(500, 3000, 100)
true_price = 150 * square_footage + 50000 + np.random.normal(0, 15000, 100)
def predict(x, slope, intercept):
return slope * x + intercept
def mse(y_true, y_pred):
return np.mean((y_true - y_pred) ** 2)
# Try two different parameter sets
slope_a, intercept_a = 150, 50000 # good fit
slope_b, intercept_b = 80, 100000 # bad fit
pred_a = predict(square_footage, slope_a, intercept_a)
pred_b = predict(square_footage, slope_b, intercept_b)
print(f"MSE (good fit): {mse(true_price, pred_a):,.2f}")
print(f"MSE (poor fit): {mse(true_price, pred_b):,.2f}")

MSE: bom ajuste versus ajuste ruim
O primeiro conjunto de parâmetros produz um MSE muito menor, o que indica melhor ajuste aos dados. É exatamente isso que o otimizador usa para decidir em que direção se mover.
Para quem é visual, considere a imagem a seguir:

Exemplo de MSE
Você consegue ver os dois ajustes em relação aos dados e também a superfície do MSE em uma faixa de valores de slope — para visualizar a própria função objetivo.
O gráfico da esquerda mostra como os dois conjuntos de parâmetros se ajustam aos dados. O da direita mostra a superfície do MSE ao longo dos valores de slope — a função objetivo como uma curva, com um mínimo claro que o otimizador tenta encontrar. Cada passo do gradient descent se move nessa curva em direção a esse mínimo.
Restrições e funções objetivo
A função objetivo diz o que otimizar. As restrições dizem o que você pode fazer.
Na maioria dos problemas reais, você não pode simplesmente maximizar ou minimizar à vontade. Você trabalha dentro de limites, como orçamento, prazo ou capacidade física. Esses limites são chamados de restrições e definem o conjunto de soluções válidas que o otimizador pode escolher.
Veja um exemplo de manufatura.
Você quer maximizar o lucro em duas linhas de produto. Sem restrições, a resposta seria produzir o máximo possível. Mas você tem 500 horas de máquina e 1.000 unidades de matéria-prima disponíveis. Essas são suas restrições. A função objetivo é a mesma (maximizar o lucro), mas o otimizador só pode buscar soluções dentro da região permitida por essas restrições.
Quando você muda as restrições, a solução ótima muda também, mesmo que a função objetivo não mude.
Essa estrutura — uma função objetivo com um conjunto de restrições — é a base da otimização com restrições. É assim que funciona a programação linear, a otimização de portfólio e muitos problemas reais de planejamento.
Conclusão
Todo problema de otimização — seja treinando uma rede neural, alocando recursos ou ajustando um modelo de regressão — se resume a uma coisa: uma função que você tenta minimizar ou maximizar.
A função objetivo é essa função. Ela define o que "melhor" significa, guia cada atualização de parâmetro e determina o que seu modelo realmente aprende. Se você acerta na escolha, o modelo consegue resolver o problema que você tem. Se erra, ele resolve outro problema — muitas vezes sem um erro óbvio para te alertar.
Escolher a função objetivo certa é uma decisão de design em ciência de dados, pois ela molda tudo que vem depois. Como praticante, sinta-se à vontade para experimentar — há muitas funções objetivo disponíveis.
Sem saber por onde começar? Nossos cursos Model Validation in Python e Hyperparameter Tuning in Python são ótimos pontos de partida para cientistas de dados do nível iniciante ao intermediário.
FAQs
O que é uma função objetivo?
Uma função objetivo é uma função matemática que mede quão boa é uma solução. Você fornece um conjunto de entradas, como parâmetros de modelo e variáveis de decisão, e ela retorna um único número. O objetivo é sempre encontrar as entradas que deixem esse número o mais alto ou o mais baixo possível.
Qual é a diferença entre função objetivo e função de loss?
Uma função de loss é um tipo específico de função objetivo usada em machine learning para medir o erro de previsão em um único exemplo de treino. Função objetivo é o termo mais amplo — pode se referir a qualquer função que você esteja minimizando ou maximizando, não apenas ao erro de previsão. Na prática, os dois termos são usados como sinônimos com frequência, mas a distinção importa ao ler artigos científicos.
Onde as funções objetivo são usadas?
Funções objetivo aparecem em qualquer problema que envolva otimização — machine learning, programação linear, alocação de recursos, finanças, logística e muito mais. Em machine learning, a função objetivo define o que o modelo aprende durante o treino. Fora de ML, ela define a meta em qualquer problema de otimização com ou sem restrições.
Por que a escolha da função objetivo importa em machine learning?
A função objetivo determina o que seu modelo realmente otimiza durante o treino. Se você escolher a errada, o modelo vai minimizar a coisa errada — e fará isso bem, o que torna o problema mais difícil de notar. Por exemplo, usar MSE em um problema de classificação não só gera resultados ruins, como resultados ruins com alta confiança, o que é pior.
Uma função objetivo pode ter múltiplos mínimos?
Sim — e esse é um dos grandes desafios ao treinar modelos de deep learning. Funções objetivo não convexas têm múltiplos mínimos locais, o que significa que um otimizador pode ficar preso em um vale que não é o melhor global. Por isso a inicialização de pesos, o agendamento da taxa de aprendizado e a escolha do otimizador importam — eles afetam se o otimizador vai encontrar uma boa solução no fim.


