Skip to content

Лекція 03 · Узагальнення, перенавчання та регуляризація ​

У лекції 02 ми навчилися підганяти модель під наявні дані. Тепер з'ясуємо головне: чи працюватиме вона на даних, яких ніколи не бачила, — і що робити, коли модель запам'ятовує навчальну вибірку замість того, щоб вивчати закономірність.

Зміст лекції ​

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

  1. Недонавчання і перенавчання. Що відбувається, коли клас моделей заслабкий або занадто багатий, і чому нульова помилка на навчальних даних нічого не гарантує.
  2. Чесне вимірювання якості. Справжня та емпірична помилка, поділ на навчальну, валідаційну й тестову вибірки, крос-валідація.
  3. Розклад помилки на зміщення й дисперсію. Звідки береться U-подібна крива складності та які три доданки утворюють помилку.
  4. Регуляризація ridge і lasso. Штраф за складність, геометрія L2 і L1, розрідженість як автоматичний відбір ознак, вибір гіперпараметра λ.

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

Чого ви навчитеся ​

Після цієї лекції ви зможете:

  • відрізнити недонавчання від перенавчання за поведінкою помилки на навчальній і на новій вибірках;
  • пояснити, чому тренувальна помилка систематично занижує справжню помилку моделі;
  • розділити дані на навчальну, валідаційну й тестову частини та сказати, за що відповідає кожна;
  • провести крос-валідацію за M блоками й оцінити не лише помилку, а й її розкид;
  • записати розклад помилки на шум, квадрат зміщення та дисперсію і пояснити зміст кожного доданка;
  • застосувати закриту форму ridge-регресії та пояснити, чому вона рятує погано обумовлену задачу;
  • пояснити геометрично, чому L1-штраф занулює частину ваг, а L2 лише стискає їх;
  • підібрати λ крос-валідацією й уникнути витоку даних під час підбору.

Модель, що вивчила навчальні дані напам'ять ​

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

Тепер покажемо обом моделям ще 400 районів із того самого діапазону доходів — картина перевертається. У прямої RMSE 0,78, у полінома 2,56. Між навчальними точками поліном вигинається як завгодно, а в правій частині взагалі передбачає від'ємну вартість житла.

Нульова помилка на навчальних даних — не досягнення, а попередження.

polynomial memorising eight california districts

Дані лекції: ціни на житло в Каліфорнії ​

Набір даних цієї лекції — той самий, що в лекції 02: California Housing, 20 640 груп кварталів за даними перепису США 1990 року; тут ми називаємо їх районами, у лекції 02 — округами, це одна й та сама одиниця спостереження. Для кожного району відомі вісім числових ознак: медіанний дохід мешканців, середній вік забудови, середня кількість кімнат і спалень на житло, населення, середня кількість мешканців на житло, широта й довгота. Передбачаємо медіанну вартість житла в районі, виміряну в сотнях тисяч доларів.

Дві особливості даних видно одразу. Вартість обрізана згори на позначці 500 тис. $ — таких районів 4,8 %, і це штучна стеля збору даних, а не властивість ринку. Медіанний дохід має довгий правий хвіст. Найсильніший одиничний предиктор — саме дохід: кореляція з ціною 0,69.

california housing target and feature distributions

Джерело даних: scikit-learn · California Housing

Розширення ознак поліномом ​

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

φ(xn)=[1, xn, xn2, …, xnd],y^n=φ(xn)⊤w
ПозначенняЗначення
xnвихідна ознака n-го спостереження
dмаксимальний степінь — гіперпараметр складності моделі
w∈Rd+1ваги, які підбирає метод найменших квадратів

Модель лишається лінійною за вагами, тому працює той самий розв'язок, що й у лекції 02: розширення ознак — це препроцесинг. У джерелах степінь позначають то M, то d; у нас усюди d.

Вивід код запущено, вивід не редагувався
text
[[ 1.     1.5    2.25   3.375]
 [ 1.     2.     4.     8.   ]
 [ 1.     3.2   10.24  32.768]]

На що дивитися: кожен рядок — одна точка x, розкладена на степені 1, x, x², x³: з однієї ознаки вийшло чотири стовпці.

Недонавчання і перенавчання ​

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

"Models can be too limited … we cannot find a function that is a good fit for the data in our model. We then say that we underfit. … We have such a rich model family that we do not just fit the underlying function but we in fact fit the noise in the data as well." — EPFL CS-433, лекція 03b

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

