Зубрилка і ледар

Модель може провалитись двома протилежними способами: не вивчити нічого або вивчити забагато. Спершу навчимось розрізняти їх за симптомами, а потім розберемо помилку на частини — і побачимо, звідки береться U-подібна крива.

Уяви двох студентів перед іспитом. Перший прочитав підручник по діагоналі й запамʼятав, що «десь там була формула». Другий вивчив напамʼять усі задачі з торішнього збірника разом із номерами сторінок і опечатками. На іспиті обидва провалились: перший не знає нічого, другий знає не те. І порада «вчи більше» допоможе рівно одному з них, а другому зашкодить.

Моделі хворіють точно так само. Спершу ми навчимося розрізняти дві хвороби за симптомами — бо саме тут найлегше зробити рух у неправильний бік і витратити тиждень на те, щоб зробити модель гіршою. А потім розберемо помилку на частини й побачимо, звідки ці симптоми беруться.

ПостановкаШістнадцять оголошень

Повертаємось на нашу дошку оголошень про вживані телефони. Задача цього разу не про шахрайство, а найпростіша з можливих: підказати продавцю ціну. Людина відкриває форму, вибирає рік випуску свого телефона — і дошка показує, скільки за такий зазвичай просять.

Складність у тому, що марка рідкісна. За весь час на дошці зʼявилось лише 16 оголошень із підтвердженою ціною продажу — по кілька на рік із 2010-го по 2025-й. Ознака одна, рік випуску; відповідь одна, ціна в гривнях. Дата виходу моделі відома з точністю до місяця, тому рік у нас дробовий: 2012.5 — це телефон, що вийшов улітку 2012-го.

рік випускуціна, грнрік випускуціна, грн
2010.402 1862017.986 958
2011.633 7432019.067 360
2012.522 2972019.948 741
2013.344 1082020.938 658
2014.543 6642021.5810 233
2015.464 4382022.6314 236
2015.794 9882023.2715 124
2017.274 5592024.4317 201

Далі — рівно те, що вже вміє лінійна регресія. Якщо додати до моделі не лише сам рік, а і його степені, вона починає описувати криві:

ціна ≈ β0 + β1·рік + β2·рік2 + … + βd·рікd

Модель лишається лінійною за коефіцієнтами β, тож навчання не змінюється ні на крок: підбираємо ті самі числа тим самим способом. Змінюється єдине — d, степінь многочлена. Це і є наша ручка складності: при d = 1 модель має право провести лише пряму, при d = 15 — вигинатись як завгодно. Крутячи цю одну ручку, ми пройдемо повз обидві катастрофи.

Щоб було чесно, помилку ми міряємо на двох вибірках окремо: на тих самих 16 оголошеннях, за якими вчились, і на 300 інших, що зʼявились на дошці потім і моделі не показувались. Це той самий поділ, який ми завели в темі Train / Validation / Test. Міра помилки — середня квадратична (RMSE) у гривнях: наскільки в середньому модель промахується повз реальну ціну.

СимптомиДві протилежні невдачі

Подивись на три моделі одразу. Дані ті самі, спосіб навчання той самий, відрізняється тільки степінь.

Одні дані, три степені, три різні провали

Рожеві точки — 16 навчальних оголошень. Сіра пунктирна крива — справжня залежність ціни від року, яку ми й шукаємо. Суцільна крива — те, що знайшла модель.

Ліворуч пряма фізично не здатна вигнутись — вона однаково промахується і на навчанні, і на нових оголошеннях. Праворуч крива проходить рівно через кожну точку: помилка на навчанні дорівнює 0 ₴, а на нових оголошеннях — 740 696 ₴. Посередині модель не влучає в жодну точку — і саме тому працює найкраще.

Ліва картинка — недонавчання (underfitting). Модель занадто проста для явища. Ціна телефона падає з віком не по прямій: свіжий флагман втрачає тисячі гривень за рік, а десятирічному апарату вже майже нема куди дешевшати. До того ж на сірій кривій видно невеликий горб коло 2019-го — тодішня серія вийшла вдалою й тримає ціну краще за сусідні роки. Пряма не вміє бути одночасно крутою праворуч, пологою ліворуч і горбатою посередині, тож вона робить середнє з усього й систематично бреше на обох кінцях. Скільки оголошень їй не давай — пряма лишиться прямою.

