Pytorch Tutorial Introducción Serie 9----El significado de la función de pérdida

Directorio de artículos de la serie



prefacio

Con el aprendizaje continuo de Pytorch, hemos llegado a la discusión de la evaluación del modelo.En este número, daremos una introducción básica a la función de pérdida.


1. ¿Qué es la función de pérdida?

Una función de pérdida es una forma de medir la distancia entre el valor predicho del modelo y el valor real. Cuantifique la brecha matemáticamente, evalúe la precisión predictiva del modelo y optimícelo. Cuando el error entre el valor predicho del modelo y el valor real es pequeño, el valor de la función de pérdida también será pequeño.

En segundo lugar, el significado de la función de pérdida

Con la función de pérdida, todo el modelo tiene la piedra angular del entrenamiento. Más importante aún, la función de pérdida no solo guía el objetivo del modelo, sino que también invierte la estructura del modelo desde el lado opuesto.
Su significado esencial es guiar la predicción de la red neuronal para acercarse continuamente a la situación real minimizando la pérdida.
换言之:只有定义好了损失的计算方式,才有模型的搭建思路。

3. Introducción de pérdida común

1. Función de pérdida al cuadrado (Función de pérdida al cuadrado):

它的优点是可导,在梯度下降法中可以很方便地求解损失函数的最小值。
Para un conjunto de datos de entrenamiento dado, su función de pérdida se define como el promedio de la suma de los cuadrados de las diferencias entre los valores predichos de todas las muestras de entrenamiento y los valores reales. La fórmula es 1 2 ( y − y ^ ) 2 \frac{1}{2}(y - \hat{y})^221( yy^)2 , que se usa a menudo en problemas de regresión.

API en Pytorch: nn.MSELoss
Su método de implementación es muy simple, principalmente llamando torch.powa la función de suma torch.meanen PyTorch.
Aquí está nn.MSELossparte del código fuente (ejemplo):

class MSELoss(_Loss):
    def forward(self, input: Tensor, target: Tensor) -> Tensor:
        return torch.mean(torch.pow(input - target, 2))

En este código, MSELoss hereda de la clase _Loss, que define un método directo para calcular el valor de la función de pérdida. Este método recibe dos parámetros: la entrada representa el valor predicho del modelo y el objetivo representa el valor objetivo. La implementación de este método es muy simple, solo se necesita calcular la suma de cuadrados de la diferencia entre el valor predicho y el valor objetivo, y luego calcular el promedio de estos valores para obtener el valor de la función de pérdida.

2. Función de pérdida absoluta:

它的优点是对异常值不敏感,可以很好地避免因异常值的存在而使模型的预测结果变得不准确。
Similar a la función de pérdida cuadrática, también es para un conjunto de datos de entrenamiento dado, su función de pérdida se define como el promedio de la suma de los valores absolutos de las diferencias entre los valores pronosticados de todas las muestras de entrenamiento y el verdadero valores. La fórmula es ∣ y − y ^ ∣ |y - \hat{y}|yy^ , también se usa comúnmente en problemas de regresión.

API en Pytorch: nn.L1Loss
Su método de implementación es similar a nn.MSELoss, principalmente llamando torch.absa la función de suma torch.meanen PyTorch.
Aquí está nn.L1Lossparte del código fuente (ejemplo):

class L1Loss(_Loss):
    def forward(self, input: Tensor, target: Tensor) -> Tensor:
        return torch.mean(torch.abs(input - target))

En este código, la clase L1Loss también hereda de la clase _Loss, que define un método directo para calcular el valor de la función de pérdida. Este método recibe dos parámetros: la entrada representa el valor predicho del modelo y el objetivo representa el valor objetivo. La implementación de este método es muy simple, solo necesita calcular la suma del valor absoluto de la diferencia entre el valor predicho y el valor objetivo, y luego calcular el valor promedio de estos valores para obtener el valor de la función de pérdida.

3. Función de pérdida de entropía cruzada (función de pérdida de entropía cruzada):

它的优点是可以很好地表示模型的预测结果与真实值之间的差距,可以很方便地计算损失函数的最小值。
Se utiliza para medir la diferencia entre dos distribuciones de probabilidad. La fórmula es − ∑ inyi log ⁡ ( yi ^ ) -\sum_{i}^{n} y_i \log(\hat{y_i})inyyolo g (yyo^) , que se usa comúnmente en problemas de clasificación.

API en PyTorch: nn.CrossEntropyLoss
Su método de implementación es un poco más complicado que las dos clases anteriores, principalmente llamando a torch.nn.functional.nll_lossfunciones en PyTorch.
Aquí está nn.CrossEntropyLossparte del código fuente:

 class CrossEntropyLoss(_WeightedLoss):
  def forward(self, input: Tensor, target: Tensor) -> Tensor:
      return torch.nn.functional.nll_loss(input, target, weight=self.weight, reduction=self.reduction)

En este código, la clase CrossEntropyLoss hereda de la clase _WeightedLoss, que define un método directo para calcular el valor de la función de pérdida. Este método recibe dos parámetros: la entrada representa el valor predicho del modelo y el objetivo representa el valor objetivo. La implementación de este método consiste principalmente en llamar a la función torch.nn.function.nll_loss en PyTorch, que puede calcular la pérdida de entropía cruzada entre el valor de predicción del modelo y el valor objetivo.

4. Uso de API relacionadas

API en Pytorch: nn.MSELoss, nn.L1Loss,nn.CrossEntropyLoss

import torch
from torch import nn

# 定义模型
class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.linear1 = nn.Linear(1, 1)
        self.linear2 = nn.Linear(1, 2)

    def forward(self, x):
        return self.linear1(x), self.linear2(x)

# 实例化模型
model = Model()

# 定义损失函数
mse_loss = nn.MSELoss()
l1_loss = nn.L1Loss()
ce_loss = nn.CrossEntropyLoss()

# 计算损失
input = torch.tensor([[1.0]])
target1 = torch.tensor([[2.0]])
target2 = torch.tensor([[0, 1]])
output1, output2 = model(input)

loss1 = mse_loss(output1, target1)
loss2 = l1_loss(output1, target1)
loss3 = ce_loss(output2, target2)

total_loss = loss1 + loss2 + loss3
print(total_loss)

En este ejemplo, definimos un modelo lineal que genera un valor numérico y un valor predicho para una clasificación binaria, respectivamente. Luego, definimos tres funciones de pérdida: nn.MSELoss se usa para calcular la pérdida de valores al cuadrado, nn.L1Loss se usa para calcular la pérdida absoluta de valores y nn.CrossEntropyLoss se usa para calcular la pérdida de entropía cruzada de la clasificación binaria . Finalmente, sumamos los resultados de las tres funciones de pérdida para obtener el valor de pérdida total.


Resumir

Lo anterior es de lo que hablaré hoy. Estas tres funciones de pérdida se usan comúnmente. La elección de la función de pérdida debe determinarse de acuerdo con el tipo y los requisitos del problema real. Por ejemplo, para problemas de regresión, puede elegir la función de pérdida cuadrática o la función de pérdida absoluta; para problemas de clasificación, puede elegir la función de pérdida de entropía cruzada.

Supongo que te gusta

Origin blog.csdn.net/weixin_46417939/article/details/128227993
Recomendado
Clasificación