underfitting and overfitting with polynomials of three degrees

Джерело: scikit-learn · Underfitting vs. Overfitting

Клас моделей і справжня функція ​

Обираючи степінь полінома, ми насправді обираємо цілий клас моделей (model class) — множину функцій, серед яких алгоритм шукатиме найкращу. Справжня залежність f⋆ у цю множину, як правило, не входить узагалі.

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

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

nested and non nested model classes around the true function

Джерело: Dive into Deep Learning · Residual Networks

Помилка на навчальних і на нових даних ​

Повернімося до прикладу, де справжня залежність відома: g(x)=sin⁡(2πx) плюс гаусів шум зі стандартним відхиленням 0,25. Навчаємо поліноми степенів від 0 до 15 на 30 точках і міряємо помилку двічі — на тих самих 30 точках і на незалежній вибірці з 2000 точок.

Помилка на навчальних даних спадає монотонно: що більше ступенів свободи, то точніше модель проходить крізь точки. Помилка на нових даних поводиться інакше — спадає до степеня 3, де досягає 0,263, тримається на плато до степеня 9, а далі стрімко зростає: на степені 15 вона вже 44,5.

Рівень шуму 0,25 — це підлога, нижче якої не опуститься жодна модель. Найкращий поліном підходить до неї впритул.

train and test rmse versus polynomial degree

Більше даних приборкує складну модель ​

Степінь полінома — не єдиний важіль. Залишмо степінь 9 незмінним і збільшмо вибірку.

На 15 точках модель дев'ятого степеня має майже стільки ж параметрів, скільки спостережень, і вигинається, щоб пройти поруч із кожним: RMSE на незалежній вибірці 0,39. На 100 точках та сама модель уже не може догодити всім одразу, змушена шукати компроміс — і виходить на форму справжнього синуса: RMSE 0,25, тобто рівно рівень шуму.

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

same degree nine polynomial with fifteen and hundred points

Справжня та емпірична помилка ​

Дані S={(xn,yn)}n=1N незалежно взято з невідомого розподілу D. Насправді нас цікавить справжня помилка (generalization error) — середні втрати на всіх можливих спостереженнях із цього розподілу; порахувати ми можемо лише емпіричну — середнє по наявній вибірці:

LD(f)=E(x,y)∼D[ℓ(y,f(x))],LS(f)=1|S|∑(xn,yn)∈Sℓ(yn,f(xn))
ПозначенняЗначення
Dрозподіл, з якого беруться дані; невідомий
ℓ(y,f(x))втрата на одному спостереженні, наприклад 12(y−f(x))2
LS(f)емпірична помилка: незміщена оцінка справжньої, якщо S не використано для навчання
LS(fS)тренувальна помилка: та сама формула, але fS навчено на тому самому S

Різницю |LD(f)−LS(f)| називають розривом узагальнення (generalization gap). Тренувальна помилка занижує справжню саме тому, що модель уже бачила ці точки.

Три ролі даних: навчання, валідація, тест ​

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

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

На рисунку 19 398 районів Каліфорнії — це ті, що лишилися з 20 640 після відсіву районів зі стелею 5,0 та явних викидів за кількістю кімнат, мешканців і населенням — поділено у пропорції 60/20/20, і на кожній частині виміряно помилку однієї й тієї самої моделі: 0,511 на навчальній, 0,532 на валідаційній, 0,528 на тестовій. Різниця між першим і другим числом — це розрив узагальнення в явному вигляді.

Компроміс очевидний: що більше даних віддано на оцінювання, то менше лишається на навчання.

train validation test split of california districts

Джерело поділу на три частини: Hastie, Tibshirani, Friedman · The Elements of Statistical Learning, §7.2

Розмір тестової вибірки визначає точність оцінки ​

Число, отримане на тесті, теж випадкове: воно залежить від того, які саме спостереження туди потрапили. Якщо втрати обмежені відрізком [a,b], а тестові дані незалежні від моделі, нерівність Гефдінга дає точну гарантію:

Pr[|LD(f)−Ltest(f)|≥(b−a)2ln⁡(2/δ)2|Stest| ]≤δ