Права картинка — перенавчання (overfitting). Модель занадто гнучка для тієї кількості даних, що в неї є. Многочлен 15-го степеня має 16 коефіцієнтів, тобто рівно стільки ж вільних чисел, скільки в нас оголошень, — і цієї свободи вистачає, щоб пройти точно через усі 16 точок. Між точками ж крива нічим не обмежена й вигинається як завгодно.

Головне, що варто помітити просто зараз: обидві моделі дають погані прогнози, але з протилежних причин. Одну треба відпустити, другу — приборкати. Порада «візьми складнішу модель» рятує ліву й добиває праву.

ПасткаПастка ідеальної відповіді

Перенавчання підступне не тим, що модель погана. Воно підступне тим, що на навчальних даних модель ідеальна. Нуль гривень помилки. Якби ти дивився лише на це число, ти б доповів команді, що задачу розвʼязано на сто відсотків.

Щоб зрозуміти, що саме пішло не так, треба згадати, звідки взялись ці 16 цін. Ціна оголошення — це не чиста закономірність. Це закономірність плюс усе інше: подряпина на корпусі, продавець поспішає перед відʼїздом, інший продавець вирішив поторгуватись і поставив із запасом. Усе це «інше» ми називаємо шумом — воно існує, воно реальне, але воно ніяк не повʼязане з роком випуску й тому непередбачуване.

Що саме вивчила складна модель

Бурштинові відрізки — відхилення кожного оголошення від справжньої залежності. Це і є шум: ціна конкретного продавця, а не ціна конкретного року.

Читай так: проста крива (бірюзова) проходить крізь хмару точок і ігнорує бурштинові відрізки. Складна (рожева) дотягується до кінчика кожного з них — тобто повторює шум разом із закономірністю, бо відрізнити їх вона не може. Найдовший відрізок — оголошення 2022 року на 1 423 ₴ дорожче за типове. Ціною такої точності стають дикі стрибки між точками: між оголошеннями 2010.40 і 2011.63 крива провалюється глибоко в мінус — у точці 2010.67, куди дивиться рожева стрілка, вона стоїть на −610 412 ₴.

Ось конкретний приклад. Чотирнадцяте оголошення — телефон кінця 2022 року за 14 236 грн, тоді як справжня крива в цій точці дає 12 813 грн. Ці 1 423 грн зверху — не властивість 2022 року, а властивість одного продавця, який поставив ціну із запасом, щоб було куди торгуватись. Проста модель цього оголошення не помітила й пройшла повз нього. Складна дотяглась і запамʼятала: «телефони кінця 2022-го коштують 14 236 грн». Наступного тижня інший продавець виставить телефон того самого року за 12 900 грн, і модель буде впевнено помилятись.

Це та сама межа, з якої почався курс. У темі Що таке машинне навчання ми домовились, що навчання — це узагальнення, а не запамʼятовування прикладів. Перенавчена модель переступає цю межу: вона запамʼятала таблицю замість того, щоб вивести з неї правило. До речі, найчистіший приклад такої моделі ти вже бачив — це kNN при k = 1, у якого точність на навчальних даних завжди дорівнює одиниці просто тому, що найближчий сусід кожного навчального обʼєкта — він сам.

«Перенавчена» не означає «дурна». Модель зробила рівно те, що ми в неї попросили: мінімізувала помилку на навчальних даних. Вона впоралась із цим блискуче. Проблема не в моделі й не в алгоритмі — проблема в тому, що ми поставили не те завдання. Нам потрібна не мінімальна помилка на вчорашніх оголошеннях, а мінімальна помилка на завтрашніх, а це різні речі.

ДіагнозДві помилки замість однієї

Звідси випливає єдиний надійний спосіб помітити перенавчання: дивитись не на одне число, а на два поруч. Помилка на навчальних оголошеннях і помилка на відкладених. Ось вони для чотирьох степенів — RMSE у гривнях, ліва колонка на 16 навчальних оголошеннях, права на 300 відкладених:

степіньпомилка, навчанняпомилка, тестщо це
11 654 грн1 573 грнобидві високі — недонавчання
3695 грн874 грнобидві низькі — те, що треба
9458 грн1 529 грннавчальна падає, тестова росте
150 грн740 696 грнідеально на вчорашньому, катастрофа на завтрашньому

Уся суть теми — у другому й третьому рядках. Від степеня 3 до степеня 9 навчальна помилка чесно покращилась із 695 до 458 грн. Якби ти дивився тільки на неї, ти б визнав нову модель кращою. Насправді на реальних оголошеннях вона стала гіршою майже вдвічі: 1 529 замість 874 грн.

