Функции потерь
Урок объясняет, что такое функция потерь и какую выбирать под задачу.
Функция потерь (loss) — это число, измеряющее, насколько предсказание модели расходится с правильным ответом; обучение стремится её минимизировать.
Loss — это компас обучения. Сеть не «знает», что такое цифра 7 или кошка; она лишь пытается сделать число loss меньше. Поэтому правильный выбор функции потерь определяет, чему именно научится модель.
Под какую задачу какой loss
| Задача | Loss | Выход модели |
| регрессия (число) | mean_squared_error (MSE) | линейный |
| бинарная классификация | binary_crossentropy | sigmoid |
| многоклассовая | categorical_crossentropy | softmax |
| многоклассовая, метки-числа | sparse_categorical_crossentropy | softmax |
MSE своими руками
Среднеквадратичная ошибка — средний квадрат разницы между предсказанием и истиной. Код запускается:
y_true = [3.0, -0.5, 2.0, 7.0]
y_pred = [2.5, 0.0, 2.0, 8.0]
mse = sum((t - p) ** 2 for t, p in zip(y_true, y_pred)) / len(y_true)
print("MSE:", round(mse, 4))Вывод:
MSE: 0.375
Crossentropy своими руками
Кросс-энтропия штрафует за уверенную ошибку: если модель уверенно предсказала неверный класс, loss резко растёт. Посчитаем для одного примера:
import math
# истинный класс — индекс 0
probs = [0.7, 0.2, 0.1] # предсказанные вероятности
true_index = 0
loss = -math.log(probs[true_index])
print("crossentropy:", round(loss, 4))
# а если модель уверена в неверном классе:
probs_bad = [0.1, 0.8, 0.1]
print("при ошибке:", round(-math.log(probs_bad[true_index]), 4))Вывод:
crossentropy: 0.3567 при ошибке: 2.3026
В Keras
Loss задают строкой в compile (требует TF):
model.compile(optimizer="adam",
loss="sparse_categorical_crossentropy",
metrics=["accuracy"])Как работает под капотом
На каждом шаге обучения Keras считает loss по батчу, а затем — градиент loss по всем весам. Градиент показывает, в какую сторону менять каждый вес, чтобы loss уменьшился. Loss обязан быть дифференцируемым: поэтому используют гладкие crossentropy и MSE, а не «долю верных ответов» напрямую (accuracy недифференцируема и служит лишь метрикой для человека).
Частые ошибки
- Перепутать crossentropy. Если метки — целые числа (0,1,2...), нужен
sparse_categorical_crossentropy; если one-hot — обычныйcategorical_crossentropy. - MSE для классификации. Для классов почти всегда лучше crossentropy.
- Смотреть только на accuracy. Loss точнее отражает уверенность модели; accuracy — лишь удобная для человека метрика.
Итог
- Loss измеряет ошибку; обучение минимизирует именно его.
- MSE — для регрессии, crossentropy — для классификации.
sparse_версия — когда метки целые числа, обычная — когда one-hot.- Loss должен быть дифференцируемым; accuracy — это метрика, а не loss.