Точність спадає як 1/|Stest|: щоб зменшити похибку вдесятеро, тест треба збільшити в сто разів. Для втрат у межах [0;1] і рівня довіри 95 % сто спостережень дають ε = 0,136, тисяча — 0,043, десять тисяч — 0,014. Якщо на тому самому тесті порівнюють K кандидатів, ln⁡(2/δ) під коренем стає ln⁡(2K/δ) — плата за тисячу кандидатів лише ln⁡1000≈6,9.

hoeffding accuracy versus test set size

Крос-валідація за M блоками ​

Один поділ витрачає дані марно й залежить від того, які точки потрапили у валідацію. Крос-валідація (cross-validation) знімає обидві вади: дані ділять на M блоків і M разів навчають на M−1 із них, перевіряючи на решті.

"Cross-validation returns an estimate of the generalization-error and its variance." — EPFL CS-433, лекція 04a

k fold cross validation splitting scheme

Джерело: scikit-learn · Visualizing cross-validation behavior

Найважливіші тут останні слова: «and its variance». Випадкові блоки припускають незалежність спостережень, а вона є не завжди. Порівняймо на King County із лабораторної три схеми: випадкові блоки, поділ за часом угоди й групування за поштовим кодом.

Вивід код запущено, вивід не редагувався
text
випадкові блоки    RMSE 0.2527 ± 0.0032
за часом угоди     RMSE 0.2533 ± 0.0104
за поштовим кодом  RMSE 0.2612 ± 0.0213

На що дивитися: середні RMSE майже однакові, а розкид між блоками зростає всемеро — від ±0,0032 при випадкових блоках до ±0,0213 при розбитті за поштовим кодом.

Середні майже збігаються — це й найнебезпечніше. Дивитися треба на розкид: ±0,0032, ±0,0104 і ±0,0213 — усемеро більше на тих самих даних. Випадкове перемішування не так завищує якість, як приховує, наскільки погано ми її знаємо.

Права панель — одиничне розбиття: найпізніші 20 % дають RMSE 0,2656 проти 0,2520 у випадкових.

five fold scores for three cross validation schemes and a single time split

Вибір степеня полінома крос-валідацією ​

Перевіримо це: 500 районів Каліфорнії, вісім ознак, розширених поліномом, п'ять блоків.

Вивід код запущено, вивід не редагувався
text
степінь 1:  RMSE = 0.617 ± 0.090
степінь 2:  RMSE = 0.608 ± 0.056
степінь 3:  RMSE = 1.477 ± 0.542
степінь 4:  RMSE = 63.776 ± 52.422

На що дивитися: найменша помилка — на степені 2; на третьому RMSE зростає більш ніж удвічі, на четвертому стає безглуздою, а розкид по блоках сягає ±52.

Крос-валідація обирає степінь 2: уже на третьому нерегуляризована модель розсипається, на четвертому помилка стає безглуздою, а розкид по блоках — ±52.

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

Вивід код запущено, вивід не редагувався
text
повний      степінь 3  RMSE на тесті 0.5730
половинний  степінь 1  RMSE на тесті 0.5997
випадковий  степінь 3  RMSE на тесті 0.5730

На що дивитися: випадковий пошук знайшов той самий оптимум, що й повний (степінь 3, RMSE 0,5730), а половинний зупинився на степені 1 і програв — 0,5997.

Результат повчальніший за очікуваний. Випадковий пошук перебрав 20 комбінацій із 60 і знайшов той самий оптимум, що й повний, — за третину обчислень. Половинний, найдешевший (47 підгонок проти 300), обрав степінь 1 замість 3 і програв: 0,5997 проти 0,5730.

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

Валідаційна оцінка зміщена, якщо нею ж обирали модель ​

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

Правильна схема — вкладена крос-валідація (nested cross-validation); наступний розділ розбирає її крок за кроком.

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

nested versus non nested cross validation scores

Джерело: scikit-learn · Nested versus non-nested cross-validation

Вкладена крос-валідація крок за кроком ​

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

  1. Зовнішній ділить дані на M блоків. Блок k відкладається й не бере участі ні в чому.
  2. Внутрішній працює лише на решті M−1 блоків: ділить їх ще раз і перебирає кандидатів, обираючи найкращого.
  3. Переможець навчається на всіх M−1 блоках і один раз міряється на відкладеному блоці k.
  4. Так по черзі для кожного k; підсумкова оцінка — середнє по зовнішніх блоках.

Блок k не бачив жодного етапу вибору, тому його оцінка чесна. Ціна — у M разів більше навчань.

