Почему нельзя просто считать долю неправильных ответов?
Сеть умеет считать ответ и способна приблизить любую функцию — но
пока не знает, хорош её ответ или плох. Чтобы учиться, ей нужно одно
число, говорящее «насколько плохо». Сегодня мы придумаем это число —
функцию потерь — и увидим, что от его выбора зависит, чему модель
научится: устоит ли она перед выбросом, будет ли честна в
вероятностях и что вообще сочтёт за ошибку.
Зачем нужно одно число
Прошлые уроки собрали сеть, которая по входу выдаёт ответ. Но сеть
рождается со случайными весами и отвечает наугад. Чтобы она улучшалась,
кто-то должен сказать ей, насколько её ответ плох, и не расплывчато,
а числом, которое можно уменьшать. Это число и есть функция потерь:
она берёт предсказание модели и правильный ответ и возвращает меру их
расхождения. Ноль означает идеальное попадание, больше — хуже.
Как только у нас есть такое число, обучение превращается в задачу
оптимизации: крутить веса так, чтобы потеря стала меньше. Весь
следующий блок курса — про то, как её уменьшать; сегодняшний урок — про
то, как её правильно выбрать. А выбор этот не безобиден: разные
функции потерь учат модель разному, и неудачная приводит к тому, что
формально ошибка мала, а модель бесполезна.
Квадрат, модуль и компромисс между ними
Начнём с регрессии, то есть предсказания числа, как спрос проката или цену.
Ошибка на одном примере — это остаток r=y^−y, то есть промах
предсказания. Но остаток бывает и плюс, и минус, а нам нужна
неотрицательная мера. Есть два естественных способа сделать её
неотрицательной, и они дают две разные потери.
Первый способ — возвести в квадрат: среднеквадратичная потеря (MSE),
LMSE=n1i∑(y^i−yi)2.
Квадрат растёт быстро: промах вдвое больше штрафуется вчетверо
сильнее, промах втрое — вдевятеро. MSE гладкая (её производная —
прямая 2r), и с ней удобно работать градиенту. Но у квадрата есть
и тёмная сторона: один огромный промах даёт огромный штраф и перетягивает
всё внимание модели на себя.
Второй — взять модуль: средняя абсолютная потеря (MAE),
LMAE=n1i∑∣y^i−yi∣.
Модуль штрафует линейно: вдвое больший промах даёт вдвое больший штраф, и
только. Гигантский выброс уже не заслоняет всё остальное. Зато MAE
негладкая в нуле — у модуля там излом, и производная скачком меняет
знак, что чуть неудобно для оптимизации. Мы встречали обе меры в
уроке о регрессии, где RMSE и MAE спорили о том, как
считать ошибку прогноза; теперь видно, что за спором стоит выбор
функции потерь.
Штраф как функция остатка r=y^−y. MSE — парабола: далёкие промахи
наказаны непропорционально сильно. MAE — «галочка» с изломом в нуле:
штраф линейный, выбросы не доминируют, но в нуле негладко. Huber
(ниже) берёт лучшее: парабола у нуля для гладкости, прямые вдали для
устойчивости к выбросам.
Один выброс решает судьбу прямой
Разница между квадратом и модулем не тонкость для гурманов, а вопрос
о том, чему научится модель. Покажем это на чистом факте. Возьмём числа
3,4,5,4,6,5,4 и добавим к ним один выброс 20 (сбойный датчик,
опечатка, редкое событие). Каким одним числом лучше всего описать весь
набор?
Если минимизировать MSE, лучший ответ — среднее арифметическое, а оно
равно 6,4: выброс 20 утащил его далеко вверх от основной кучки
около пяти. Если же минимизировать MAE, лучший ответ — медиана, и она
равна 4,5, ровно в гуще данных, будто выброса и нет. Это общий
математический факт: константа, минимизирующая квадратичную потерю, —
всегда среднее, минимизирующая абсолютную — всегда медиана. А среднее
чувствительно к выбросам, медиана — нет.
минимум MSEсреднее=6,4минимум MAEмедиана=4,5.
То же происходит с прямой регрессии: под MSE она кренится к выбросу,
под MAE держится основной массы точек. Выбор потери — это выбор,
слушать ли редкий громкий промах или большинство. Нет универсально
верного ответа: если выброс — это сбой, его влияние надо гасить (MAE);
если это редкое, но настоящее событие, которое дорого пропустить,
слушать его стоит (MSE). Функция потерь кодирует, что мы считаем
важным.
Рис. 20.2. Один выброс: MSE-прямая кренится, MAE держится
Одно и то же облако с единственным выбросом наверху и две подогнанные
прямые. Прямая под MSE (синяя) кренится вверх, к выбросу, портя
предсказание для всех остальных; прямая под MAE (зелёная) почти его не
замечает и держит основную массу. Квадрат слушает громкого; модуль —
большинство.
Почему для классификации не годится точность
Перейдём к классификации. Казалось бы, мера ошибки очевидна: доля
неверных ответов, то есть единица минус точность. Но эта мера негодна
для обучения, и причина ровно та же, что погубила пороговую ступеньку
в уроке об активациях. Точность считает ответы как 0
или 1: угадал или нет. Чуть подвинь веса — и, пока ответ не
перескочит через границу, доля ошибок не изменится ни на сколько;
производная всюду ноль. А на самом скачке она прыгает разом.
Плоская лесенка без наклона не подсказывает, куда шагнуть, и оптимизация
по ней слепа.
Нужна гладкая потеря, которая учитывает и «угадал ли», и
«насколько уверенно». Здесь на помощь приходит softmax из
урока о простейшей сети: он даёт не ответ-ярлык, а
вероятность каждого класса. По вероятностям и построим потерю.
Доля ошибок (слева) как функция веса — ступенчатая лесенка: между
скачками наклон нулевой, оптимизации не за что зацепиться. Кросс-
энтропия (справа) на тех же данных — гладкий склон с ненулевым наклоном
всюду: она отражает не только правильность, но и уверенность, и по ней
можно спускаться к минимуму. Гладкость — вот чего требует обучение.
Кросс-энтропия: наказание за уверенную ошибку
Построим потерю для классификации. Модель выдала вероятность p
верного класса через softmax. Если p близко к единице — модель
права и уверена, потеря должна быть почти нулевой; если p близко к
нулю — модель уверенно ошиблась, потеря должна быть огромной. Ровно так
ведёт себя минус логарифм:
LCE=−logpверногокласса.
При p=1 потеря −log1=0: идеально. При p=0,5 —
−log0,5≈0,69: половинчатая уверенность стоит заметно.
А при p→0 логарифм уходит в минус бесконечность, и потеря
взрывается: за уверенную ошибку кросс-энтропия карает без предела.
Это и делает её хорошим учителем — она не терпит самоуверенной чепухи и
сильнее всего толкает модель прочь от уверенных заблуждений.
Логарифм тут не случаен. Он превращает произведение вероятностей всех
примеров (вероятность угадать всю выборку) в сумму логарифмов, а
минимизация суммы −logpi — это в точности максимизация
вероятности данных при модели, принцип максимального правдоподобия.
Кросс-энтропия — не выдумка, а мера того, насколько вероятными модель
считает истинные ответы.
Рис. 20.4. Кросс-энтропия: чем увереннее ошибка, тем больнее
Кросс-энтропия как функция вероятности p, которую модель дала верному
классу. У p=1 потеря ноль, у p=0,5 — около 0,7, а к p=0
взлетает в бесконечность. Правильный, но неуверенный ответ штрафуется
слегка; уверенный неверный — жестоко. Эта асимметрия и учит модель быть
и точной, и честной в своей уверенности.
Потеря — это ландшафт над весами
Соберём картину целиком. Средняя потеря по всем примерам — это число,
зависящее от всех весов сети. Меняем веса — меняется потеря. Значит,
над пространством всех возможных настроек весов висит поверхность
потерь: где-то высоко (модель плоха), где-то низко (модель хороша).
Обучить сеть значит найти на этой поверхности точку пониже.
L(w1,w2,…,wm)⟶min.
Для сети с миллионами весов эта поверхность живёт в миллионномерном
пространстве, и вообразить её нельзя — но для одного-двух весов её
можно нарисовать: холмы и долины, дно которых и есть искомый минимум.
Именно ради того, чтобы по этой поверхности можно было катиться вниз,
мы и требовали от потери гладкости: у гладкой поверхности всюду есть
наклон, указывающий, куда шагнуть. Как именно спускаться — предмет
урока о градиенте и следующих; сегодня же мы поняли, что
и зачем спускать: функцию потерь, потому что её минимум — это лучшая
модель.
Потеря над двумя весами — поверхность с долиной. Каждая точка
плоскости внизу — набор весов, высота над ней — потеря при этих весах.
Обучение ищет дно долины, где потеря наименьшая. Для настоящей сети
таких осей миллионы, но идея та же: катиться вниз по поверхности
потерь к её минимуму.
Русская линия: минимизировать худшее
MSE усредняет квадраты, MAE усредняет модули; обе смотрят на ошибку в
среднем. Есть третий взгляд, и его подарил Пафнутий Чебышёв. В теории
приближений, которую он основал в 1850-х, лучшим считается не то
приближение, у которого мала средняя ошибка, а то, у которого мал
максимальный промах — по всей области. Это минимаксный, или
чебышёвский, критерий: минимизировать наибольшую ошибку, а не среднюю.
L∞=imax∣y^i−yi∣⟶min.
Такая потеря говорит модели: неважно, как ты хороша в среднем, важно,
чтобы нигде не было большого провала. Она незаменима там, где
дорог именно худший случай: в проектировании, где деталь не должна
отказать ни при одной нагрузке, или в гарантиях качества. Русская школа
вероятностей и приближений — Чебышёв, за ним Марков и Ляпунов —
выстроила фундамент, на котором стоят все статистические потери; а
чебышёвский минимакс и сегодня остаётся третьим большим родом функции
потерь рядом со средним квадратом и средним модулем.
Лаборатория: почувствуйте потерю руками
Формы потерь, устойчивость к выбросу и кросс-энтропия
График шире экрана — листайте по горизонтали →
Загружается живая иллюстрация…
Порядок опытов. Сначала посмотрите на формы: как MSE, MAE и Huber
штрафуют один и тот же остаток — парабола, галочка, их гладкая помесь.
Затем включите режим выброса: двигайте прямую по облаку точек и
следите за двумя табло — под MSE прямая тянется к выбросу, под MAE
держит большинство. Наконец, перейдите к классификации и подвигайте
предсказанную вероятность верного класса — увидите, как кросс-энтропия
почти ничего не стоит у единицы и взлетает к бесконечности у нуля.
Каждая потеря — это своё представление о том, что такое «плохо».
Сборка: число, которое всему задаёт тон
Функция потерь — тихий центр всего обучения, одно число, которое модель
будет уменьшать, и от его выбора зависит, чему она научится. Для
регрессии квадрат наказывает выбросы непропорционально и тянется к ним,
модуль устойчив, но негладок, а Huber мирит их; какой брать — решает
смысл выброса, а не мода. Для классификации точность негладка и слепа,
а кросс-энтропия гладкая, растёт из softmax-вероятностей и жёстко карает
уверенную ошибку, обучая модель быть и точной, и честной. Все потери
вместе образуют поверхность над весами, и обучить сеть — значит скатиться
на её дно. Мы выбрали, что уменьшать; осталось понять, как. Для этого
нужен инструмент, указывающий на каждой точке поверхности направление
вниз: производная, градиент. С него начинается механика спуска, к
которой мы теперь и переходим.