Придивись до першого рядка окремо: при степені 1 тестова помилка навіть трохи менша за навчальну. Ніякого розриву немає — і це діагностична ознака. Модель не запамʼятовує нічого зайвого просто тому, що їй нема чим запамʼятовувати; вона однаково безпорадна скрізь.

А тепер сформулюємо те, що ми шукаємо, одним реченням. Момент, коли навчальна помилка ще падає, а тестова вже почала рости, — це і є перехід у перенавчання. До цієї точки додаткова гнучкість витрачається на опис закономірності. Після неї — на опис шуму.

КриваПовзунок складності

Знайди цей момент сам. Проведи повзунок від 1 до 15 і дивись на дві речі одночасно: на криву ліворуч і на дві помилки праворуч.

Степінь многочлена від 1 до 15

Ліворуч — модель на тих самих 16 оголошеннях. Праворуч — обидві помилки для кожного степеня; вертикальна риска показує, де ти зараз.

помилка на навчанні—
помилка на тесті—
найкращий степінь—
його помилка—
Шкала помилки праворуч логарифмічна — інакше степінь 15 із його 740 696 ₴ розчавив би всю решту в лінію біля нуля. Нульова навчальна помилка при степені 15 намальована на самому дні шкали. Прожени обидва краї: при степені 1 криві злипаються високо, при степені 15 вони розлітаються від дна шкали до її верху.

Ти щойно побачив головну картинку машинного навчання. Її варто розібрати по кістках, бо обидві криві мають форму не випадково.

Навчальна помилка падає завжди. Це не емпіричне спостереження, а майже теорема. Многочлен 4-го степеня вміє все, що вміє многочлен 3-го (достатньо взяти нульовий старший коефіцієнт), і ще трохи. Тож найкраще, що він може зробити на навчальних даних, ніяк не гірше. Звідси головний висновок: навчальна помилка не несе інформації про якість моделі. Вона міряє памʼять, а не розуміння.

Тестова помилка спершу падає. Поки моделі бракує гнучкості, кожен доданий степінь витрачається на щось справжнє: на вигин, який реально є в даних. Прогнози на нових оголошеннях покращуються.

Потім вона розвертається вгору. Коли форму вже описано, наступний степінь описувати нічого. Але оптимізатор не вміє сказати «мені досить»: він зобовʼязаний зменшувати помилку на навчанні, а єдине, що там лишилось зменшувати, — це шум. Модель починає підганятись під випадкові відхилення 16 конкретних продавців. На нових оголошеннях відхилення інші, і вивчене стає активною завадою.

Разом ці дві криві дають характерну картину: навчальна монотонно вниз, тестова — літерою U. Дно цієї літери й є правильна складність. У нашому випадку дно — на степені 3 із помилкою 874 грн.

Помилку нижче 750 грн тут не отримає ніхто й ніколи, хоч би якою розумною була модель. Стільки становить розкид самих цін навколо закономірності — той самий шум. Ідеальна модель, яка точно знає справжню криву, все одно промахуватиметься на цю величину, бо продавець із подряпаним корпусом не питав дозволу в нашого многочлена. Наше дно у 874 грн — це майже впритул до фізичної межі задачі.

ДаніДруга вісь: скільки даних

Досі ми крутили одну ручку — складність. Але в перенавчання є друга причина, і вона навіть важливіша: складність моделі завжди відносна до обсягу даних. Многочлен 9-го степеня — це не «складна модель». Це складна модель на 16 оголошеннях і цілком помірна модель на пʼятистах.

Зафіксуй степінь на девʼяти й покрути другу ручку.

Та сама модель на 10 і на 500 оголошеннях

Степінь фіксовано на 9. Змінюється лише кількість навчальних оголошень. Праворуч — обидві помилки залежно від обсягу вибірки.

помилка на навчанні—
помилка на тесті—
розрив—
межа задачі750 ₴
Ліва межа: 10 оголошень і 10 коефіцієнтів — крива знову проходить точно через усі точки, навчальна помилка нуль, тестова 26 005 ₴. Права межа: 500 оголошень — навчальна 753 ₴, тестова 772 ₴, розрив стиснувся до 19 ₴. Модель не змінилась ані на коефіцієнт. Змінилось те, скільки їй довелось вигадувати.