Вивід код запущено, вивід не редагувався
text
невкладена: 0.9736
вкладена:   0.9663
оптимізм:   0.0074

На що дивитися: невкладена оцінка вища за вкладену на 0,0074 — це оптимізм від того, що ті самі дані й обирали гіперпараметр, і звітували про якість.

Різниця 0,0074 і є оптимізмом від подвійного використання даних: невкладена оцінка виявилася вищою у 21 випадку з 30.

Криві навчання показують, чого бракує моделі ​

Криву «помилка проти складності» будувати дорого: потрібно перебрати всі значення гіперпараметра. Дешевша діагностика — крива навчання (learning curve): та сама модель, але дедалі більша навчальна вибірка.

Читають її за проміжком між кривими. Зійшлися на посередньому рівні — моделі бракує гнучкості, і нові дані не допоможуть; лишився широкий проміжок — модель перенавчається, і дані ще здатні його скоротити. Ліворуч на рисунку криві зійшлися на 0,86: клас моделей вичерпано. Праворуч інша модель на тих самих даних виходить на 0,99.

learning curves for two models with growing training set

Джерело: scikit-learn · Plotting Learning Curves

Та сама модель на різних вибірках ​

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

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

Поліном дев'ятого степеня поводиться навпаки: середня з вісімнадцяти кривих майже збігається зі справжньою функцією, зате окремі криві розлітаються, розкид 0,47. Це дисперсія (variance).

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

simple and complex model refitted on many samples

Розклад помилки на три доданки ​

Нехай y=f(x)+ε, де E[ε]=0 і шум не залежить від x. Зафіксуймо точку x0 і усереднімо квадратичну помилку за всіма можливими навчальними вибірками S:

ES,ε[(y−fS(x0))2]=Var[ε]⏟шум+(f(x0)−ES[fS(x0)])2⏟зміщення2+ES[(fS(x0)−ES[fS(x0)])2]⏟дисперсія
ДоданокЩо вимірюєЧим зменшується
шумвипадковість самих вимірюваньнічим: це нижня межа
зміщення²систематичний промах середньої моделібагатшим класом моделей
дисперсіячутливість моделі до конкретної вибіркипростішим класом, більшою вибіркою, регуляризацією

Усі три доданки невід'ємні, тож кожен окремо є нижньою межею справжньої помилки. Розклад виведено для квадратичних втрат і фіксованої точки x0; на нуль-одиничну втрату в задачах класифікації він у такому вигляді не переноситься.

Три доданки в числах ​

Порахуймо розклад чисельно. Справжня функція sin⁡(2πx), шум зі стандартним відхиленням 0,25, чотириста незалежних навчальних вибірок по 25 точок, степені полінома від 1 до 12; у кожній зі 120 тестових точок прогнози усереднено за вибірками.

Зміщення² спадає від 0,153 на першому степені до 0,0001 на п'ятому — клас моделей стає достатньо багатим, щоб описати синус. Дисперсія робить протилежне: 0,021 на першому степені, 0,086 на шостому, 2742 на дванадцятому.

Сума мінімальна на третьому степені й дорівнює 0,076. Горизонтальна лінія шуму σ2=0,0625 — підлога: навіть знаючи справжню функцію, ми не передбачимо шум, бо він не залежить від даних.

noise bias squared and variance versus model complexity
Три доданки на одному повзунку
Ті самі числа, що на рисунку: справжня функція sin(2πx), шум 0,25, 400 незалежних вибірок по 25 точок. Ліворуч — шість підгонок із різних вибірок і їхнє середнє; праворуч — розклад помилки в логарифмічному масштабі.
моделі з різних вибірок
справжнясередня модельокремі підгонки
розклад помилки, логарифмічна шкала до 104
10-4 10-3 10-2 10-1 100 101 102 103 104зміщення²дисперсіяшум σ²
Точок у навчальній вибірці:
0,0030зміщення²
0,0109дисперсія
0,0625шум σ² — підлога
0,0765сума — мінімум
3найкращий ступінь при 25 точках

При 25 точках на першому ступені всі шість підгонок майже збігаються — дисперсія мала, 0,021, — але жодна не схожа на синус: зміщення² дорівнює 0,153. На п'ятому зміщення падає до 0,0001, бо клас моделей уже достатньо багатий. Далі починається розплата: дисперсія 0,086 на шостому ступені й 2742 на дванадцятому, де підгонки розлітаються за межі графіка. Мінімум суми — на третьому ступені, 0,076. Сірий стовпчик шуму не рухається взагалі: це підлога, нижче якої не опуститься жодна модель, бо шум не залежить від даних.

