ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ

Функция потерь: как нейросеть понимает, что ошиблась

Сеть не может исправиться, пока не измерит, насколько она неправа. Эту работу делает функция потерь — числовая совесть модели. Разбираем, почему её выбор важнее, чем кажется.

Чтобы стать лучше, модели нужна одна-единственная цифра, которая честно говорит: вот настолько ты сегодня ошиблась.
Функция потерь превращает расплывчатое «модель плохо отвечает» в конкретное число, которое можно уменьшать.

Зачем вообще измерять ошибку числом

В прошлой статье сеть «спускалась с горы», где высота — это ошибка. Но чтобы спускаться, высоту надо чем-то мерить. Нельзя оптимизировать то, что не выражено числом. Функция потерь (по-английски loss) как раз и выдаёт это число: на вход — предсказание модели и правильный ответ, на выходе — одна величина, тем большая, чем сильнее модель промахнулась. Ноль означает идеальное попадание.

Самый понятный случай — предсказание числа

Пусть сеть предсказывает цену квартиры. Она сказала 5 миллионов, правильный ответ — 6. Промах на миллион. Естественная мера ошибки — взять разницу. Но если просто складывать разницы, плюсы и минусы будут гасить друг друга. Поэтому разницу возводят в квадрат: так и знак исчезает, и крупные ошибки штрафуются особенно сильно. Усреднив квадраты по всем примерам, получаем популярную среднеквадратичную ошибку (MSE):

$$L = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2$$

Здесь $y_i$ — правильный ответ, $\hat{y}_i$ — предсказание сети. Промах на 2 миллиона штрафуется не вдвое, а вчетверо сильнее, чем на миллион. Это заставляет модель в первую очередь избавляться от грубых ошибок.

Почему именно квадрат, а не, скажем, модуль разницы? Модуль тоже убирает знак, и его иногда используют. Но у квадрата есть приятное свойство: его график — гладкая парабола без изломов, а значит, у него в каждой точке есть аккуратный наклон. А наклон — ровно то, что нужно градиентному спуску, чтобы понять, в какую сторону шагать. Гладкая потеря делает обучение устойчивым и предсказуемым, поэтому квадрат разницы стал почти стандартом для задач с числами.

А если ответ — это «да/нет» или выбор класса

Когда сеть не предсказывает число, а выбирает категорию («кошка или собака», «спам или не спам»), квадрат разницы работает плохо. Здесь модель выдаёт вероятности, и нужна функция, которая жёстко наказывает за уверенную ошибку. Её называют кросс-энтропией. Идея простая: если сеть была на 99% уверена, что это кошка, а там собака — штраф огромный; если она честно колебалась 50 на 50 — штраф умеренный. Самоуверенность, обернувшаяся ошибкой, обходится дорого.

ЗадачаТипичная потеря
Предсказать число (цену, температуру)Среднеквадратичная ошибка
Выбрать класс (кошка/собака)Кросс-энтропия

Посчитаем штраф руками

predictions = [5.0, 3.0, 8.0]   # что сказала модель
answers     = [6.0, 3.0, 7.0]   # как было на самом деле

mse = sum((p - a) ** 2 for p, a in zip(predictions, answers)) / len(answers)
print(round(mse, 3))   # 0.667 — небольшая средняя ошибка

Это и есть та высота, которую алгоритм обучения будет снижать шаг за шагом.

Почему выбор потери — это не мелочь

Функция потерь задаёт, что для модели значит «хорошо». Поменяете её — и сеть начнёт стремиться к другому. Если штрафовать только за средний промах, модель может махнуть рукой на редкие, но важные случаи. Если жёстко карать за уверенные ошибки, она станет осторожнее. Поэтому инженеры подбирают потерю под задачу так же тщательно, как архитектуру сети.

Коротко

Функция потерь — это компас обучения. Она сводит качество модели к одному числу, которое градиентный спуск умеет уменьшать. Без неё сеть не знала бы, в какую сторону меняться, — и осталась бы навсегда случайной.

#loss#нейросети#обучение#функция потерь