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

Зачем нужно одно число

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

Как только у нас есть такое число, обучение превращается в задачу оптимизации: крутить веса так, чтобы потеря стала меньше. Весь следующий блок курса — про то, как её уменьшать; сегодняшний урок — про то, как её правильно выбрать. А выбор этот не безобиден: разные функции потерь учат модель разному, и неудачная приводит к тому, что формально ошибка мала, а модель бесполезна.

Квадрат, модуль и компромисс между ними

Начнём с регрессии, то есть предсказания числа, как спрос проката или цену. Ошибка на одном примере — это остаток r=y^yr=\hat y - y, то есть промах предсказания. Но остаток бывает и плюс, и минус, а нам нужна неотрицательная мера. Есть два естественных способа сделать её неотрицательной, и они дают две разные потери.

Первый способ — возвести в квадрат: среднеквадратичная потеря (MSE),

LMSE=1ni(y^iyi)2.L_{\text{MSE}} = \frac1n\sum_i (\hat y_i - y_i)^2 .

Квадрат растёт быстро: промах вдвое больше штрафуется вчетверо сильнее, промах втрое — вдевятеро. MSE гладкая (её производная — прямая 2r2r), и с ней удобно работать градиенту. Но у квадрата есть и тёмная сторона: один огромный промах даёт огромный штраф и перетягивает всё внимание модели на себя.

Второй — взять модуль: средняя абсолютная потеря (MAE),

LMAE=1niy^iyi.L_{\text{MAE}} = \frac1n\sum_i |\hat y_i - y_i| .

Модуль штрафует линейно: вдвое больший промах даёт вдвое больший штраф, и только. Гигантский выброс уже не заслоняет всё остальное. Зато MAE негладкая в нуле — у модуля там излом, и производная скачком меняет знак, что чуть неудобно для оптимизации. Мы встречали обе меры в уроке о регрессии, где RMSE и MAE спорили о том, как считать ошибку прогноза; теперь видно, что за спором стоит выбор функции потерь.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
График штрафа в зависимости от остатка: MSE — парабола, круто растущая; MAE — V-образная прямая с изломом в нуле; Huber — парабола у нуля, переходящая в прямые вдали, гладкая всюду
Рис. 20.1. Как разные потери штрафуют промах

Штраф как функция остатка r=y^yr=\hat y-y. MSE — парабола: далёкие промахи наказаны непропорционально сильно. MAE — «галочка» с изломом в нуле: штраф линейный, выбросы не доминируют, но в нуле негладко. Huber (ниже) берёт лучшее: парабола у нуля для гладкости, прямые вдали для устойчивости к выбросам.

Один выброс решает судьбу прямой

Разница между квадратом и модулем не тонкость для гурманов, а вопрос о том, чему научится модель. Покажем это на чистом факте. Возьмём числа 3,4,5,4,6,5,43,4,5,4,6,5,4 и добавим к ним один выброс 2020 (сбойный датчик, опечатка, редкое событие). Каким одним числом лучше всего описать весь набор?

Если минимизировать MSE, лучший ответ — среднее арифметическое, а оно равно 6,46{,}4: выброс 2020 утащил его далеко вверх от основной кучки около пяти. Если же минимизировать MAE, лучший ответ — медиана, и она равна 4,54{,}5, ровно в гуще данных, будто выброса и нет. Это общий математический факт: константа, минимизирующая квадратичную потерю, — всегда среднее, минимизирующая абсолютную — всегда медиана. А среднее чувствительно к выбросам, медиана — нет.

среднее=6,4минимум MSEмедиана=4,5минимум MAE.\underbrace{\text{среднее}=6{,}4}_{\text{минимум MSE}} \qquad \underbrace{\text{медиана}=4{,}5}_{\text{минимум MAE}} .

То же происходит с прямой регрессии: под MSE она кренится к выбросу, под MAE держится основной массы точек. Выбор потери — это выбор, слушать ли редкий громкий промах или большинство. Нет универсально верного ответа: если выброс — это сбой, его влияние надо гасить (MAE); если это редкое, но настоящее событие, которое дорого пропустить, слушать его стоит (MSE). Функция потерь кодирует, что мы считаем важным.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Облако точек с одним выбросом наверху; две подогнанные прямые — MSE-прямая заметно отклонена к выбросу, MAE-прямая проходит через основную массу точек почти не реагируя на выброс
Рис. 20.2. Один выброс: MSE-прямая кренится, MAE держится