Тепер перемкніть розмір вибірки. Зміщення² від нього майже не залежить — це властивість класу моделей, а не даних, — зате дисперсія падає з кожною доданою точкою: на дев'ятому ступені це 155 243 при 15 точках, 14,6 при 25, 0,017 при 50 і 0,005 при 100. Разом із нею відсувається межа складності, яку дані здатні прогодувати: найкращий ступінь 15 → 3 · 25 → 3 · 50 → 5 · 100 → 5. Питання «яка модель складна занадто» не має відповіді у відриві від того, скільки в нас спостережень.

На п'ятнадцяти точках варто зупинитися окремо. Рисунок вище в цій-таки лекції показує поліном дев'ятого ступеня на 15 точках із помилкою 0,39 — крива хоч і вигинається, але виглядає пристойно. Тут же дисперсія на тому самому ступені дорівнює шестизначному числу. Суперечності немає: на рисунку одна конкретна вибірка, якій пощастило, а тут — середнє за чотирмастами. Час від часу точки лягають так, що поліном іде у стелю, і саме ці рідкісні випадки дають майже весь внесок у дисперсію. У цьому й полягає сенс доданка: він міряє не те, як модель поводиться на ваших даних, а те, наскільки по-різному вона повелася б на інших даних із того самого джерела. Одна вдала вибірка про це не говорить нічого.

Чотири варіанти влучності моделі ​

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

Низьке зміщення й низька дисперсія — купно в центрі, це мета. Низьке зміщення й висока дисперсія — розкидано навколо центру: у середньому правильно, але окремий постріл ненадійний, типове перенавчання. Високе зміщення й низька дисперсія — купно, проте не туди: недонавчання. Високе зміщення й висока дисперсія — і не туди, і врозтіч.

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

four dart boards for bias and variance combinations

Регуляризація як штраф за складність ​

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

minw L(w)+Ω(w)

"Through regularization, we can penalize complex models and favor simpler ones. The second term Ω is a regularizer, measuring the complexity of the model given by w." — EPFL CS-433, лекція 03d

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

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

Ridge-регресія: штраф за квадрат норми ваг ​

Найпоширеніший регуляризатор — квадрат евклідової норми. У парі із середньоквадратичною втратою це ridge-регресія:

minw 12N∑n=1N(yn−xn⊤w)2+λ2‖w‖22,‖w‖22=∑dwd2

Задача лишається квадратичною, тому розв'язок є в закритій формі:

w⋆=(X⊤X+λ′I)−1X⊤y,λ′=Nλ

При λ=0 формула перетворюється на звичайний метод найменших квадратів. Множник перед штрафом у різних джерелах записують по-різному, і саме через це чисельні значення λ не можна переносити між реалізаціями: Ridge(alpha=…) у scikit-learn мінімізує ‖y−Xw‖2+α‖w‖2 без ділення на N, тобто його alpha — це наше λ′. Далі в лекції λ на графіках і у виводі коду означає саме параметр alpha.

Погано обумовлена задача робить МНК нестійким ​

Ridge не лише стримує складність — він лікує конкретну числову хворобу. Якщо ознаки майже колінеарні або їх більше, ніж спостережень, матриця X⊤X близька до виродженої, і розв'язок МНК стає надчутливим до найменшої зміни даних.

На рисунку одну й ту саму задачу розв'язано методом найменших квадратів кілька разів, щоразу з мікроскопічно зсунутими точками. Прямі розлітаються віялом: дані змінилися на частки відсотка, а модель — цілком.

Той самий ефект у числах. Дві майже однакові ознаки, $x_2 = x_1 + $ шум амплітуди 0,01, справжня залежність y=2x1. МНК дає ваги 1,42 і 0,59: суму він угадав, а розподілив її довільно. Інтерпретувати такі коефіцієнти неможливо. Ridge цю хворобу лікує: при λ=1 ваги стають 1,01 і 1,00, тобто внесок ділиться між дубльованими ознаками порівну.

ordinary least squares fits scatter under tiny data perturbations

Джерело: scikit-learn · Ordinary Least Squares and Ridge Regression

Шлях коефіцієнтів ridge ​

Що більший λ, то сильніше стискаються ваги. Рисунок показує це на класичному прикладі: матриця Гільберта — навмисно погано обумовлена система з десятьма ознаками.

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

