Базовая нейронная сеть выглядит так, как показано ниже. Можете ли вы догадаться, что такое логиты?

# Define model
class ClassificationNetwork(nn.Module):
    def __init__(self):
        super().__init__()
        self.flatten = nn.Flatten()
        self.linear_relu_stack = nn.Sequential(
            nn.Linear(28*28, 512),
            nn.ReLU(),
            nn.Linear(512, 512),
            nn.ReLU(),
            nn.Linear(512, 10)
        )

    def forward(self, x):
        x = self.flatten(x)
        logits = self.linear_relu_stack(x)
        probabilities = torch.sigmoid(logits)
        return probabilities

Что такое логит-функция?

Функция logit служит механизмом отображения, который преобразует вероятности в диапазоне от 0 до 1 в действительные числа, простирающиеся от отрицательной до положительной бесконечности. Математически эта функция выражается следующим образом:

Имейте в виду, что выходные данные плотного (полностью связного) слоя, известного как логиты, довольно сырые. мы обычно нормализуем их до соответствующих вероятностей для использования. мы используем сигмовидную функцию, которая выполняет обратное отображение заданных логитов в вероятности. Математическое выражение сигмовидной функции выглядит следующим образом:

Таким образом, в задаче бинарной классификации вероятность выше 0,5 будет принадлежать одному классу, а остальная часть — другому. Мы также можем использовать логиты в многоклассовой классификации. Для многоклассовой классификации модель выводит логит для каждого класса. Затем к этим логитам применяется функция softmax, чтобы преобразовать их в вероятности, сумма которых равна 1. В качестве прогноза модели выбирается класс с наибольшей вероятностью, определяемый наибольшим логитом.

def forward(self, x):
        x = self.flatten(x)
        logits = self.linear_relu_stack(x)
        probabilities = torch.softmax(logits)
        return probabilities

Почему мы используем логиты?