Смещение (bias) и разброс (variance)

Сегодня дадим немного объяснений стандартных для машинного обучения понятий: смещение, разброс, переобучение и недообучение. Как всегда, всё объясним просто (но нужна будет математическая подготовка), на картинках, с примерами (в данном случае на модельных задачах). Все рисунки и эксперименты авторские,  в конце, по традиции, изюминка – в чём при объяснении этих понятий Вас обманывают на курсах по ML и в учебниках;)

bias_variance

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

Второе – недообучение (underfitting) – явление, когда ошибка на обучающей выборке достаточно большая, часто говорят «не удаётся настроиться на выборку». Такой странный термин объясняется тем, что недообучение при настройке алгоритмов итерационными методами (например, нейронных сетей методом обратного распространения) можно наблюдать, когда сделано слишком маленькое число итераций, т.е. «не успели обучиться».

Третье – сложность (complexity) модели алгоритмов (допускает множество формализаций) – оценивает, насколько разнообразно семейство алгоритмов в модели с точки зрения их функциональных свойств (например, способности настраиваться на выборки). Повышение сложности (т.е. использование более сложных моделей) решает проблему недообучения и вызывает переобучение.

Сначала опишем на примере, как проявляется проблема выбора сложности и почему возникает переобучение. Для начала рассмотрим задачу регрессии. Для простоты будем считать, что это регрессия от одного признака x. Целевая зависимость y(x) известна в конечном наборе точек. На рис. 1 показана выборка для зависимости вида y = sin(4x) + шум, на рис. 2 для зашумлённой пороговой зависимости.

pic_bias_variance01
Рис. 1. Настройка полиномов различных степеней на обучающую выборку.
pic_bias_variance02.png
Рис. 2. Настройка полиномов различных степеней на обучающую выборку.

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

Если попробовать решить задачу полиномами различной степени, то мы получим рис. 3 (он построен для первой задачи, но во второй картина аналогичная). Видно, что с увеличением степени ошибка на обучающей выборке падает, а на тестовой (мы взяли очень мелкую сетку отрезка [0, 1]) – сначала падает, потом возрастает.

pic_bias_variance08.png
Рис. 3. Зависимость ошибки на обучении и тесте от степени полинома.

Попробуем разобраться, в чём дело с теоретической точки зрения (сейчас немного математики). Наша целевая зависимость имеет вид

b1.png

Мы строим алгоритм (в нашем случае полином фиксированной степени) a=a(x), посмотрим чему равно математическое ожидание квадрата отклонения ответа алгоритма от истинного значения:

b2.png

Здесь важно понимать, как берутся матожидания (т.е., по сути, интегрирования) в приведённых выше формулах. Мы считаем, что обучающая выборка выбирается случайно из некоторого распределения, настроенный алгоритм тоже случаен, поскольку зависит от выборки, настройка алгоритма также может быть стохастической. Таким образом, матожидание берётся по всем данным (обучающим выборкам) и настройкам алгоритма, а сами формулы записываются в конкретной точке x:

b3.png

При желании, можно проинтегрировать полученные формулы и по всем объектам (точнее, по какому-то распределению всех объектов) и получить уже смещение и разброс модели алгоритмов как таковой.

Разбросом (variance) мы назвали дисперсию ответов алгоритмов Da, а смещением (bias) – матожидание разности между истинным ответом и выданным алгоритмом: E(f – a). Мы получили, что ошибка раскладывается на три составляющие. Первая связана с шумом в самих данных, а вот две остальные связаны с используемой моделью алгоритмов. Понятно, что разброс характеризует разнообразие алгоритмов (из-за случайности обучающей выборки, в том числе шума, и стохастической природы настройки), а смещение – способность модели алгоритмов настраиваться на целевую зависимость. Проиллюстрируем это. На рис. 4-5 – показаны различные полиномы первой степени, они настроены на разных обучающих выборках. В точке x=0.5 ответы алгоритмов являются случайными величинами, они немного «разбросаны» (есть variance), а также они сильно смещены (есть bias) относительно правильного ответа (который, кстати, даже если нам и известен, то с точностью до шума).

pic_bias_variance11.png
Рис. 4. Полиномы 1й степени, настроенные на разных обучающих выборках.
pic_bias_variance10.png
Рис. 5. Шум, разброс и смещение при настройках полиномов 1й степени.

На рис. 6-7 изображены уже полиномы второй степени (настроенные на тех же выборках). В точке x=0.5 у них сильно меньше смещение и чуть меньше разброс. Видно, что они совсем неплохо описывают целевую зависимость во всех точках.