Головне спостереження таке: жодна траєкторія не досягає нуля на скінченному λ. L2-штраф стискає ваги, але не вимикає ознаки.

ridge coefficients as a function of regularisation strength

Джерело: scikit-learn · Plot Ridge coefficients as a function of the regularization

Ridge у коді: закрита форма й бібліотека ​

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

Вивід код запущено, вивід не редагувався
text
numpy   [ 0.6246  0.1119 -0.1033  0.1066  0.029  -0.208  -0.5347 -0.5324]
sklearn [ 0.6246  0.1119 -0.1033  0.1066  0.029  -0.208  -0.5347 -0.5324]
максимальна розбіжність: 8.0e-15

На що дивитися: ваги numpy і scikit-learn збігаються до 8·10⁻¹⁵, тобто до машинної точності.

np.linalg.solve розв'язує систему, а не обертає матрицю: обернення дорожче й чисельно гірше. Розбіжність із бібліотечною реалізацією лежить на рівні машинної точності.

Числовий приклад: як λ стискає одну вагу ​

Візьмімо одну стандартизовану ознаку — медіанний дохід — і ті самі 500 районів. Для однієї ваги обидві задачі мають розв'язок у явному вигляді. Тут для наочності взято суму квадратів без множника 1/N, штраф λ2w2 для ridge і λ|w| для lasso:

wridge=x⊤yx⊤x+λ,wlasso=sign(x⊤y)⋅max(0, |x⊤y|−λ)x⊤x

На цих даних x⊤y=304,5 і x⊤x=500, тож МНК дає w=0,609.

λ05020050010002000
ridge0,6090,5540,4350,3050,2030,122
lasso0,6090,5090,209000

Ridge ділить вагу на дедалі більше число: вона зменшується, але нулем не стає ніколи. Lasso віднімає від чисельника сталу λ і, щойно λ перевищує 304,5, дає точний нуль. У цьому вся різниця між стисканням і вимиканням ознаки.

Lasso: штраф за суму модулів ​

Замінімо квадрат норми на суму модулів — отримаємо lasso:

minw 12N∑n=1N(yn−xn⊤w)2+λ‖w‖1,‖w‖1=∑d|wd|

Закритої форми тут немає: модуль не диференційовний у нулі, тому розв'язок шукають координатним спуском або проксимальними методами. Натомість з'являється властивість, якої ridge не має, — розрідженість (sparsity).

"This forces some of the elements of w to be strictly 0 and therefore enforces sparsity in the model (some features will not be used since their coefficients are zero)." — EPFL CS-433, лекція 03d

Розріджений розв'язок є автоматичним відбором ознак: модель сама повідомляє, які ознаки їй не потрібні.

Алгоритми розв'язання: Hastie, Tibshirani, Friedman · The Elements of Statistical Learning, §3.4.4

Геометрія L1 і L2 ​

Обидві задачі можна записати з обмеженням замість штрафа: мінімізувати ту саму квадратичну втрату за умови ‖w‖2≤τ або ‖w‖1≤τ. Форма допустимої області вирішує все.

Лінії рівня квадратичної втрати — еліпси навколо розв'язку МНК. Розв'язок обмеженої задачі лежить там, де найменший еліпс торкається межі області.

Куля гладка, тому дотик відбувається в довільній точці й обидві координати ненульові: тут w=(1,92; 0,55). Ромб має кути на осях, і саме в кут дотик найімовірніший, бо кут стирчить назустріч еліпсам: w=(2,00; 0,00), друга ознака вимкнена повністю.

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

level sets with l2 ball and l1 diamond constraint

Шлях коефіцієнтів lasso ​

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

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

Штрихові лінії — розв'язок алгоритмом LARS, який будує той самий шлях точно, а не за сіткою значень λ.

lasso and lars coefficient paths reaching exact zero

Джерело: scikit-learn · Lasso, Lasso-LARS, and Elastic Net paths

Ridge і lasso на ознаках California Housing ​

Порівняймо обидва штрафи на тих самих даних: 500 районів, вісім вихідних ознак, усі стандартизовані.

Ліворуч ridge: усі вісім траєкторій плавно сходяться до нуля, але жодна його не досягає навіть при λ = 100 000. Праворуч lasso: ознаки вимикаються по черзі. Першим зникає населення району, далі спальні на житло, потім широта й довгота. При λ = 0,074 в моделі лишаються чотири ознаки з восьми — медіанний дохід, вік забудови, кімнати на житло і мешканці на житло.

