Машинне навчання · Блок 5 · Тема 21

Влучність і купчастість

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

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

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

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

01 / АнатоміяТри джерела помилки

Візьмімо задачу регресії. Ми припускаємо, що дані породжені якоюсь істинною залежністю f(x), до якої додається випадковий шум:

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

Ми бачимо не f, а лише скінченну вибірку зашумлених точок. За нею навчаємо модель . Питання: наскільки f̂(x) відрізнятиметься від справжнього y у новій точці? Відповідь розпадається на три доданки:

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

02 / ІнтуїціяМішень: влучність і купчастість

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

Чотири комбінації дають чотири типові діагнози. Покрути обидва повзунки й подивись на всі чотири кути:

Інтерактив 1 · Мішень

Кожна точка — модель, навчена на своїй вибірці. Центр — істина.

зміщення²
дисперсія
сума = сер. кв. відхилення
Що тут важливо: бірюзовий хрестик — середній постріл, тобто саме та «усереднена по вибірках» модель, про яку йдеться у визначенні зміщення. Відстань від нього до центра — зміщення. Розліт точок навколо нього — дисперсія. Сума їхніх квадратів і є середнє квадратичне відхилення пострілів від центра — те, що ми потім побачимо у формулі.
Пастка малої дисперсії. Зменш дисперсію до мінімуму, лишивши зміщення великим — постріли ляжуть тісною купкою далеко від центра. Модель буде ідеально відтворюваною і стабільно неправильною. У звітах така модель виглядає найкраще: метрики не стрибають від запуску до запуску. Стабільність не є синонімом правильності.

03 / ТочністьПо чому береться сподівання

Тепер формально — і тут ховається деталь, яку плутають найчастіше.

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

Зміщення й дисперсія визначаються так:

Зміщення(x) = 𝔼D[ f̂D(x) ] − f(x)
Дисперсія(x) = 𝔼D[ ( f̂D(x) − 𝔼D[ f̂D(x) ] )2 ]
Ось де плутають. Індекс D під знаком сподівання — це не формальність. Сподівання береться по навчальних вибірках, а не по точках даних. «Середня модель» 𝔼D[f̂D] — це не середнє значення прогнозів по тестових точках і не середня лінія по осі x. Це результат уявного експерименту: витягти тисячу різних навчальних вибірок, навчити тисячу моделей і в кожній точці x усереднити тисячу прогнозів.

Чому це важливо практично? Бо саме звідси випливає головне: дисперсію неможливо побачити на одному навчанні. Скільки не дивись на одну навчену модель, вона нічого не скаже про свою нестабільність. Дисперсія проявляється лише у порівнянні кількох запусків на різних даних. Саме тому працюють бутстреп, беггінг і крос-валідація — усі вони штучно створюють «різні вибірки», щоб побачити розкид.

04 / ВиведенняДекомпозиція крок за кроком

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

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

Справжня відповідь у точці x дорівнює y = f(x) + ε. Прогноз — D(x). Помилка:

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

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

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

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

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

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

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. Саме тому свідомо внесене зміщення часто окупається.

05 / ВіялоПобачити дисперсію на власні очі

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

Рухай повзунок складності й дивись на дві речі окремо:

Інтерактив 2 · Віяло з 40 паралельних світів

Кожна тонка лінія — модель, навчена на своїй вибірці з 40 точок. Товста — їхнє середнє.

зміщення²
дисперсія
шум σ²
разом
Крайні значення: постав 1 — усі 40 прямих лежать майже одна на одній (дисперсія майже нульова), але жодна навіть не намагається повторити форму сірого пунктиру. Постав 12 — середня крива лягає на істину чудово, зате віяло розкривається так, що окрема модель може дати будь-що. Це і є компроміс, і він видно тут буквально очима.

06 / БалансРозклад по складності

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

Інтерактив 3 · Три доданки на кожному рівні складності

Стовпчики складаються з шуму, зміщення² й дисперсії. Разом вони дають очікувану помилку.

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

07 / КриваНедо- і перенавчання

Тепер подивимось на те саме з боку практика, який жодних «сорока паралельних світів» не має, а має одну вибірку. Що він бачить?

Він бачить дві криві: помилку на навчальних даних і помилку на відкладених. І поводяться вони принципово по-різному.

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

Найважливіша асиметрія: навчальна помилка падає завжди. Складніша модель завжди краще запамʼятовує те, що вже бачила, — тому вона не несе жодної інформації про якість. Уся інформація в тестовій кривій, і саме вона має форму літери U.

Інтерактив 4 · U-подібна крива тестової помилки

Рожева — помилка на навчальних даних. Бірюзова — очікувана помилка на нових.

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

08 / ДаніЩо дає більше даних

Є один спосіб зменшити помилку, який не вимагає жодного компромісу. Він працює рівно на одну з двох складових — і саме тому такий цінний.

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

Дисперсія ≈ C / n      Зміщення2 = const(n)

Інтерактив 5 · Як звужується віяло від розміру вибірки

Складність фіксована. Змінюється лише кількість навчальних точок.

зміщення²
дисперсія
разом
дисперсія × n
Знизу — логарифмічний графік дисперсії від n. Пунктирна сіра пряма — еталонний нахил 1/n. Наша крива йде трохи крутіше: на малих вибірках до чесної дисперсії домішується чисельна нестійкість поліноміальної підгонки, яка зникає, щойно точок стає помітно більше за кількість параметрів.
Практичний висновок. Коли розрив між train і test великий — дані допоможуть. Коли обидві криві високі й притиснуті одна до одної — дані не допоможуть узагалі, і збирати їх означає витрачати гроші на те, що вже насичене. Перед тим як замовляти розмітку, побудуй криву навчання: залежність помилки від розміру вибірки. Якщо вона вийшла на плато — проблема в моделі, а не в даних.

09 / ОбмінРегуляризація як свідомий обмін

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

Можна. Саме це робить регуляризація. Додаючи до функції втрат штраф за величину ваг, ми забороняємо моделі використовувати всю свою гнучкість:

L = Σ ( y − ŷ )2 + λ · Σ βj2

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

Модель нижче навмисно завелика — поліном 11-го степеня на 40 точках. Проведи λ від краю до краю:

Інтерактив 6 · λ обмінює дисперсію на зміщення

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

зміщення²
дисперсія
разом
найкраще λ
Дивись на два стовпчики знизу: зі зростанням λ бірюзовий (дисперсія) падає монотонно, рожевий (зміщення²) монотонно росте. Сума має мінімум десь посередині — і цей мінімум нижчий, ніж у нерегуляризованої моделі. Ось що означає «обміняти дисперсію на зміщення з прибутком».

10 / РучкиРегулятори складності

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

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

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

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

11 / ВинятокПодвійний спуск

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

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

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

Що з цього брати. Подвійний спуск — не дозвіл забути про перенавчання. Він проявляється в дуже конкретних умовах: величезна кількість параметрів, специфічні методи оптимізації, багато даних. Для градієнтного бустингу на табличних даних, для дерев, для лінійних моделей — тобто для 90% реальних задач — класична U-подібна крива лишається чинною. Другої ями там просто немає.

12 / ПідсумокЩо з цим робити в понеділок

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

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

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

Далі в практиці. У practice.ipynb ти власноруч порахуєш bias² і variance через бутстреп, побудуєш криву навчання (learning_curve) і криву валідації (validation_curve), подивишся на компроміс у k-NN, дереві та випадковому лісі й перевіриш, чи вдасться відтворити подвійний спуск на невеликій мережі.

Далі в темі

Теорію прочитано. Тепер закріпи її на практиці.