Модель, которую мы обучали, предсказывала число — время доставки. Но во многих задачах ответом является класс: спам или не спам, уйдёт клиент или останется, есть на снимке дефект или нет.
Сам градиентный спуск при этом не меняется ни на строчку. Меняются две вещи: линейный выход переводят в вероятность сигмоидой, а ошибку считают не через MSE. Причина не в красоте формулы — у MSE наклон почти нулевой там, где модель уверенно ошибается, и такие примеры почти не обучаются. Сейчас вы посчитаете оба наклона и увидите разрыв в числах.
А наклон кросс-энтропии — та самая величина, которую цепное правило понесёт назад через все слои сети на следующем занятии. Стоит встретить её здесь, пока она выглядит просто.
Подробно: Если ответ не число, а класс.
Задание
Напишите три функции
def sigmoid(z):
...
def naklon_mse(z): # наклон MSE по z, верная метка равна 1
...
def naklon_bce(z): # наклон кросс-энтропии по z, верная метка равна 1
...
Формулы: sigmoid(z) = 1 / (1 + e^(−z)); наклон MSE равен 2 · (p − 1) · p · (1 − p), наклон кросс-энтропии равен просто p − 1, где p = sigmoid(z).
Для степени возьмите math.exp.
Как проверить себя
Сигмоида переводит 0 в 0.5 и никогда не выдаёт ровно 0 или ровно 1 — это важно, потому что дальше от неё берут логарифм.
Посчитайте оба наклона при z = −6, −2, 0, 2 и найдите отношение. При z = −6 модель уверенно ошибается: посмотрите, какой из двух наклонов даёт осмысленный шаг, а какой почти нулевой.
Числа сравниваются с допуском, а не как строки: достаточно совпадения в первых четырёх знаках. Печатать ничего не надо — функция возвращает значение.