Funções de Custo — Uma breve introdução

Anwar Hermuche
6 min readAug 24, 2022

--

Neste artigo vou apresentar a teoria por trás desse termo muito usado em algoritmos de Machine Learning.

Função de Custo

Imagem 1

Um dos objetivos principais em algoritmos de aprendizagem supervisionada é a definição de uma função que será otimizada durante as iterações para encontrar os parâmetros ideais para o nosso modelo. Na maioria dos casos, essa função será a função de custo, que o nosso objetivo será minimizar o seu resultado. Várias pessoas confundem função de custo e função de perda. A função de perda é quando nos referimos ao erro de apenas um exemplo do nosso dataset. Já a função de custo é quando nos referimos à média da função de custo de todos os nossos exemplos do dataset.

Quando estamos estudando pela primeira vez sobre a função de custo, nos confundimos porque a vemos em modelos de regressão, classificação, redes neurais etc.. Ou seja, parece que cada uma delas tem algo de diferente, apesar de possuírem o mesmo nome. Para resolver isso, é bom falarmos sobre funções de custo para três tipos de modelos: Modelos de Regressão, Classificação Binária e Classificação Multi-classe.

Funções de Custo: Modelos de Regressão

Vamos iniciar com a função de custo utilizada em modelos de Regressão. Sabemos que modelos de regressão são utilizados para fazermos a predição de alguma variável contínua. Então, na Função de Custo de Regressão, utilizamos a distância entre o valor verdadeiro e o valor previsto como base para a otimização do problema, cujo objetivo seria minimizar essa distância ao máximo.

Na imagem 1 podemos ver um exemplo de como é a fórmula da função de custo. Muitas pessoas têm a dúvida do porquê algumas fórmulas da função de custo têm o 2 multiplicando o m e outras fórmulas não. A explicação é bem simples: quando a fórmula não possui o 2, significa que podemos chamar a função de custo de erro quadrático médio (MSE). Quando temos o 2 dividindo, perdemos o poder de nomear a função como sendo o MSE, e simplificamos o cálculo do gradiente descendente. Porém, no final das contas, o 2 não interfere quando o nosso objetivo é minimizar o resultado da função.

Além dessa fórmula da imagem 1, podemos utilizar a função de custo que representa o erro médio absoluto (MAE), que acaba sendo menos sensível a outliers quando comparada ao MSE. Abaixo, vou deixar sua fórmula para quem tenha curiosidade:

Imagem 2

Funções de Custo: Modelos de Classificação

Apesar de o nome ser igual (até porque o objetivo das duas são iguais, que é quantificar o erro do modelo), as funções de custo utilizadas nos modelos de classificação têm estruturas diferentes.

Uma função de perda muito usada é a Entropia Cruzada (cross-entropy). Resumidamente, ela classifica a qual classe aquela amostra pertence baseando-se em probabilidades, logo, a classe que possui maior probabilidade é a escolhida para aquela amostra. Podemos entender a função de entropia cruzada como sendo um meio para medir a distância entre duas distribuições de probabilidade. Imagine que em uma determinada amostra de treino com o dataset Iris a classe prevista para ela é Setosa. Porém, o modelo de machine learning nos diz que ela tem uma probabilidade de 0.8 de ser Setosa, ou seja, devemos reajustar os pesos para que essa distribuição de probabilidade tenda a ficar cada vez mais próxima da real.

Classificações Multi-classe

Em problemas onde há várias classes e cada amostra do nosso dataset pertence a apenas uma das classes, utilizamos esse tipo de função de custo.

Para começarmos, vamos definir como a nossa entropia cruzada é calculada. Aqui, vamos fazer a multiplicação de cada uma das probabilidades reais de uma amostra pertencer a uma classe pelo logaritmo da probabilidade prevista. Se ficou confuso explicando com palavras, acho que com um exemplo e um pingo de álgebra pode facilitar o entendimento.

Sendo assim, imagine, novamente, o dataset Iris. Nele, vamos pegar uma amostra do dataset de treino onde a Iris pertence à classe Setosa. Logo, a probabilidade de ela pertencer à classe Setosa sé igual a 1, e a probabilidade de ela pertencer as outras classes sendo igual a 0. Agora, suponha que o nosso modelo de Machine Learning nos diz que a probabilidade de ela pertencer à classe Setosa é igual a 0.75; à classe Versicolor, 0.2; e à classe Virginica, 0.05. Sendo assim, podemos representar todos esses valores de probabilidades reais e previstas em dois vetores:

Imagem 3

Agora, para calcular o valor da entropia cruzada, vamos utilizar a seguinte fórmula:

Imagem 4

Ou seja, obtemos o vetor transposto de P, aplicamos a função ln (logaritmo natural) em cada um dos seus elementos, fazemos o produto escalar com o vetor Y e, por fim, multiplicamos o resultado por -1. Matematicamente, fica assim:

Imagem 5

Se fizermos o cálculo, chegamos em CE(y, p) = 0.287. Com esse resultado, acabamos de descobrir a entropia cruzada para apenas uma amostra do nosso dataset de treino. Para definirmos qual é o erro de classificação do dataset completo faremos nada mais que a soma de todas as entropias cruzadas para cada amostra do dataset de treino dividido pelo número de amostras, ou seja, a famosa média. Por fim, podemos representar a função de custo da seguinte maneira:

Imagem 6

É bom ressaltar que a utilização de diferentes bases muda apenas a unidade de medida do resultado. Se utilizarmos, por exemplo, logaritmo na base 2, o resultado será em bits. No nosso exemplo, utilizamos logaritmo natural, logo o resultado tem como unidade de medida o nat (unidade natural de informação).

Classificações Binárias

Nas classificações binárias, a saída pode assumir apenas dois valores (1 e 0 são os mais comuns). Um caso onde pode haver a utilização desse modelo de classificação é determinar se uma determinada contém um gato ou não, ou seja, sim ou não (1 ou 0).

Matematicamente, vamos calcular a entropia cruzada para esse tipo de classificação da seguinte maneira:

Imagem 7

Novamente, o erro de classificação do dataset completo será a soma de cada erro individual das amostras dividido pelo número de amostras, isto é, a média. Podemos representar a função de custo da seguinte forma:

Imagem 8

Conclusão

Pronto, vimos uma boa parte sobre as funções de custo que utilizaremos para montar alguns modelos em artigos futuros. Acho muito válido ficar por dentro da teoria matemática por trás dos modelos para não ficar trabalhando como uma caixa preta, isto é, sem saber o que realmente se passa durante o processamento dos dados (exceto em modelos de redes neurais com várias hidden layers, rs.).

Espero que com esse artigo eu possa ter esclarecido um pouco sobre as funções de custo.

Até já, pessoal

--

--