Механізм простий і варто його промовити. Щоб крива пройшла точно через 10 точок, досить 10 коефіцієнтів. Щоб вона пройшла точно через 500 точок, коефіцієнтів треба 500 — а їх у неї лише 10. Дані перестають поміщатись у модель, і їй уже нічого не лишається, крім як описувати те спільне, що є в усіх оголошеннях, тобто закономірність. Шум окремих продавців у великій вибірці взаємно гаситься: хтось поставив дорожче, хтось дешевше, у сумі — нуль.

Тому дані — найдешевший засіб від перенавчання, коли вони є. Він не вимагає ані вибору моделі, ані підбору гіперпараметрів, ані розуміння задачі: просто зачекай, поки на дошці накопичиться більше оголошень. І це ж пояснює, чому засіб доступний не завжди: дані бувають дорогі (розмітити 500 медичних знімків має лікар), рідкісні (наша марка дає 16 оголошень за 15 років) і застарілі (оголошення пʼятирічної давності описують ринок, якого вже немає).

Є й третя вісь, про яку варто знати одразу: рівень шуму. Уяви два ринки. На першому ціни майже строго визначені роком випуску, розкид навколо закономірності — сотня гривень. На другому продавці ставлять ціну як заманеться. На першому ринку тонкі вигини, які модель бачить у даних, справжні — їх варто повторювати, і високий степінь окупається. На другому ті самі вигини — це переважно випадковість конкретних продавців, і повторювати їх означає вчити нісенітницю. Звідси правило, яке рятує чимало часу: питання «яка модель складна?» не має відповіді без даних. Складна — відносно обсягу вибірки й відносно рівня шуму.

НедонавчанняПротилежна хвороба

Ми довго говорили про надлишок гнучкості. Тепер про її нестачу — бо симптоми там геть інші, і сплутати їх дорого.

При степені 1 наша модель має помилку 1 654 грн на навчанні й 1 573 грн на тесті. Дивись на цю пару уважно: обидва числа високі, і розриву між ними немає. Модель не вивчила зайвого — вона взагалі майже нічого не вивчила. Пряма фізично не може бути крутою праворуч і пологою ліворуч, тож вона стабільно, передбачувано й однаково помиляється скрізь.

І тут ключова відмінність у лікуванні. Перенавченій моделі ми віднімаємо свободу: знижуємо степінь, додаємо дані, вводимо штраф за великі коефіцієнти. Недонавченій моделі все це протипоказано — вона й так задихається. Їй треба дати більше:

Зверни увагу на найважчий випадок: додавання даних недонавченій моделі не допомагає взагалі. Пряма, навчена на мільйоні оголошень, — це та сама пряма, тільки проведена трохи впевненіше. Тому перед тим, як замовляти дані, діагноз треба ставити чесно: за розривом, а не за відчуттям.

ДіагностикаЩо бачу — що роблю

Зберемо все в одну таблицю. Дві помилки поруч дають чотири можливі картини: три з них — справжні діагнози, четверта — привід перевірити самі вибірки.

помилка на навчанніпомилка на тестідіагнозщо робити
високависока, розриву майже немаєнедонавчанняускладнити модель, додати ознак, послабити штраф, навчати довше
низьканизька, розрив невеликийусе гараздне чіпати; далі покращувати вже за рахунок ознак
дуже низькапомітно вища, великий розривперенавчанняспростити модель, додати даних, увести регуляризацію
високапомітно нижчапідозрілошукати помилку: витік даних, різні вибірки, зсув у розподілі

Останній рядок — не жарт. Якщо модель раптом працює на нових даних краще, ніж на тих, за якими вчилась, це майже завжди означає, що вибірки різні: у навчальну потрапили якісь важчі випадки або у тестову — легші. У нашому степені 1 тестова помилка теж трохи нижча за навчальну, і причина саме така: 16 оголошень — надто мало, щоб їхня складність збіглася з середньою.

Порядок дій, який варто виконувати механічно, не роздумуючи:

  1. Заміряй обидві помилки. Одна цифра діагнозу не дає ніколи.
  2. Порівняй їх між собою — це дасть напрямок руху.
  3. Порівняй навчальну з тим рівнем, який тебе влаштовує. Якщо вже вона погана, ускладнюй; про перенавчання говорити ще рано.
  4. Зроби один крок у знайденому напрямку й переміряй. Не два кроки одразу — інакше не дізнаєшся, який із них подіяв.

ЧесністьТест, у який підглянули

І тепер незручне зізнання про все, що ми робили дотепер.