pic_bias_variance13.png
Рис. 6. Полиномы 2й степени, настроенные на разных обучающих выборках.
pic_bias_variance12.png
Рис. 7. Шум, разброс и смещение при настройках полиномов 2й степени.

Часто разброс и смещение иллюстрируют такими картинками – рис. 8. Если провести аналогию, что алгоритм – это игрок в дартс, то самый лучший игрок будет иметь небольшое смещение и разброс – его дротики ложатся кучно «в яблочко», если у игрока большое смешение, то они сгруппированы около другой точки, а если большой разброс, то они ложатся совсем не кучно. Эта аналогия понятна, но может сбить с толку. Например, известно, что спортсменов учат стрелять кучно, поскольку нужного смещения легко добиться (например, целясь повыше). С алгоритмами машинного обучения всё сложнее. Смещение нельзя просто «подвинуть», приходится переходить к другой (например, более сложной модели), а у неё может быть уже другой разброс.

bv_all.jpg
Рис. 8. Объяснение разброса и смещения на примере игры в дартс.

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

Теперь рассмотрим самую частую иллюстрацию, которую приводят при объяснении разброса и смещения, см. рис. 9. Она полностью согласуется с рис. 3. При увеличении сложности модели (например, степени полинома) ошибка на независимом контроле сначала падает, потом начинает увеличиваться. Обычно это связывают с уменьшением смещения (в сложных моделях очень много алгоритмов, поэтому наверняка найдутся те, которые хорошо описывают целевую зависимость) и увеличением разброса (в сложных моделях больше алгоритмов, а следовательно, и больше разброс).

pic_bias_variance19new.png
Рис. 9. Классическая иллюстрация изменения разброса и смещения.

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

Теперь рассмотрим задачу классификации. Отметим, что для неё тоже есть результат о разложении ошибки на шум, разброс и смещение. На рис. 10-12 показаны результаты экспериментов в задаче с двумя классами (стандартная задача «два полумесяца») и моделью k ближайших соседей (kNN) при разных k. Результат также согласуется с рис. 9, если учесть, что изображена точность, а не ошибка, и сложность алгоритма ~ 1/k. Возникает вопрос, а почему так вводится сложность для kNN? Ведь при разных k эти алгоритмы

  • имеют одинаковые параметры (что бы не понималось под этим…),
  • требуют хранения всей обучающей выборки (являются «ленивыми» – lazy algorithms),
  • 9NN даже «чуть сложнее в реализации» 1NN (требует поиска большего числа соседей).

Всё очень просто: часто сложность как раз и логично формализовать как 1/variance. На рис. 11 показаны разделяющие поверхности метода 1NN для разных выборок, которые описывают одну и ту же целевую зависимость. Они очень сильно отличаются друг от друга. А разделяющие поверхности kNN при больших k, см. рис 12, различаются существенно меньше. И чем выше k, тем стабильней результат. В этом смысле это очень простые алгоритмы: то, как они разделяют классы, меньше зависит от исходных данных, т.е. по определению ответ алгоритма 9NN в каждой точке зависит от 9и ближайших соседей, а по факту он практически не меняется от выборки к выборке (при варьировании обучения).

pic_biasvariance_knn06.png
Рис. 10. Точность метода kNN при разных k на обучении и контроле.
pic_biasvariance_all2.png
Рис. 11. Разделяющие поверхности 1NN для разных выборок (одинаково распределённых).
pic_biasvariance_all3.png
Рис. 12. Разделяющие поверхности 9NN для тех же выборок.

Теперь покажем, в чём не правы стандартные учебники и учебные курсы по машинному обучению. Проведём эксперименты по оцениванию разброса и смещения в модельных задачах. На рис. 13-14 приведены результаты для задачи с целевой зависимостью «ступенька», а на рис. 15-16 для задачи с целевой зависимостью «sin(4x)».

pic_bias_variance15.png
Рис. 13. «Средние» полиномы различных степеней в задаче «ступенька».
pic_bias_variance16.png
Рис. 14. Ошибка при разных степенях полиномов в задаче «ступенька».
pic_bias_variance17.png
Рис. 15. «Средние» полиномы различных степеней в задаче «синус».
pic_bias_variance18.png
Рис. 16. Ошибка при разных степенях полиномов в задаче «синус».

Очевидно, что степень полинома – очень естественная мера сложности для полиномиальной регрессии. Но полученные рисунки немного отличаются от рис. 9:

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

Почему так происходит? Одна их причин в том, что «сложность модели», если мы хотим видеть красивые графики монотонных и унимодальных функций, правильнее определять для конкретных данных! Например, ступенчатая функция нечётная (с точностью до смещения) и для восстановления такой целевой зависимости лучше подходят полиномы с нечётной старшей степенью.

