Среднеквадратичная ошибка - это функция потерь, часто используемая для задач регрессии. Пусть
Пусть
class MSE(Criterion):
def forward(self, input, target):
batch_size = input.shape[0]
self.output = np.sum(np.power(input - target, 2)) / batch_size
return self.output
def backward(self, input, target):
self.grad_output = (input - target) * 2 / input.shape[0]
return self.grad_output
Cross entropy определяет растояние между двумя распределениями: реальным распределением
class CrossEntropy(Criterion, Softmax):
"""Тоже самое, что и Sofrmax + NLL только быстрее.
Соответсвенно принимает не распределение вероятностей, a логиты (выход Linear).
"""
def forward(self, input, target):
batch_size = input.shape[0]
self.prob = self._softmax(input)
# чтобы нигде не было взятий логарифма от нуля:
eps = 1e-9
prob_clamp = np.clip(self.prob, eps, 1 - eps)
self.output = np.sum(-np.log(prob_clamp) * target) / batch_size
return self.output
def backward(self, input, target)
batch_size = input.shape[0]
eps = 1e-9
prob_clamp = np.clip(self.prob, eps, 1 - eps)
self.grad_output = (prob_clamp - target) / batch_size
return self.grad_output