Одно и то же облако с единственным выбросом наверху и две подогнанные прямые. Прямая под MSE (синяя) кренится вверх, к выбросу, портя предсказание для всех остальных; прямая под MAE (зелёная) почти его не замечает и держит основную массу. Квадрат слушает громкого; модуль — большинство.

Почему для классификации не годится точность

Перейдём к классификации. Казалось бы, мера ошибки очевидна: доля неверных ответов, то есть единица минус точность. Но эта мера негодна для обучения, и причина ровно та же, что погубила пороговую ступеньку в уроке об активациях. Точность считает ответы как 00 или 11: угадал или нет. Чуть подвинь веса — и, пока ответ не перескочит через границу, доля ошибок не изменится ни на сколько; производная всюду ноль. А на самом скачке она прыгает разом. Плоская лесенка без наклона не подсказывает, куда шагнуть, и оптимизация по ней слепа.

Нужна гладкая потеря, которая учитывает и «угадал ли», и «насколько уверенно». Здесь на помощь приходит softmax из урока о простейшей сети: он даёт не ответ-ярлык, а вероятность каждого класса. По вероятностям и построим потерю.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Слева доля ошибок как функция веса — ступенчатая лесенка с плоскими участками нулевого наклона; справа кросс-энтропия как функция того же веса — гладкая убывающая кривая с ненулевым наклоном везде
Рис. 20.3. Точность — лесенка, кросс-энтропия — гладкий склон

Доля ошибок (слева) как функция веса — ступенчатая лесенка: между скачками наклон нулевой, оптимизации не за что зацепиться. Кросс- энтропия (справа) на тех же данных — гладкий склон с ненулевым наклоном всюду: она отражает не только правильность, но и уверенность, и по ней можно спускаться к минимуму. Гладкость — вот чего требует обучение.

Кросс-энтропия: наказание за уверенную ошибку

Построим потерю для классификации. Модель выдала вероятность pp верного класса через softmax. Если pp близко к единице — модель права и уверена, потеря должна быть почти нулевой; если pp близко к нулю — модель уверенно ошиблась, потеря должна быть огромной. Ровно так ведёт себя минус логарифм:

LCE=logpверного класса.L_{\text{CE}} = -\log p_{\text{верного класса}} .

При p=1p=1 потеря log1=0-\log 1 = 0: идеально. При p=0,5p=0{,}5log0,50,69-\log 0{,}5\approx 0{,}69: половинчатая уверенность стоит заметно. А при p0p\to 0 логарифм уходит в минус бесконечность, и потеря взрывается: за уверенную ошибку кросс-энтропия карает без предела. Это и делает её хорошим учителем — она не терпит самоуверенной чепухи и сильнее всего толкает модель прочь от уверенных заблуждений.

Логарифм тут не случаен. Он превращает произведение вероятностей всех примеров (вероятность угадать всю выборку) в сумму логарифмов, а минимизация суммы logpi-\log p_i — это в точности максимизация вероятности данных при модели, принцип максимального правдоподобия. Кросс-энтропия — не выдумка, а мера того, насколько вероятными модель считает истинные ответы.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
График минус логарифма вероятности верного класса: у p=1 потеря ноль, плавно растёт к p=0.5 около 0.7, и круто уходит в бесконечность при приближении p к нулю
Рис. 20.4. Кросс-энтропия: чем увереннее ошибка, тем больнее

Кросс-энтропия как функция вероятности pp, которую модель дала верному классу. У p=1p=1 потеря ноль, у p=0,5p=0{,}5 — около 0,70{,}7, а к p=0p=0 взлетает в бесконечность. Правильный, но неуверенный ответ штрафуется слегка; уверенный неверный — жестоко. Эта асимметрия и учит модель быть и точной, и честной в своей уверенности.

Потеря — это ландшафт над весами