Кстати, если использовать полиномиальную регрессию с L2-регуляризацией, то на рис. 16 смещение начинает вести себя «по классике»: убывать при увеличении степени полинома.

П.С. Дальше возникают естественные вопросы: как найти оптимальную сложность модели, как решать задачу сложными моделями и не переобучаться (используют же нейросети). Но это тема для отдельного поста… Просьба к читателям –  давать отклики в комментариях. Этот материал будет использован, в том числе, в рамках нового курса на ВМК МГУ, а также в книжке, которую автор уже и не надеется закончить… Поэтому любые замечания по формулировкам, корректности выводов и т.п. будут полезны. Удачи!

Смещение (bias) и разброс (variance): 26 комментариев

  1. Второе – недообучение (underfitting) – явление, когда ошибка на тестовой выборке достаточно большая

    Может быть на тренировочной, а как следствие уже и на тестовой?

      • вообще конечно спасибо за блог. Емко, просто и понятно и базовых и не очень вещах. Как правильно где-то отметили — пишут все кому не лень, а найти качественно и правильно поданную информацию бывает очень непросто

      • А может нет? Сначала обучаем на тестовой выборке, если ошибка большая-то значит не видит классификатор закономерностей в обучающей выборке, зачем его на тестовую отправлять?

  2. А новый курс на ВМК МГУ планируется выводить в онлайн, например в виде записанных лекций и материалов в свободном доступе?

  3. >то всё обучение сводилось бы к минимизации ошибки на тесте

    Тут наверно опечатка, должно быть «на обучающем множестве».

  4. Здравствуйте, Александр Геннадьевич!

    Пара педантских комментариев.
    1) Нормальность эпсилон нигде не использована: достаточно, что среднее и дисперсия существуют и первое равно нулю.
    2) Во второй формуле с ожиданиями не включена случайная составляющая алгоритма обучения, хотя в параграфе она упоминается. Не уверен насчёт студентов ВМК, но мне трудно даются ожидания по нескольким распределениям, поэтому мне понятнее что-то то такое: https://imgur.com/a/BQqdGie . Хотя в этом случае обозначения понагруженнее конечно.

    Спасибо!

    • Здравствуйте, Николай!

      1. Да, спасибо. Я даже как-то об этом не подумал, когда писал…

      2. Да, тут тонкий вопрос, как лучше написать… Я в первой формуле написал «голые» матожидания… когда читает новичок, то сразу видит логику формул и что всё честно. Но если потом спросить, как берутся матожидания, то он не ответит. С другой стороны, если начать с того, что объяснить, сколько тут разных случайностей… естественное желание — сразу перестать читать:) Как-то надо балансировать между «объяснить на пальцах» , с «минимум формул» и «объяснить всё-всё-всё».

  5. Здравствуйте, Александр! Спасибо большое за то, что выкладываете такой ценный материал по машинному обучению на русском языке.

    Мне не совсем понятно как выводится шум+разброс+смещение из математического ожидания квадрата отклонения ответа алгоритма от истинного значения. Если конкретно, то как получается E*y^2-(Ey)^2+(Ey)^2+Ea^2-(Ea)^2+(Ea)^2-2fEa, и как после этого получается Dy+Da+……

    • Здравствуйте! Смею предположить, что у Вас не очень хорошо с ТерВером. Поскольку, D (дисперсии) получаются просто по определению. Есть такая формула — дисперсия равна матожиданию квадрата минус квадрату матожидания. А в первой формуле я просто раскрыл скобки и добавил и вычел одинаковые слагаемые.

  6. Спасибо,материал отличается от остальных продуманностью и понятностью! С удовольствием бы посмотрел видеокурсы и лекции почитал, очень интересно и главное — понятно.

  7. Когда будет готова книга? Если она недописана, то можно ли ее прочитать в таком виде (обещаю написать отзыв, чтобы при желании можно было скорректировать книгу)?

  8. Здравствуйте, вопрос по поводу формул из статьи. Формула для E[(y-a)^2] после абзаца «Мы строим алгоритм». Переход от первой ко второй строке:

    Как мы превратили E[2ya] в 2fE[a]? Во-первых f — это функция, скорее всего имелось в виду 2E[f]E[a]? Но даже если так, E[2ya] = 2E[ya] = 2E[(f+e)a] = 2E[fa] + 2E[ea]. Здесь второе слагаемое — это матожидание произведения независимых величин, значит оно равно произведению матожиданий. Матожидание e равно 0, поэтому второе слагаемое сокращается. Получается 2E[fa]. Почему оно равно 2E[f]E[a]? Ведь f и a не являются независимыми.

Оставьте комментарий