Função de Perda
Quando iniciamos em aprendizado de máquina, as coisas parecem fáceis no início. Você segue um tutorial que pede para carregar um conjunto de dados, treinar um modelo e, em seguida, vê algo como: perda = “mse” ou critério = nn.CrossEntropyLoss(). E, assim, o tutorial começa a falar sobre equações, gradientes, otimização e letras gregas. Se você já concordou sem realmente entender o que uma função de perda faz, não está sozinho. Funções de perda são frequentemente explicadas de forma invertida. A maioria dos tutoriais começa com a fórmula quando deveriam começar com a ideia. Este artigo faz parte de minha série para iniciantes, onde farei com que as coisas sejam mais fáceis para você entender. Então, vamos começar.
Uma função de perda é como um modelo de aprendizado de máquina sabe quão errado ele está. Este é literalmente o conceito todo. O modelo faz uma previsão. A função de perda compara essa previsão com a resposta correta. Em seguida, ela dá ao modelo um número que diz: “Este é o quão ruim foi o seu erro.” Uma perda alta significa que o modelo estava muito errado. Uma perda baixa significa que o modelo estava próximo. Durante o treinamento, o modelo continua ajustando-se para fazer a perda menor. É assim que o aprendizado acontece. Se você já jogou um jogo de dardos, é muito semelhante. Você lança o dardo. Para melhorar, você precisa de feedback. Você precisa saber se o seu dardo estava ligeiramente fora, longe demais, muito alto ou muito à esquerda. Sem esse feedback, você não pode melhorar. Então, o centro do alvo é basicamente a resposta correta e o dardo é a previsão. Você mede a distância entre o dardo e o centro do alvo. A função de perda mede quão longe o dardo aterrissou. Essa distância se torna o sinal de feedback do modelo.
Assim como a distância do centro importa, jogar muito perto não é o mesmo que estar muito longe. Da mesma forma, para os modelos, apenas saber que a resposta está errada não é suficiente. O modelo precisa saber quão mal ele falhou para melhorar. Agora que temos uma compreensão do que é uma função de perda e por que a necessitamos, vamos olhar para algumas das funções de perda comuns usadas em aprendizado de máquina. A perda mais comum para prever números é o erro médio quadrado (EMQ). Ele é frequentemente usado quando o modelo está prevendo números como preços de casas, temperaturas ou tempos de entrega. A ideia é muito simples. Você pode escrevê-la em Python como isso:
Agora, eu sei que pegar os erros e, em seguida, calcular a média sobre as previsões faz sentido intuitivamente, mas entender por que os erros são quadrados pode ser confuso. Isso é feito por dois motivos: primeiro, para garantir que os erros sejam sempre positivos, e segundo, para dar mais peso aos erros maiores. Outra perda comum é o erro médio absoluto (EMA). O EMA também mede a lacuna entre previsões e valores reais, mas não eleva os erros ao quadrado. Em vez disso, ele simplesmente pega o valor absoluto.
Aqui está a função Python para escrevê-lo:
Então, ele pune os erros grandes, mas não tão severamente quanto o EMQ. Vamos olhar um gráfico rápido que compara as curvas do EMQ e EMA.
Até agora, falamos sobre prever números. Mas muitos problemas de aprendizado de máquina são sobre prever categorias. É um spam ou não? É uma imagem de um gato, cachorro ou peixe? É uma transação fraudulenta ou não? Para tarefas de classificação, os modelos normalmente produzem probabilidades como: 0,7 para gato, 0,2 para cachorro e 0,1 para peixe. Se a imagem realmente é um gato, essa é uma boa previsão. Mas se for um gato, então o modelo precisa ser penalizado por atribuir uma probabilidade mais baixa à resposta correta.
Então, a intuição é:
É por isso que a entropia cruzada é tão amplamente usada para classificação. Ela não se importa apenas se o modelo estava certo. Ela também se importa com quão confiante o modelo estava.
Agora que passamos por diferentes funções de perda, também quero esclarecer a diferença entre perda e precisão. Eles não são a mesma coisa. A precisão lhe diz quantas previsões estavam corretas. Mas a perda lhe diz quão ruins foram os erros do modelo. Se você tiver dois modelos — Modelo A e Modelo B — e ambos obtêm 90 de 100 previsões corretas, eles terão a mesma precisão. Mas um modelo pode estar muito confiante nas respostas certas e apenas ligeiramente errado nas incorretas, enquanto o outro pode estar apenas corretamente em muitos exemplos e extremamente confiante quando errado. Nesse caso, a precisão seria a mesma, mas a perda seria diferente.
Uma vez que o modelo tenha um número de perda, ele pode melhorar. O loop de treinamento parece assim:
Quando treinamos um modelo, também plotamos a perda ao longo do tempo. No início, o modelo comete muitos erros e é ruim em fazer previsões, então a perda é alta. Mas à medida que o treinamento progride, a perda diminui e o modelo melhora em fazer previsões. Uma curva de treinamento saudável geralmente parece assim:
Perda alta no início → queda acentuada → achatamento gradual
Como você pode ver na figura abaixo.
O achatamento é normal. Ele significa que o modelo aprendeu os padrões fáceis e agora está fazendo melhorias menores. Isso é um sinal de que o modelo está convergindo para uma solução. No entanto, se a perda parar de diminuir, pode ser um sinal de que o modelo está sobreajustado ou subajustado. Nesse caso, você precisará ajustar os h