Дані, модель, тренування, інференс: основні поняття на одному прикладі
Увесь шлях машинного навчання на оцінці ціни квартири: дані та їх розбиття, модель із параметрами, тренування градієнтним спуском, гіперпараметри і швидкість навчання, оцінювання, інференс і словничок понять із посиланнями на частини серії.
Серія Основи ШІ Частина 3 з 52
- Мапа штучного інтелекту: що є що і як усе це пов’язано
- Коротка історія штучного інтелекту: від Тюрінга до мовних моделей
- Дані, модель, тренування, інференс: основні поняття на одному прикладі
- Як читати математичний запис: символи, індекси, суми та квантори
- Множини й відношення: конструктор, з якого складаються означення в ШІ
- Функції й відображення: чому кожна модель у ШІ — це функція
- Логіка й доведення: правила, за якими міркують у ШІ
- Графи й дерева: структура, на якій тримаються пошук і нейронні мережі
- Лінійна алгебра для машинного навчання: вектори, матриці й чому ШІ передусім множить
- Похідні, градієнт і правило ланцюжка: як модель дізнається, у якому напрямку вчитися
- Градієнтний спуск: як навчається модель
- Що таке ймовірність: від кидка кубика до аксіом Колмогорова
- Умовна ймовірність і теорема Баєса: як змінити оцінку, коли дізнаєтеся щось нове
- Випадкова величина і функція розподілу: одна функція, яка каже про розподіл усе
- Функція щільності та функція маси ймовірності: чому неперервна величина має в точці ймовірність нуль
- Математичне сподівання, дисперсія і коваріація: де лежить розподіл, наскільки він широкий і що з чим пов’язано
- Огляд розподілів ймовірностей: Бернуллі, біноміальний, Пуассона, рівномірний, нормальний і експоненційний
- Закон великих чисел і центральна гранична теорема: чому середні поводяться так передбачувано
- Статистика й оцінювання параметрів: максимальна правдоподібність, MAP і довірчі інтервали
- Теорія інформації: ентропія, перехресна ентропія і KL-дивергенція — звідки беруться функції втрат
- Пошук у просторі станів: BFS, DFS, UCS і A* з анімаціями
- Ігри та суперник: мінімакс, альфа-бета відсікання і Monte Carlo tree search
- Задоволення обмежень: бектрекінг, поширення обмежень і AC-3 на судоку та мапі чеських країв
- Логіка й системи, засновані на знаннях: пряме і зворотне виведення, резолюція та експертні системи
- Планування: STRIPS, світ кубиків, евристики з релаксації та планування в AI-агентах
- Локальний пошук та імітація відпалу: комівояжер через обласні центри Чехії
- Генетичні алгоритми: популяція, схрещування, мутація і добір на рюкзаку для походу
- Еволюційні стратегії і генетичне програмування: від правила однієї п’ятої до закону Кеплера
- Оптимізація мурашиною колонією: як феромоновий слід знаходить короткий шлях
- Оптимізація роєм частинок: інерція, власний досвід і досвід рою
- Нейроеволюція: еволюція ваг і форми нейронних мереж та алгоритм NEAT
- Нечіткі множини й функції належності: як записати «трохи тепло»
- Нечітка логіка та ймовірність: чому «трохи тепло» не означає «імовірно тепло»
- Нечітка логіка: t-норми, імплікації та правила ЯКЩО–ТО
- Нечітке керування: Мамдані та Суґено від вентилятора до маятника на візку
- Нечітка кластеризація: алгоритм fuzzy c-means і точки між кластерами
- Нейро-нечіткі системи (ANFIS): нечіткі правила, які навчаються з даних
- Марковські ланцюги: матриця переходів, стаціонарний розподіл і PageRank
- Приховані марковські моделі: алгоритм Вітербі й нечесне казино
- Байєсівські мережі: чому трава мокра і що з цього випливає для дощувача
- Фільтр Калмана: як за неточними вимірюваннями оцінити, де авто і як швидко воно їде
- Види машинного навчання: з учителем, без учителя, з частковим залученням учителя та інші
- Промпти, контекст і RAG: як дати моделі правильну інформацію
- Варіаційні автокодувальники (VAE): нові зображення з неперервного латентного простору
- Генеративні змагальні мережі (GAN): фальшувальник проти детектива
- Дифузійні моделі: як із чистого шуму постає зображення
- Марковські процеси ухвалення рішень: стани, дії, винагороди й рівняння Беллмана
- Q-навчання і DQN: як навчитися цінності дій — від таблиці до нейронної мережі
- Policy gradient і PPO: навчання безпосередньо політики
- Як працює ШІ-агент: мовна модель у циклі з інструментами
- Програмування з AI-агентами: завдання, тести й перевірка
- Оцінювання і безпека систем ШІ: як вимірювати і як стежити
Повна програма серії Готово: 52 з 83 тем
- Що означають дані, модель, тренування та інференс і як вони пов’язані між собою.
- Різницю між параметрами та гіперпараметрами і чому важлива швидкість навчання.
- Чому тренування дороге один раз, а інференс дешевий, але частий.
Що варто знати заздалегідь: Мапа штучного інтелекту: що є що і як усе це пов’язано
У всій серії повторюються чотири слова: дані, модель, тренування та інференс. Чи йдеться про розпізнавання цифр, спам-фільтр чи велику мовну модель, шлях завжди той самий: з прикладів навчається функція, яка потім відповідає на нові запитання. У цій частині ми пройдемо цей шлях повністю на найменшому можливому прикладі — оцінці ціни квартири за площею — і на кожному кроці скажемо, як він виглядає у великих моделях. Наприкінці є словничок понять із посиланнями на частини, де ви дізнаєтеся про них більше.
Продовжує частини Мапа штучного інтелекту та Коротка історія ШІ.
1. Дані: приклади з правильними відповідями
Означення — дані, ознаки та мітки
Дані — це приклади, на яких модель навчається. Кожен приклад має ознаки (вхідні значення, які ми про нього знаємо), а при навчанні з учителем ще й мітку (правильну відповідь). Дані ділять на три частини: навчальну (на ній модель навчається), валідаційну (за нею налаштовуємо параметри навчання та обираємо модель) і тестову (її використовують один раз наприкінці, щоб результат чесно оцінив, як модель упорається з новими даними).
Підручник із задачами та відповідями в кінці. На тренувальних задачах ви вчитеся, пробна контрольна покаже, чи ви це вмієте, а справжня контрольна (якої ви раніше не бачили) покаже, як воно насправді.
Наші дані вигадані: 60 квартир, для кожної площа (ознака) та ціна в мільйонах чеських крон (мітка). Ціна зростає з площею, але не точно — дві однаково великі квартири відрізняються розташуванням, станом, поверхом. Ділимо їх на 40 навчальних, 10 валідаційних і 10 тестових.
Означення — набір даних формально
Набір даних — це скінченна послідовність пар D = ((x(1), y(1)), …, (x(n), y(n))), де x(i) ∈ ℝd — вектор d ознак i-го прикладу, а y(i) — його мітка: дійсне число в регресії, елемент скінченної множини класів у класифікації. Припускають, що приклади взаємно незалежні й походять із того самого (невідомого) розподілу, що й майбутні запити.
Розбиття даних — це три неперетинні частини Dtr, Dval, Dtest, які разом дають D; кожен приклад належить рівно до однієї з них. У нас d = 1 (площа), n = 60, а частини мають 40, 10 і 10 прикладів.
Таблиця, де кожен рядок — одна квартира: стовпці з ознаками та останній стовпець із ціною. Неперетинні означає, що жодна квартира не потрапляє у дві частини водночас — інакше «справжня контрольна» містила б приклади, які модель уже бачила. А припущення про той самий розподіл каже, що тестові квартири походять із того самого ринку, що й ті, про які ми потім питатимемо; без нього помилка на тесті нічого не говорила б про майбутнє.
У великих мовних моделях даними є трильйони токенів тексту з інтернету, книжок і коду; ознакою є попередній текст, а міткою — наступний токен (частина про попереднє навчання). Принцип той самий.
2. Модель: функція з параметрами
Означення — модель і параметри
Модель — це функція, яка зі входу обчислює вихід і містить налаштовувані числа — параметри (у нейронних мережах — ваги). Форму функції обираємо ми; значення параметрів знаходить навчання. Наша модель — пряма: ціна = w · площа + b, із двома параметрами w (на скільки зростає ціна з кожним метром) і b (де пряма починається).
Модель — це машина з ручками налаштування. У нашої ручок дві. Мовна модель має їх мільярди — але це все одно машина, яка зі входу обчислює вихід, а її «знання» — це не що інше, як положення ручок.
ŷ = w · x + b
- ŷ
- передбачена ціна; дашок відрізняє її від справжньої ціни y, з якою ми її потім порівнюємо
- w
- нахил — скільки мільйонів додає кожен додатковий метр; без нього ціна взагалі не залежала б від площі
- x
- площа в м², єдина ознака; єдине, що модель знає про квартиру
- b
- зсув — «ціна квартири нульової площі»; без нього пряма мусила б проходити через початок координат, а ціни квартир до нуля не прямують
3. Тренування: налаштування параметрів
Означення — функція втрат і тренування
Функція втрат — це число, яке показує, наскільки модель помиляється на навчальних даних, — у нас середнє квадратів помилок (MSE). Тренування шукає параметри з якомога меншою втратою, найчастіше градієнтним спуском: обчислює, у якому напрямку втрата зростає, і зсуває параметри малим кроком у протилежний бік. Один прохід усіма навчальними даними — це епоха.
Туман на пагорбі й мета — спуститися в долину. Ви бачите лише схил під ногами, тож робите крок униз, знову роззираєтеся, ще крок. Кожен крок — одне підкручування ручок, а долина — це положення ручок, за якого модель помиляється найменше.
Наша функція втрат, середньоквадратична помилка (MSE), записана повністю:
J(w, b) = (1/n) ∑i=1n ( w xi + b − yi )2
- J(w, b)
- втрата як функція параметрів — дані фіксовані, змінювати можна лише w і b, тому в дужках тільки вони
- (1/n) ∑
- середнє за всіма n = 40 навчальними квартирами — щоб втрату можна було порівнювати для даних різного розміру і жодна квартира не мала переваги
- w xi + b − yi
- помилка на i-й квартирі: передбачення ŷi мінус справжня ціна; додатна, коли модель завищує, від’ємна, коли занижує
- 2
- квадрат — щоб додатні й від’ємні помилки не взаємознищувалися, великі помилки важили більше за малі, а втрату можна було гладко диференціювати
Теорема — градієнт MSE для прямої
Для J, як вище, і ŷi = w xi + b маємо
∂J/∂w = (2/n) ∑i (ŷi − yi) · xi, ∂J/∂b = (2/n) ∑i (ŷi − yi).
Доведення. Похідна суми дорівнює сумі похідних. Для одного доданка за правилом диференціювання складеної функції: ∂/∂w (w xi + b − yi)2 = 2 (w xi + b − yi) · xi, бо вираз у дужках має за w похідну xi; за b його похідна дорівнює 1. ∎
Кожна квартира «тягне» параметри пропорційно до того, наскільки модель на ній помилилася. Для w ця сила ще множиться на площу: помилка на великій квартирі каже про нахил більше, ніж помилка на квартирі-студії.
Один крок градієнтного спуску потім зсуває обидва параметри проти градієнта:
w ← w − η · ∂J/∂w
- w
- параметр до кроку і після нього — стрілка ← означає «перезаписати новим значенням», а не рівність
- −
- ідемо проти градієнта, тобто вниз: втрату ми хочемо зменшити, а не збільшити
- η
- швидкість навчання — наскільки довгий крок ми робимо; градієнт справджується лише поблизу точки, тож крок мусить бути малим (див. наступний розділ)
- ∂J/∂w
- градієнт — у якому напрямку і як круто зростає втрата, коли ми збільшуємо w
Усе тренування як алгоритм (саме так його обчислює малюнок нижче):
w, b = 0, 0 # початкові параметри
for epocha in range(200): # гіперпараметр: кількість епох
gw = gb = 0
for plocha, cena in trenovaci_data: # одна епоха = усі дані
x = plocha / 100 # площа в сотнях м²
chyba = (w * x + b) - cena # ŷ − y
gw += 2 * chyba * x / n # ∂J/∂w
gb += 2 * chyba / n # ∂J/∂b
w, b = w - eta * gw, b - eta * gb # крок униз, eta = швидкість навчання
Площу підставляємо в сотнях м² (52 м² → 0,52). У метрах градієнт за w виходив би в десятки разів більшим, ніж за b, і одна швидкість навчання не підійшла б обом параметрам водночас. Таке масштабування ознак на практиці звичне. Тому w нижче виходить у мільйонах на 100 м².
Приклад — перший крок спуску
У точці w = b = 0 модель усюди передбачає 0, тож помилка на кожній квартирі дорівнює −yi. Отже, градієнт
∂J/∂w = −2 · (1/n) ∑ xi yi = −2 · 5,678 = −11,36, ∂J/∂b = −2 · ȳ = −2 · 6,88 = −13,76,
де 5,678 — середнє добутків площі (у сотнях м²) і ціни, а ȳ = 6,88 — середня ціна в мільйонах. Зі швидкістю навчання η = 0,5:
w ← 0 − 0,5 · (−11,36) = 5,68, b ← 0 − 0,5 · (−13,76) = 6,88.
(w тут у мільйонах на 100 м².) Втрата падає з 54,2 до 17,7. Обидва градієнти були від’ємні (модель усюди занижувала), тому обидва параметри зросли.
Починаємо з w = 0 і b = 0 (модель каже «усе коштує нуль», втрата 54,2) і робимо 200 епох градієнтного спуску. Результат: w = 0,0910 мільйона за м², тобто приблизно 91 000 CZK за кожен додатковий метр, і b = 0,35 мільйона. Точний розв’язок методом найменших квадратів (для прямої його можна обчислити за формулою, див. частину про лінійну регресію) відрізняється лише в четвертому знаку після коми. Спуск дійшов туди, куди мав.
4. Гіперпараметри: що налаштовуємо ми
Означення — гіперпараметри
Гіперпараметри — це налаштування навчання, яких модель не може навчитися сама і які обираємо ми: форма і розмір моделі, швидкість навчання (наскільки великий крок градієнтного спуску), кількість епох, розмір пакета (скільки прикладів використовується на один крок). Їх налаштовують за результатами на валідаційних даних, ніколи на тестових.
Параметри — це те, чого навчиться учень. Гіперпараметри — це те, як ми його вчимо: як швидко, як довго, скільки прикладів за раз.
Зі швидкістю 0,05 модель навчається повільно — після 200 епох її втрата 0,48 і вона ще не дійшла до мети. З 0,5 вона за кілька десятків епох доходить до 0,165. З 1,6 кроки такі великі, що модель перестрибує долину дедалі далі, а втрата вибухає — після п’яти епох вона дорівнює 46 310 590. Правильна швидкість навчання — одне з найчастіших налаштувань у всьому машинному навчанні.
Для прямої та MSE можна точно обчислити, де пролягає межа між «повільно» і «вибухає». Втрата є квадратичною функцією параметрів, тож її кривина всюди однакова, і її описують два числа — кривина в крутому та в пологому напрямку долини (власні значення λ матриці Гессе, таблиці других похідних).
et+1 = (1 − η λ) · et
- et+1
- відстань параметрів від найкращих значень після наступної епохи (в одному з двох напрямків) — її ми хочемо звести до нуля
- 1
- без кроку відстань лишилася б такою, як була; крок забирає з неї частку η λ. Якщо |1 − η λ| < 1, відстань зменшується, якщо більше за 1, зростає як геометрична прогресія
- η
- швидкість навчання — єдине, що тут обираємо ми
- λ
- кривина втрати в даному напрямку — задана даними, а не нами; у крутому напрямку градієнт великий, а отже, і крок довгий
- et
- відстань перед епохою; формула повторюється, тож після t епох et = (1 − η λ)t e0
Теорема — коли градієнтний спуск збігається
Якщо втрата квадратична з матрицею Гессе H, власні значення якої 0 < λmin ≤ λmax, то градієнтний спуск зі сталою швидкістю навчання η збігається до мінімуму з будь-якої початкової точки тоді й лише тоді, коли 0 < η < 2 / λmax.
Доведення. Відхилення від мінімуму в координатах власних векторів H змінюється покомпонентно як et+1 = (1 − η λ) et. Усі компоненти прямують до нуля тоді й лише тоді, коли |1 − η λ| < 1 для обох λ, тобто 0 < η λ < 2; найсуворіша умова — для λmax. ∎
Приклад — межа для наших квартир
Для MSE прямої H = (2/n) · [[∑xi2, ∑xi], [∑xi, n]] = [[1,193, 1,435], [1,435, 2]] (площа в сотнях м²). Власні значення виходять λmax = 3,087 і λmin = 0,106, тож спуск збігається для η < 2 / 3,087 = 0,648.
η = 0,05: множник у пологому напрямку 1 − 0,05 · 0,106 = 0,9947; після 200 епох залишається 0,9947200 ≈ 35 % початкового відхилення — тому модель і не дійшла до мети.
η = 0,5: множники 0,544 і 0,947; після 200 епох залишається 0,947200 ≈ 2 · 10−5 відхилення — практично нічого.
η = 1,6 > 0,648: у крутому напрямку |1 − 1,6 · 3,087| = 3,94. Відхилення щоепохи приблизно збільшується вчетверо, а втрата, яка зростає з його квадратом, — у 15,5 раза: на графіку з 801 до 12 395.
Долина — це вузький жолоб: упоперек крутий, уздовж майже рівний. Швидкість навчання мусить бути досить малою для крутих стінок, інакше ви перестрибнете на протилежний схил вище, ніж були. Але тоді вздовж жолоба ви просуваєтеся ледь-ледь. Цей конфлікт між крутим і пологим напрямком — причина, чому у великих моделях використовують розумніші варіанти спуску.
5. Наскільки добра модель
Помилку на довільній частині даних D′ з m прикладами вимірюємо коренем із середньоквадратичної помилки (RMSE):
RMSE = √(1/m) ∑(x, y) ∈ D′ (ŷ(x) − y)2
- √
- корінь повертає результат із (млн CZK)² назад у мільйони крон — число можна читати як «типову помилку»
- (1/m) ∑D′
- середнє за вибраною частиною — навчальною, валідаційною чи тестовою; кожна відповідає на інше запитання
- (ŷ(x) − y)2
- квадрат помилки на одній квартирі, так само як у втраті — міряємо тим, що мінімізували
Середня помилка (корінь із MSE) на навчальних даних становить 0,41 мільйона, на валідаційних 0,60, а на тестових 0,51 мільйона, тобто приблизно пів мільйона крон. Краще з однією ознакою бути не може: шум, який ми додали до цін (розташування, стан), має саме такий розмір, і з площі його не вгадати. Хто хоче точнішої оцінки, потребує більше ознак — а не розумнішої прямої. Якби ж ми, навпаки, зробили модель надто гнучкою, вона вивчила б шум навчальних даних напам’ять (перенавчання) і на нових квартирах помилялася б більше.
6. Інференс: модель у роботі
Означення — інференс
Інференс (виведення) — це використання навченої моделі: параметри фіксовані, і модель лише обчислює вихід для нового входу. При цьому вона не навчається (якщо ми її явно не тренуємо знову). У мовних моделях інференсом є кожна відповідь — модель генерує токен за токеном і для кожного токена робить один прохід мережею.
Тренування — це навчання, інференс — це іспит, або робота. Вчаться один раз і довго, а працюють потім щодня і швидко. Коли ви листуєтеся з чат-ботом, ви його не навчаєте (це відбувається в інший час і по-іншому), а лише ним користуєтеся.
Наша модель для квартири площею 65 м² оцінює ціну в 6,27 мільйона. Це коштує 3 арифметичні операції. Тренування коштувало приблизно 72 000 операцій. У великих моделях співвідношення схоже, лише в іншому масштабі: тренування триває місяці на тисячах відеокарт, одна відповідь — секунди. Але відповідей мільярди, тож у найпопулярніших моделей інференс разом може коштувати більше обчислень, ніж їхнє тренування, — і тому стільки зусиль іде на те, щоб моделі зменшити й пришвидшити.
Приклад — інференс і кількість операцій
Підставимо навчені параметри w = 9,0957 мільйона на 100 м² (тобто 0,0910 на м²) і b = 0,3538; площу в сотнях м², x = 0,65:
ŷ = 9,0957 · 0,65 + 0,3538 = 5,9122 + 0,3538 = 6,2660 ≈ 6,27 мільйона.
Це 3 операції: перетворення одиниць (ділення на сто), множення і додавання. Одна епоха тренування для кожної з 40 квартир робить передбачення, помилку та обидва внески до градієнта — рахуємо приблизно 9 операцій на квартиру (точна кількість залежить від того, що вважати однією операцією), тобто 40 · 9 · 200 = 72 000 операцій за все тренування. Співвідношення тренування : одне передбачення становить 24 000 : 1.
7. Словничок
Поняття з цієї частини і де в серії про них можна дізнатися більше:
- дані
- приклади, на яких модель навчається, — у нас 60 квартир із площею та ціною — докладно
- ознака
- вхідне значення, що описує приклад (площа); зображення має тисячі ознак — пікселі — докладно
- мітка
- правильна відповідь, яку ми хочемо передбачати (ціна) — докладно
- навчальні, валідаційні та тестові дані
- на перших модель навчається, на других налаштовують параметри навчання, треті використовують один раз наприкінці — докладно
- модель
- функція з налаштовуваними параметрами, яка зі входу обчислює вихід — докладно
- параметр (вага)
- число всередині моделі, яке підбирається навчанням; мовні моделі мають їх мільярди — докладно
- функція втрат
- число, яке вимірює, наскільки модель помиляється; навчання його зменшує — докладно
- тренування (навчання)
- пошук параметрів, за яких втрата на навчальних даних мала — докладно
- градієнт
- напрямок, у якому втрата зростає найшвидше; тренування йде у протилежний бік — докладно
- епоха
- один прохід усіма навчальними даними — докладно
- пакет (batch)
- скільки прикладів використовується на один крок навчання — докладно
- гіперпараметр
- налаштування, яке обираємо ми самі і якого модель не навчається (швидкість навчання, кількість епох, розмір моделі) — докладно
- перенавчання
- модель вивчає навчальні дані напам’ять і помиляється на нових даних — докладно
- інференс (виведення)
- використання навченої моделі для нового входу — те, що відбувається, коли ви питаєте чат-бота — докладно
- токен
- шматок тексту, з яким працює мовна модель — докладно
- ембединг
- вектор чисел, який представляє слово, зображення чи інший об’єкт — докладно
- контекст і промпт
- увесь текст, який модель отримує під час інференсу — докладно
8. Підсумок
- Дані = приклади з ознаками та мітками, розділені на навчальну, валідаційну і тестову частини.
- Модель = функція з параметрами; тренування шукає параметри з найменшою втратою, зазвичай градієнтним спуском.
- Наша модель навчилася 91 000 CZK за м² — так само, як точний розрахунок.
- Гіперпараметри обираємо ми: з малою швидкістю навчання тренування повільне, з великою воно розвалюється.
- Помилка на тесті (0,51 млн) відповідає шуму в даних; кращій моделі потрібно більше ознак.
- Інференс = використання навченої моделі; на один запит він дешевий, але запитів величезна кількість.
Хочете спробувати самі? Попросіть AI-агента завантажити справжні дані про ціни квартир у вашому місті, розділити їх на три частини і натренувати ту саму пряму — а потім додати другу ознаку (скажімо, відстань від центру) і порівняти помилку на тесті.
Маєте іншу думку? Напишіть на support@coden-app.com.