Діапазони λ на панелях різні, бо в scikit-learn Ridge штрафує без ділення на N, а Lasso — з ним; порівнювати варто форму траєкторій, а не самі числа.

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

ridge and lasso coefficient paths on california features
Що робить λ з вагами
Ті самі дані, що на рисунку: 500 районів California Housing, вісім стандартизованих ознак. Посуньте λ — і побачите різницю між двома штрафами на тих самих вагах.
медіанний дохід
0,620
вік забудови
0,075
кімнат на житло
-0,098
спалень на житло
0,153
населення
0,013
мешканців на житло
-0,201
широта
-0,958
довгота
-0,952
8 / 8ознак лишилося в моделі
0,594RMSE на навчальних
0,600RMSE на 5000 відкладених

Ridge стискає всі вісім ваг плавно, але жодна не стає нулем навіть при λ = 100 000 — ознак завжди лишається вісім. Lasso вимикає їх по черзі: спочатку населення району, далі спальні на житло, потім широта й довгота. При λ ≈ 0,074 в моделі лишаються рівно чотири ознаки. Зверніть увагу на широту й довготу: їхні ваги майже однакові за модулем і зникають поруч — це слід географії, який модель не може розділити на два окремі впливи. Діапазони λ на двох штрафах різні, бо Ridge у scikit-learn штрафує без ділення на N, а Lasso — з ним.

L2 проти L1: практичне порівняння ​

Обидва штрафи стримують складність, але поводяться по-різному, і вибір між ними змістовний, а не технічний.

ВластивістьL2 (ridge)L1 (lasso)
Розрідженість розв'язкунемає, ваги лише стискаютьсяє, частина ваг точно нульова
Єдиність розв'язкузавжди єдинийможе бути не єдиний
Закрита формаєнемає, потрібен ітеративний розв'язувач
Дубльовані ознакиділить вагу між ними порівнусхильний лишити одну, решту занулити
Стійкість до нерелевантних ознакпомірнависока

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

Практичне правило: якщо ознак небагато й усі осмислені — ridge; якщо ознак сотні й більшість, найімовірніше, зайві — lasso або їхня суміш, elastic net, яка додає обидва штрафи одночасно.

Джерело порівняння: UBC CPSC 340, лекція 17

Тренувальна і валідаційна якість залежно від λ ​

Крива за λ дзеркальна до кривої за степенем полінома: складність спадає зліва направо, на вертикальній осі — коефіцієнт детермінації R2. Другу криву підписано Test, як в оригіналі scikit-learn, але за роллю це валідаційна вибірка: на ній обирають λ.

При малому λ модель не регуляризована: на навчальних даних R2 дорівнює одиниці, а на валідаційних — лише 0,68. Зі зростанням λ навчальна якість тримається, а валідаційна стрибком піднімається до 0,83; це оптимум, тут λ = 1,37 · 10⁻³. Далі штраф завеликий, і падають обидві криві.

Саме 0,83 завищене — за механізмом розділу 15: його здобуто на тій вибірці, якою обирали λ. Підсумок міряють на третій, не використаній досі частині.

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

validation curve of train and test score versus regularisation strength

Джерело: scikit-learn · Effect of model regularization on training and test error

Регуляризація рятує модель на California Housing ​

Повернімося до задачі, у якій крос-валідація забракувала третій степінь. На 500 навчальних районах поліном третього степеня дає 164 ознаки — параметрів утричі менше, ніж спостережень, і цього вже досить, щоб МНК розсипався.

Вивід код запущено, вивід не редагувався
text
МНК   λ = 0         CV 1.477  train 0.393  test 2.216  ненульових ваг 164
ridge λ = 4.3288    CV 0.603  train 0.499  test 0.574  ненульових ваг 164
lasso λ = 0.0014424 CV 0.604  train 0.497  test 0.578  ненульових ваг 38

На що дивитися: МНК має найменшу помилку на навчанні (0,393) і найбільшу на тесті (2,216); ridge і lasso тримають тест близько 0,57, а lasso лишає лише 38 ненульових ваг зі 164.

МНК гірший за прогноз «завжди середня ціна», у якого RMSE 0,982. Ridge погіршив навчальну помилку на чверть і зменшив тестову вчетверо; lasso досяг того самого, лишивши 38 ознак зі 164.

