green_fr (green_fr) wrote,
green_fr
green_fr

Categories:

Pour la science № 511 — как оценить сложность модели?

Одна из тем, больше всего мне понравившихся в Machine Learning — это проблема overfit.

Грубо говоря, кода мы учим систему классифицировать что-то, это сводится к интерполяции каких-то известных точек некой аналитической формулой, которая потом поможет нам предсказывать неизвестные точки. Предположим, что у нас на двухмерном графике (размер / плотность) есть точки, соответствующие разным опухолям, и про какие-то опухоли мы знаем, что они — раковые, а другие — безопасные. В таком случае мы можем попытаться «обучить систему», проведя кривую, разделяющую зону раковых опухолей от обычных. И потом этот «искусственный интеллект» сможет различать раковые опухоли от нераковых, исходя из местоположения новых опухолей в нашей плоскости (по параметрам размер и плотность и по расположению точки относительно кривой).

Проблема overfit состоит в том, что через любые точки можно провести некую кривую, например, полином огромной степени (грубо говоря, через любые n+1 точку можно провести полином n-й степени) — очевидно, что результат будет прекрасным на наших точках, но совершенно не будет годиться для будущих предсказаний, потому что на самом деле полином будет вести себя достаточно хаотично, лишь «случайно» попадая по всем точкам наших данных.

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

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

Фокус на самом деле достаточно простой, в статье его иллюстрируют другим примером. Предположим, мы хотим построить функцию, которая на целых числах 1, 2, 3, ... даёт бинарные значения a1, a2, a3, ... Функция с параметром p выглядит как D(n, p) = D(D(n — 1, p)), D(1, p) = 2p mod 1 (дробная часть после умножения на 2). На самом деле функция даже E(D(n, p)), где E возвращает первую цифру после запятой от полученного числа. Таким образом, D(1, p) — вторая цифра после запятой в бинарной записи p, D(2, p) — третья цифра и т.д. То есть, p = a1a2a3a4... — просто запись подряд всех нужных нам ответов. Секрет кроется в том, что мы допускаем параметр с бесконечной точностью. Тема, на которую автор писал уже колонку несколько месяцев назад, и я её пересказывал.

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

Удивительно при этом, что автор совсем не затрагивает тему чувствительности системы к её параметрам — у нас это самый что ни на есть стандартный тест (более того, это ещё и стандартный тест при любом контроле нас со стороны законодателя).

А ещё идея использования бесконечного количества информации в действительных числах напоминает наш с catpad разговор о том, как вытаскивать информацию из числа пи. В статье упоминают и эту тему, это называется гипотезой универсальности числа пи (гипотеза о том, что в числе пи есть любая конечная последовательность цифр), отмечая при этом преимущество описанной в статье функции (осторожно: я описал только простую иллюстрацию, в статье речь идёт о другой функции): в отличие от пи, универсальность этой функции доказана, к тому же известен работающий алгоритм построения параметра для любой последовательности. В то время как для пи, даже если мы когда-нибудь докажем его универсальность, алгоритма никакого нет, только перебор.
Tags: pour la science, математика
Subscribe

  • Stand-up Maths или Dobble наносит ответный удар

    Stand-up Maths (приятный канал: и смешно, и про математику) поднял недавно тему Dobble. Не так красиво, как рассказывал Лёша, но логика примерно…

  • C Jamy + King Crimson

    Случилось невероятное, я второй раз услышал по ТВ King Crimson! Если что, первый случай был 8 лет назад, задокументировано здесь :-) На этот раз…

  • 2020 год в городе

    Разобрал фотографии за 2020 год. В этом году их было немного. Тем не менее, на пару постов набралось: «дома» и «вне дома». Здесь — «вне дома».…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 5 comments