Соберём картину целиком. Средняя потеря по всем примерам — это число, зависящее от всех весов сети. Меняем веса — меняется потеря. Значит, над пространством всех возможных настроек весов висит поверхность потерь: где-то высоко (модель плоха), где-то низко (модель хороша). Обучить сеть значит найти на этой поверхности точку пониже.

L(w1,w2,,wm)min.L(w_1, w_2, \ldots, w_m) \longrightarrow \min .

Для сети с миллионами весов эта поверхность живёт в миллионномерном пространстве, и вообразить её нельзя — но для одного-двух весов её можно нарисовать: холмы и долины, дно которых и есть искомый минимум. Именно ради того, чтобы по этой поверхности можно было катиться вниз, мы и требовали от потери гладкости: у гладкой поверхности всюду есть наклон, указывающий, куда шагнуть. Как именно спускаться — предмет урока о градиенте и следующих; сегодня же мы поняли, что и зачем спускать: функцию потерь, потому что её минимум — это лучшая модель.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Трёхмерная чашеобразная поверхность потерь над плоскостью двух весов, с явным минимумом на дне; на дне отмечена лучшая настройка весов
Рис. 20.5. Потеря как поверхность над весами

Потеря над двумя весами — поверхность с долиной. Каждая точка плоскости внизу — набор весов, высота над ней — потеря при этих весах. Обучение ищет дно долины, где потеря наименьшая. Для настоящей сети таких осей миллионы, но идея та же: катиться вниз по поверхности потерь к её минимуму.

Русская линия: минимизировать худшее

MSE усредняет квадраты, MAE усредняет модули; обе смотрят на ошибку в среднем. Есть третий взгляд, и его подарил Пафнутий Чебышёв. В теории приближений, которую он основал в 1850-х, лучшим считается не то приближение, у которого мала средняя ошибка, а то, у которого мал максимальный промах — по всей области. Это минимаксный, или чебышёвский, критерий: минимизировать наибольшую ошибку, а не среднюю.

L=maxiy^iyimin.L_{\infty} = \max_i |\hat y_i - y_i| \longrightarrow \min .

Такая потеря говорит модели: неважно, как ты хороша в среднем, важно, чтобы нигде не было большого провала. Она незаменима там, где дорог именно худший случай: в проектировании, где деталь не должна отказать ни при одной нагрузке, или в гарантиях качества. Русская школа вероятностей и приближений — Чебышёв, за ним Марков и Ляпунов — выстроила фундамент, на котором стоят все статистические потери; а чебышёвский минимакс и сегодня остаётся третьим большим родом функции потерь рядом со средним квадратом и средним модулем.

Лаборатория: почувствуйте потерю руками

Формы потерь, устойчивость к выбросу и кросс-энтропия

Загружается живая иллюстрация…

Порядок опытов. Сначала посмотрите на формы: как MSE, MAE и Huber штрафуют один и тот же остаток — парабола, галочка, их гладкая помесь. Затем включите режим выброса: двигайте прямую по облаку точек и следите за двумя табло — под MSE прямая тянется к выбросу, под MAE держит большинство. Наконец, перейдите к классификации и подвигайте предсказанную вероятность верного класса — увидите, как кросс-энтропия почти ничего не стоит у единицы и взлетает к бесконечности у нуля. Каждая потеря — это своё представление о том, что такое «плохо».

Сборка: число, которое всему задаёт тон

Функция потерь — тихий центр всего обучения, одно число, которое модель будет уменьшать, и от его выбора зависит, чему она научится. Для регрессии квадрат наказывает выбросы непропорционально и тянется к ним, модуль устойчив, но негладок, а Huber мирит их; какой брать — решает смысл выброса, а не мода. Для классификации точность негладка и слепа, а кросс-энтропия гладкая, растёт из softmax-вероятностей и жёстко карает уверенную ошибку, обучая модель быть и точной, и честной. Все потери вместе образуют поверхность над весами, и обучить сеть — значит скатиться на её дно. Мы выбрали, что уменьшать; осталось понять, как. Для этого нужен инструмент, указывающий на каждой точке поверхности направление вниз: производная, градиент. С него начинается механика спуска, к которой мы теперь и переходим.

Задачи