Один практичний нюанс: на найменших значеннях λ координатний спуск lasso не встигає збігтися навіть за 200 000 ітерацій і друкує ConvergenceWarning. На вибір λ це не впливає — попереджання приходять із того кінця сітки, який крос-валідація однаково відкидає, — але побачити їх у своєму запуску нормально.

regularisation rescues polynomial model on california housing

Стандартизація перед регуляризацією ​

Штраф ‖w‖2 бачить лише числа, а не одиниці виміру. Якщо одну ознаку записано в доларах, а другу в тисячах доларів, друга отримає коефіцієнт у тисячу разів більший і буде покарана в мільйон разів сильніше. Тому перед будь-якою регуляризацією ознаки стандартизують: віднімають середнє й ділять на стандартне відхилення.

Наочно на наших даних. Без стандартизації ridge при λ = 10 дає вагу 0,356 для доходу і 0,399 для кількості спалень — виходить, що спальні важливіші за дохід. Після стандартизації ті самі ваги дорівнюють 0,635 і 0,133, а вага населення зростає з 0,0000 до 0,023.

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

Витік даних робить оцінку безглуздою ​

Витік даних (data leakage) — це будь-яке потрапляння інформації з перевірочної частини в процес навчання. Найпоширеніша форма — препроцесинг або відбір ознак, виконані до поділу на блоки.

Вивід код запущено, вивід не редагувався
text
витік: 0.744
чесно: 1.277

На що дивитися: з витоком RMSE 0,744 — нібито закономірність у чистому шумі; чесний відбір усередині конвеєра дає 1,277, гірше за тривіальний прогноз, як і має бути.

Відбір ознак на всьому масиві дає RMSE 0,744 — краще за стандартне відхилення цілі 1,061, тобто модель нібито знайшла закономірність у чистому шумі. Відбір усередині конвеєра дає 1,277, трохи гірше за тривіальний прогноз, як і має бути.

Джерело: Hastie, Tibshirani, Friedman · The Elements of Statistical Learning, §7.10.2

Ridge як апріорне знання про ваги ​

Регуляризацію можна прочитати ймовірнісно. Якщо припустити, що шум гаусів, а ваги апріорі розподілені як w∼N(0,1λI), то найімовірніші за Байєсом ваги — це рівно розв'язок ridge:

wMAP=arg⁡minw∑n12σ2(yn−xn⊤w)2+λ2‖w‖2

Іншими словами, L2-штраф — це закодоване переконання «великі ваги малоймовірні». L1-штраф так само відповідає апріорному розподілу Лапласа, у якого гостріший пік у нулі.

"Regularization … can be understood as a compressed form of data; in this sense, using regularization is equivalent to adding data which helps reduce overfitting." — EPFL CS-433, лекція 03d

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

Байєсів погляд на обидва штрафи: The Elements of Statistical Learning, §3.4.3

Обмеження регуляризації ​

Регуляризація не створює інформації. Вона лише перерозподіляє: додає зміщення, щоб зменшити дисперсію. Якщо дисперсія й так мала, виграшу не буде. На повних 16 512 навчальних районах California Housing із вісьмома ознаками крос-валідація обирає λ = 19,3, що стискає ваги менш ніж на відсоток, і на тесті ridge не виграє нічого: 0,7275 проти 0,7273 у звичайного МНК.

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

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

Штраф не рятує від хибної постановки. Якщо ознаки не містять потрібної інформації або в даних є витік, жодне λ цього не виправить.

Підсумок лекції ​

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

Складність треба вимірювати, а не вгадувати. Поділ на навчальну, валідаційну й тестову частини та крос-валідація дають оцінку помилки узагальнення разом із її розкидом.

Помилка розкладається на три доданки. Шум задає нижню межу, зміщення спадає зі складністю, дисперсія зростає, а мінімум суми лежить посередині.

Регуляризація керує складністю неперервно. Ridge стискає ваги і лікує погану обумовленість, lasso занулює частину з них і відбирає ознаки. Гіперпараметр λ підбирають крос-валідацією, ознаки перед цим стандартизують, а весь препроцесинг тримають усередині конвеєра.

Джерела й додаткові матеріали ​

Курси

Підручники

Документація

Матеріали курсу. Схеми із зовнішніх джерел належать їхнім авторам — посилання під кожною ілюстрацією.