Классификация: сигмоида и наклон

Модель, которую мы обучали, предсказывала число — время доставки. Но во многих задачах ответом является класс: спам или не спам, уйдёт клиент или останется, есть на снимке дефект или нет.

Сам градиентный спуск при этом не меняется ни на строчку. Меняются две вещи: линейный выход переводят в вероятность сигмоидой, а ошибку считают не через 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 модель уверенно ошибается: посмотрите, какой из двух наклонов даёт осмысленный шаг, а какой почти нулевой.

Числа сравниваются с допуском, а не как строки: достаточно совпадения в первых четырёх знаках. Печатать ничего не надо — функция возвращает значение.


Напишите программу
Auto
       

time 10000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
Python1