Ми перебрали всі степені від 1 до 15, подивились на тестову помилку кожного й оголосили переможцем степінь 3. Але тестова вибірка існує для того, щоб оцінити готову модель, а не щоб обрати її. Щойно ми обрали степінь за тестом, число 874 грн перестало бути чесною оцінкою: ми взяли мінімум із пʼятнадцяти спроб, а мінімум із багатьох спроб систематично оптимістичний. Частина цих 874 грн — це те, що степінь 3 випадково вгадав саме цю тестову вибірку.

Правило. Дані, за якими ти щось обираєш, більше не годяться, щоб оцінювати обране. Складність моделі підбирають на валідаційній вибірці — третьому конверті з теми Train / Validation / Test, — а тестової торкаються один раз наприкінці, щоб дізнатись фінальне число. Коли даних мало (а в нас їх 16), окремий валідаційний конверт викроїти нема з чого, і тоді роль валідації бере на себе крос-валідація: вибірка по черзі ділиться на частини, і кожна встигає побути і навчальною, і перевірочною.

Чому ж ми все одно показали тестову криву? Бо ми тут вивчаємо поведінку явища, а не будуємо продукт. Щоб побачити U-подібну форму, потрібна саме та крива, якої на практиці не існує. Це нормальний навчальний прийом — за умови, що ти памʼятаєш: у реальній задачі ця крива будується на валідації, а тестовий конверт лежить запечатаний.

АнатоміяЗвідки береться літера U

Досі ми описували те, що бачили: навчальна помилка вниз, тестова літерою U, розрив як симптом. Жодного разу ми не сказали, чому тестова крива має саме таку форму. Що росте праворуч і що падає ліворуч?

Відповідь у тому, що помилка складається з трьох частин, які поводяться по-різному. Розділити її на ці частини можна точно, і зараз ми це зробимо. Але спершу — сама ідея, без жодної формули.

Уяви, що ми повторюємо всю нашу роботу багато разів. Дошка оголошень щоразу інша: знову 16 телефонів тих самих років, але виставили їх інші люди — з іншими подряпинами й іншим настроєм. Кожна така дошка дає свою навчену модель. Виходить не одна модель, а ціла купа моделей — і ось у цій купі й ховається відповідь.

Головне про ці два слова. Зміщення й дисперсія — властивості не однієї навченої моделі, а процедури навчання. Питання не «наскільки ця модель помиляється», а «що станеться, якщо перезапустити все навчання на іншій дошці з того самого джерела». Тому побачити їх на одному прогоні неможливо — потрібно уявити багато паралельних дощок.

Найкоротший спосіб відчути різницю — уявити стрільбу по мішені. Кожен постріл — це модель, навчена на своїй дошці. Центр мішені — істина. Тоді влучність — де опинився центр купи пострілів (змістився вбік — це зміщення), а купчастість — наскільки постріли тримаються один одного (розкидані — це дисперсія). Чотири комбінації дають чотири типові діагнози:

Мішень: влучність і купчастість

Кожна точка — модель, навчена на своїй дошці оголошень. Центр мішені — справжня залежність. Бірюзовий хрестик — середня модель.

Правий верхній кут — недонавчання: постріли лягли тісною купкою далеко від центра. Модель ідеально відтворювана і стабільно неправильна — у звітах така виглядає найкраще, бо метрики не стрибають від запуску до запуску. Лівий нижній — перенавчання: у середньому модель права, але окремий запуск дає що завгодно. Стабільність не є синонімом правильності.

ВиведенняРозклад крок за кроком

Тепер те саме формально. Знадобиться один новий символ — 𝔼, велика латинська «E». Це «середнє по всіх можливих випадках»: запис 𝔼D[…] читається «усередни те, що в дужках, по всіх можливих навчальних дошках D». Нижній індекс каже, по чому саме усереднюємо, і саме тут найчастіше плутають.

Позначимо через D навчальну вибірку, а через f̂D — модель, яку ми отримали, навчившись на ній. Справжню залежність назвемо f, а спостережувану ціну — y:

y = f(x) + ε, 𝔼[ε] = 0, Var(ε) = σ2

Тут ε (грецька «епсилон») — випадкове відхилення однієї ціни від типової, той самий шум. Запис 𝔼[ε] = 0 каже, що в середньому це відхилення нульове: завищень і занижень порівну. Var(·) — дисперсія, тобто середній квадрат відхилення від середнього; це та сама величина, корінь із якої ми звемо стандартним відхиленням. Отже σ2 — дисперсія шуму, у нас це 750 грн у квадраті. Ключова ідея: D — випадкова величина. Ми витягли одну дошку, могли б витягти іншу. Отже, і навчена модель f̂D — теж випадкова величина, тільки значеннями її є цілі функції. Тоді:

Зміщення(x) = 𝔼D[ f̂D(x) ] − f(x)
Дисперсія(x) = 𝔼D[ ( f̂D(x) − 𝔼D[ f̂D(x) ] )2 ]

«Середня модель» 𝔼D[f̂D] — це не середнє значення прогнозів по тестових точках і не середня лінія по осі років. Це результат уявного експерименту: витягти тисячу різних дощок, навчити тисячу моделей і в кожному році x усереднити тисячу прогнозів.

Тепер зафіксуємо один рік x і порахуємо очікуваний квадрат помилки.

крок 1 · що саме ми міряємо

Справжня ціна дорівнює y = f(x) + ε, прогноз — f̂D(x). Квадрат їхньої різниці, усереднений і по дошках, і по шуму:

Err(x) = 𝔼[ ( f(x) + ε − f̂D(x) )2 ]
крок 2 · відокремлюємо шум

Шум ε не залежить від того, які оголошення потрапили в навчання, і в середньому дорівнює нулю. Тому при розкритті квадрата подвійний добуток зникає, і шум відходить в окремий доданок:

Err(x) = σ2 + 𝔼[ ( f(x) − f̂D(x) )2 ]
крок 3 · додаємо і віднімаємо середню модель

Позначимо f̄(x) — ту саму «середню модель». Вставимо її всередину дужок, нічого не змінивши: додали й одразу відняли те саме число.

f(x) − f̂D(x) = ( f(x) − f̄(x) ) + ( f̄(x) − f̂D(x) )
крок 4 · розкриваємо квадрат

Квадрат суми дає три доданки. Перший не залежить від дошки, тому усереднення його не змінює. Третій, подвійний добуток, обертається на нуль: у ньому є множник 𝔼D[f̄(x) − f̂D(x)], а це нуль за самим означенням середнього.

Err(x) = σ2 + ( f̄(x) − f(x) )2 + 𝔼[ ( f̂D(x) − f̄(x) )2 ]
крок 5 · читаємо результат

Три доданки — це рівно шум, квадрат зміщення й дисперсія:

Err(x) = σ2 + Зміщення2(x) + Дисперсія(x)

Три речі, які варто витягти з цього виведення. По-перше, розклад точний, а не наближений: це тотожність, доданків рівно три, вони не перекриваються й усі невідʼємні. По-друге, він працює для квадратичної помилки; для інших функцій втрат — скажімо, для частки помилкових класифікацій — аналог існує, але доданки там уже можуть взаємодіяти. Інтуїція «влучність проти купчастості» переноситься, точна формула — ні. По-третє, зменшувати треба суму: модель зі зміщенням 0 і дисперсією 10 гірша за модель зі зміщенням 1 і дисперсією 1. Саме тому свідомо внесене зміщення часто окупається.

ВіялоСорок паралельних дощок

Тепер побудуємо той уявний експеримент по-справжньому. Візьмемо 40 різних дощок оголошень — усі з тієї самої закономірності, усі по 16 оголошень, але з різними випадковими відхиленнями цін. На кожній навчимо свою модель обраного степеня. Вийде 40 різних кривих — «віяло».

Віяло з 40 паралельних дощок

Кожна тонка бірюзова лінія — модель, навчена на своїй дошці з 16 оголошень. Товста рожева — їхнє середнє. Сірий пунктир — справжня залежність.

зміщення—
дисперсія—
шум750 ₴
разом—
Усі три величини показані в гривнях, щоб їх можна було порівняти з помилками з попередніх інтерактивів; складаються вони в квадратах, тому «разом» — це корінь із суми квадратів. Смужка внизу показує саме ці квадрати: яку частку повної помилки займає кожен доданок.

Прожени обидва краї. При степені 1 усі 40 прямих лежать майже одна на одній — дисперсія лише 173 грн, — але жодна навіть не намагається повторити форму сірого пунктиру: зміщення 1 221 грн, тобто майже вся помилка. При степені 12 навпаки: зміщення падає до 155 грн, а дисперсія розганяється до 1 205 грн і переростає навіть незвідний шум. Середня крива вже гарна — а окремій моделі, навченій на твоїй єдиній дошці, вірити не можна.

І ось відповідь на питання, з якого почався розділ 10. Зміщення зі зростанням складності падає: гнучкішій моделі є чим описати горб 2019 року. Дисперсія росте: та сама гнучкість дає їй свободу піти слідом за випадковими відхиленнями. Шум стоїть на місці завжди. Сума трьох доданків і є та U-подібна крива, яку ми бачили в інтерактиві 1 — тільки тепер видно, з чого вона зроблена. Мінімум суми майже ніколи не там, де мінімум кожного доданка окремо: тут він на степені 5, хоча найменше зміщення — аж на степені 11, а найменша дисперсія — на степені 1.

Зверни увагу ще на одну дрібницю. Інтерактив 1 називав найкращим степінь 3, а сорок дощок кажуть — степінь 5. Суперечності немає: там ми міряли одну конкретну дошку, тут — середнє по сорока. Різниця між цими двома відповідями і є те саме «підглядання», про яке йшлося в розділі 09: степінь 3 виграв на нашій єдиній дошці почасти випадково.

Тут же стає зрозуміло, чому дані такі цінні. Більше оголошень — менше можливостей для окремого відхилення зрушити криву, тому дисперсія падає приблизно як 1/n, де n — кількість навчальних оголошень. А зміщення від кількості даних не залежить взагалі: пряма, навчена на мільйоні оголошень, лишається прямою. Ось чому дані лікують рівно одну з двох хвороб — і чому перед тим, як замовляти розмітку, будують криву навчання: залежність помилки від обсягу вибірки. Якщо вона вийшла на плато — проблема в моделі, а не в даних.

РучкиКуди крутити в кожній моделі

У кожної моделі є свої важелі, які рухають її вздовж тієї самої шкали. Коли діагноз поставлено, залишається знайти правильну ручку.

Одне позначення в таблиці зустрічається вперше: λ («лямбда») — сила штрафу за великі коефіцієнти в моделях Ridge і Lasso. Що більша λ, то дорожче моделі обходиться кожен великий коефіцієнт, то обережніше вона поводиться — і то простішою фактично стає. Це предмет теми 19; тут від неї потрібне лише те, що це ручка того самого компромісу.

модельбільше дисперсіїбільше зміщення
многочленвищий степіньнижчий степінь
Ridge / Lassoменше λбільше λ
kNNменше k (аж до k = 1)більше k
деревобільша глибина, менший листобрізання, min_samples_leaf
випадковий лісглибші деревабільше дерев*, менше ознак на розбиття
бустингбільше ітерацій, глибші дереваменша швидкість навчання, рання зупинка
нейромережабільше шарів і нейронівdropout, спад ваг, рання зупинка

* Зірочка біля випадкового лісу не випадкова. Збільшення кількості дерев — рідкісний випадок, коли дисперсія падає майже без зростання зміщення. Причина в тому, що усереднення багатьох майже незалежних моделей знижує розкид, не зачіпаючи середню модель. На цьому й тримається весь беггінг: беремо навмисно перенавчені глибокі дерева (мале зміщення, величезна дисперсія) і гасимо дисперсію усередненням. Бустинг рухається з протилежного боку: бере навмисно слабкі, зміщені пеньки й послідовно зменшує зміщення.

Два родоводи ансамблів. Беггінг і випадковий ліс атакують дисперсію. Бустинг атакує зміщення. Тому в лісу головний ризик — недостатня глибина дерев, а в бустингу — зайва кількість ітерацій. Знаючи, з якою складовою бореться алгоритм, ти одразу знаєш, у який бік крутити його гіперпараметри.

Окрема ручка, якої в таблиці немає, бо вона працює майже скрізь: лишити модель гнучкою, але заборонити її коефіцієнтам розбігатись — додати штраф за їхню величину прямо у функцію втрат. Модель формально лишається такою самою складною, а фактично поводиться як значно простіша: дисперсія падає, зміщення трохи росте, і сума виграє. Це регуляризація, і їй присвячена окрема тема далі в курсі.

МежаЧому класична крива ламається у великих мережах

Усе сказане вище описує 90 % задач, які ти зустрінеш: лінійні моделі, дерева, бустинг на таблицях. Але є режим, у якому U-подібна крива поводиться інакше, і про нього варто знати, щоб не зробити хибного висновку.

Позначимо кількість навчальних прикладів через N, а кількість вільних параметрів моделі — через p. Наш многочлен 15-го степеня на 16 оголошеннях стояв рівно в точці p = N: коефіцієнтів стільки ж, скільки прикладів, і крива проходить точно через кожну точку. Ця точка називається порогом інтерполяції (interpolation threshold), і саме там ми бачили катастрофу. Класична інтуїція каже: далі буде тільки гірше.

Виявляється, ні. Якщо продовжити нарощувати p далеко за поріг, тестова помилка спершу справді злітає до піку — а потім знову починає падати, і друга спадна гілка може опуститись нижче за будь-яку класичну модель. Крива має не одну яму, а дві. Явище називають подвійним спуском (double descent).

Розширена крива: другий спуск за порогом

Вісь параметрів продовжено далеко праворуч від точки, де модель уже проходить точно через усі навчальні приклади.

Ліворуч від пунктиру — знайома картина з інтерактиву 1. На самому пунктирі (параметрів стільки ж, скільки прикладів) — вузький пік. Праворуч — режим, у якому працюють сучасні мережі: помилка спокійно опускається нижче класичного мінімуму.

Пояснення тримається на одній думці. Поки p < N, рівнянь більше, ніж невідомих, і модель шукає компроміс. Рівно на порозі рівнянь і невідомих порівну: спосіб пройти крізь усі точки рівно один, і ніхто не гарантував, що він хороший — зазвичай він вимагає велетенських коефіцієнтів, які гасять один одного в самих точках і розлітаються між ними. Це не перенавчання у звичному сенсі, а жорсткість: вибору немає. А коли p > N, розвʼязків із нульовою помилкою на навчанні стає нескінченно багато, і дані більше не визначають модель. Вибір робить алгоритм навчання — і градієнтний спуск систематично обирає найгладший варіант, той, у якого найменша норма ваг. Це називають неявною регуляризацією: штрафу ніхто не дописував, він виникає із самого способу навчання. Для найпростішої кусково-лінійної моделі це навіть доводиться: у границі багатьох параметрів розвʼязок мінімальної норми — це натуральний кубічний сплайн, тобто буквально найменш вигнута крива крізь задані точки.

Чи скасовує це розклад із розділу 11? Ні. Дисперсію в цьому режимі стримує не малий розмір моделі, а неявна регуляризація — доданки на місці, змінився лише механізм, який тисне на другий із них. Що подвійний спуск справді скасовує, так це звичку міряти схильність до перенавчання кількістю параметрів. Практичних висновків із цього два: обходь околиці порогу (найризикованіша конфігурація — та, де параметрів приблизно стільки ж, скільки прикладів: краще суттєво менше або суттєво більше) і не роби висновків із двох точок — якщо збільшення моделі погіршило метрику, це може бути підйом до піку, а не межа корисності.

ПідсумокЩо варто винести

Одна ручка — степінь многочлена — провела нас повз дві протилежні катастрофи. Ліворуч модель занадто проста, щоб побачити закономірність. Праворуч — занадто гнучка, щоб її не переплутати з шумом. Посередині вузька смуга, де прогнози справді працюють. А розклад помилки на три доданки пояснив, чому ця смуга взагалі існує.

ідеясутьчому важливо
дві невдачінадто просто або надто гнучколікуються протилежним
перенавчаннявивчено шум разом із закономірністюна навчанні модель ідеальна
діагноздві помилки поруч, не однарозрив між ними і є симптом
криванавчальна вниз, тестова літерою Uдно U — правильна складність
розкладшум + зміщення² + дисперсіятотожність, а не оцінка згори
зміщенняпромах середньої моделіпадає зі складністю
дисперсіярозліт моделей від дошки до дошкиросте зі складністю
данібʼють лише по дисперсії, як 1/nнедонавчання ними не лікується
шумбільше шуму — простіша модель«складна модель» без даних не визначена
чесністьвибір по тесту псує тестскладність підбирають на валідації

І остання думка. Компроміс зміщення й дисперсії — це не технічна деталь окремого алгоритму. Це властивість самого навчання за скінченною вибіркою: щоб щось узагальнити, доводиться щось ігнорувати. Модель, яка не ігнорує нічого, запамʼятовує шум. Модель, яка ігнорує забагато, не бачить закономірності. Уся інженерна робота в машинному навчанні — це пошук правильної міри ігнорування.

І одне питання лишилось без відповіді. Ми весь час користувались відкладеною вибіркою — а в розділі 09 самі визнали, що обирати по ній не можна. Окремий валідаційний конверт із 16 оголошень теж не викроїш. Як тоді чесно порівнювати степені, коли даних мало? Відповідь — у наступній темі: та сама вибірка по черзі побуде і навчальною, і перевірочною. Це крос-валідація.