Функції та похідні - Як навчається ШІ
Кафедра ШІзики
Автор
35 хвилин
Час читання
25.07.2025
Дата публікації
Лекція 4: Функції та похідні – Як ШІ знаходить найкращі рішення 📈
У попередніх лекціях ми навчилися працювати з даними (вектори та матриці) та трансформувати їх. Але як ШІ дізнається, які саме трансформації потрібні? Як нейронна мережа “навчається” розпізнавати котів чи передбачати погоду? Відповідь криється у функціях та їх похідних!
⚠️ Навчальне спрощення:
Ця лекція спрощує математичні концепції для кращого розуміння. Ми фокусуємося на інтуїції та практичних прикладах, а не на суворих доведеннях. Візуалізації можуть бути схематичними для ясності.
Функції – математичні “трансформери” 🔄
Що таке функція?
Функція – це правило, яке призначає кожному вхідному значенню (або набору значень) рівно одне вихідне значення.
Уявіть функцію як машину, яка:
- 📥 Приймає вхідні дані
- ⚙️ Обробляє їх за правилом
- 📤 Видає результат
Приклад 1: Кавова машина ☕
Уявіть функцію “приготування кави”:
Більш конкретно:
Де:
- – грами кави
- – міцність напою (умовні одиниці)
Обчислення:
- (5г кави → міцність 11)
- (10г кави → міцність 21)
- (15г кави → міцність 31)
Інтерактивна візуалізація:
Приклад 2: Функція помилки робота-кота 🤖🐱
Наш робот-кіт намагається застрибнути на полицю. Функція помилки:
Де:
- – швидкість стрибка (м/с)
- 5 м/с – ідеальна швидкість
- Помилка – наскільки далеко від цілі приземлився кіт
Візуалізація помилки:
Ми бачимо, що:
- При : помилка = 0 (ідеально! 😸)
- При : недоліт (😿)
- При : переліт (😿)
Інтерактивна функція помилки:
Функції багатьох змінних 📊
У реальному ШІ функції залежать від багатьох параметрів.
Приклад: Ціна квартири
Спрощена модель:
Де:
- – площа (м²)
- – кількість кімнат
- – поверх
- 200000 – базова ціна
Приклад розрахунку:
- Площа: 60 м²
- Кімнати: 2
- Поверх: 5
Похідні – швидкість зміни 🏃♂️
Інтуїтивне розуміння
Похідна показує, як швидко функція змінюється при зміні її вхідного значення.
Приклад: Швидкість автомобіля 🚗
Якщо положення автомобіля описується функцією:
Де – відстань (м), – час (с).
Швидкість – це похідна положення за часом:
Що це означає:
- У момент : швидкість = 10 м/с
- У момент : швидкість = 20 м/с
- У момент : швидкість = 30 м/с
Автомобіль розганяється!
Геометричний зміст похідної 📐
Похідна в точці = нахил дотичної лінії до графіка функції в цій точці.
Візуалізація для :
- У точці : (горизонтальна дотична)
- У точці : (дотична йде вгору)
- У точці : (дотична йде вгору крутіше)
Інтерактивна візуалізація f(x) = x² та її похідної:
Правила диференціювання 📝
Основні правила:
- Константа:
- Степенева функція:
- Сума:
- Добуток на константу:
Приклад застосування:
Для функції помилки кота:
Похідна:
Що це означає:
- Коли : похідна від’ємна → помилка зменшується зі збільшенням швидкості
- Коли : похідна додатна → помилка збільшується зі збільшенням швидкості
- Коли : похідна = 0 → мінімум помилки!
Візуалізація функції помилки та її похідної:
Градієнт – компас у просторі параметрів 🦭
Часткові похідні
Для функцій багатьох змінних обчислюємо часткові похідні – похідні за кожною змінною окремо.
Приклад: Функція висоти гори
Це перевернутий параболоїд – як гора з вершиною в (0, 0).
Часткові похідні:
Градієнт – вектор усіх часткових похідних
Градієнт – це вектор, складений з усіх часткових похідних:
Ключова властивість: Градієнт вказує в напрямку найшвидшого зростання!
Візуалізація градієнта 🏔️
Уявіть, що ви стоїте на схилі гори. Градієнт завжди вказує в напрямку найкрутішого підйому:
Інтерактивна 3D візуалізація гори:
- Градієнт вказує в напрямку найшвидшого підйому
- Від’ємний градієнт вказує в напрямку найшвидшого спуску
Приклад обчислення:
У точці :
Це означає:
- Функція спадає швидше в напрямку (компонента -4)
- Щоб піднятися на гору, рухайтесь у напрямку
Градієнтний спуск – алгоритм навчання ШІ 🎯
Основна ідея
Градієнтний спуск – це метод пошуку мінімуму функції шляхом руху в напрямку, протилежному градієнту.
Алгоритм:
- Почати з випадкової точки
- Обчислити градієнт у цій точці
- Зробити крок у напрямку від’ємного градієнта
- Повторювати до досягнення мінімуму
Формула оновлення параметрів
Де:
- – параметри (ваги, зміщення тощо)
- – швидкість навчання
- – градієнт функції втрат
Приклад: Навчання робота-кота 🤖
Повернемося до нашого кота, що вчиться стрибати:
Функція помилки:
Похідна:
Процес навчання з :
-
Спроба 1: м/с
- Помилка:
- Градієнт:
- Оновлення:
-
Спроба 2: м/с
- Помилка:
- Градієнт:
- Оновлення:
-
Спроба 3: м/с
- Помилка:
- І так далі…
Візуалізація прогресу:
🎮 Інтерактивна демонстрація навчання:
Тепер подивіться, як це працює в реальному часі! Натисніть “Почати навчання” і спостерігайте, як робот-кіт вчиться правильно стрибати:
Вибір швидкості навчання ⚡
Швидкість навчання критично важлива:
Занадто мала ():
💭 Уявіть: Ви йдете до магазину крихітними кроками по 1 см. Так, ви дійдете, але коли? За годину ви пройдете лише 36 метрів! Ваш робот-кіт так само “повзе” до мети - він витратить всю батарею, поки навчиться стрибати. У реальному світі це означає дні або тижні навчання замість годин.
Оптимальна ():
🎯 Ідеальний баланс: Як досвідчений водій на дорозі - не занадто повільно (затримуєте інших), не занадто швидко (небезпечно), а саме з потрібною швидкістю! Кіт робить розумні кроки: спочатку великі, щоб швидко наблизитись, потім менші для точного приземлення. Це як стрільба з лука - треба знайти ідеальну силу натягу: слабко - стріла не долетить, сильно - перелетить мішень.
Занадто велика ():
🚀 Катастрофа! Це як намагатися зловити метелика кувалдою - замість наближення до цілі, ви її руйнуєте! Робот-кіт стрибає так сильно, що перелітає через всю кімнату, відбивається від стіни і летить назад. З кожною спробою він відлітає все далі. У нейромережах це призводить до “вибуху градієнтів” - числа стають такими великими, що комп’ютер просто видає помилку.
Ланцюгове правило – фундамент глибокого навчання 🔗
Що таке ланцюгове правило?
Ланцюгове правило дозволяє обчислювати похідні складених функцій.
Якщо , то:
Приклад: Приготування ідеальної піци 🍕
Уявіть процес:
- Температура печі → Час випікання → Якість піци
Математично:
- – температура печі (°C)
- – час випікання (хв)
- – якість піци (бали)
Чому саме 15 хвилин? У формулі якості бачимо - це означає, що найкраща якість (100 балів) досягається коли хвилин. Якщо випікати менше або більше - якість погіршується!
Композиція:
Як температура впливає на якість?
Використовуючи ланцюгове правило:
Обчислюємо:
Отже:
🤔 Що це означає простими словами?
Давайте розберемо на конкретних прикладах:
-
При 200°C:
- Час випікання: 600/200 = 3 хвилини (занадто швидко!)
- Якість: -(3-15)² + 100 = -144 + 100 = -44 бали 🔥
- Результат: Згоріла зверху, сира всередині!
-
При 300°C:
- Час випікання: 600/300 = 2 хвилини (все ще швидко)
- Якість: -(2-15)² + 100 = -169 + 100 = -69 балів 💀
- Результат: Вугілля замість піци!
-
При 40°C:
- Час випікання: 600/40 = 15 хвилин (ідеально!)
- Якість: -(15-15)² + 100 = 0 + 100 = 100 балів 🍕✨
- Результат: Золотиста скоринка, розплавлений сир!
-
При 30°C:
- Час випікання: 600/30 = 20 хвилин (занадто довго)
- Якість: -(20-15)² + 100 = -25 + 100 = 75 балів 😐
- Результат: Висохла, тверда як камінь
Висновок: Ланцюгове правило показує, як зміна температури (через зміну часу) впливає на якість. При 40°C досягаємо ідеальних 15 хвилин випікання!
Застосування в нейронних мережах 🧠
У нейронній мережі маємо багато шарів:
Щоб навчити мережу, потрібно знати, як кожна вага впливає на помилку. Ланцюгове правило дозволяє “передати” градієнт назад через усі шари!
Практичний приклад: Навчання ШІ грати в дартс 🎯
Постановка задачі
ШІ керує силою () та кутом () кидка дротика. Мета – влучити в “яблучко”.
🎮 Уявіть ситуацію:
- Робот стоїть на відстані 3 метри від дартс-дошки
- “Яблучко” знаходиться на координатах (3, 1.7) - на висоті 1.7м (стандартна висота)
- Робот кидає з висоти 1.5м (рука робота)
- Робот може контролювати:
- Швидкість кидка (): від 0 до 15 м/с
- Кут кидка (): від -45° до +45° (в радіанах)
Реалістична функція польоту (з гравітацією!):
Час польоту до мішені:
Висота дротика при влучанні:
Де м/с² - прискорення вільного падіння
Функція промаху:
📐 Що відбувається фізично:
- При (горизонтально): дротик відразу починає падати вниз
- При : дротик летить по параболі вгору, потім вниз
- При : дротик летить вниз (небезпечно!)
- Чим більша швидкість, тим менше дротик встигає впасти
Реалістичні приклади:
- м/с, : час польоту 0.375с, падає на 0.69м → влучає на висоті 0.81м (промах 0.89м) 😢
- м/с, : летить по дузі, влучає на висоті 1.65м (промах 0.05м) 😊
- м/с, : майже ідеально! Влучає на 1.71м (промах 0.01м) 🎯
Функція втрат:
Чому квадрат? Щоб більші промахи “карались” сильніше. Промах 2см дає втрату 4, а промах 10см - вже 100!
Градієнтний спуск для двох параметрів
🧮 Як робот вчиться?
Робот використовує градієнти, щоб зрозуміти, як змінити силу та кут:
Часткові похідні (інтуїтивно):
- - “Якщо я кину швидше, дротик влучить вище чи нижче?”
- - “Якщо я підніму кут вгору, це компенсує падіння від гравітації?”
Фізична інтуїція:
- Збільшення швидкості → менше часу в польоті → менше падіння від гравітації
- Збільшення кута → дротик летить вище, але повільніше по горизонталі → більше часу падати
Математично:
🎯 Стратегія навчання:
- Кинути дротик з поточними параметрами
- Виміряти промах
- Обчислити, в який бік треба змінити силу та кут
- Зробити маленький крок у правильному напрямку
- Повторити!
Процес навчання:
# Початкові параметри (робот починає з наївного налаштування!)
v = 8.0 # швидкість: 8 м/с (думає що сильно, але гравітація!)
θ = 0.0 # кут: 0° (кидає прямо, не враховує падіння)
α = 0.1 # швидкість навчання
# Фізичні константи
g = 9.8 # гравітація (м/с²)
distance = 3.0 # відстань до мішені (м)
target_height = 1.7 # висота "яблучка" (м)
robot_height = 1.5 # висота кидка (м)
# 10 ітерацій навчання
for i in range(10):
# Крок 1: Обчислюємо траєкторію
t = distance / (v * cos(θ)) # час польоту
h = robot_height + v * sin(θ) * t - 0.5 * g * t * t # висота влучання
miss = abs(h - target_height) # промах по висоті
# Крок 2: Обчислюємо градієнти
# "Як зміна параметрів вплине на висоту?"
grad_v = calculate_gradient_v(v, θ) # наприклад: -2.1 (швидше = вище!)
grad_θ = calculate_gradient_θ(v, θ) # наприклад: +5.3 (кидай вгору!)
# Крок 3: Оновлюємо параметри
v = v - α * grad_v # 8.0 - 0.1*(-2.1) = 8.21 (трохи швидше)
θ = θ - α * grad_θ # 0.0 - 0.1*(5.3) = 0.053 рад (~3°)
# Крок 4: Результат
print(f"Спроба {i+1}: промах = {miss:.3f}м, v={v:.1f}м/с, θ={degrees(θ):.1f}°")
# Фізика працює! Робот навчився компенсувати гравітацію!
Візуалізація результатів:
🎮 Інтерактивна демонстрація навчання дартс:
Подивіться, як робот вчиться кидати дротики! Натисніть “Почати навчання” і спостерігайте, як градієнтний спуск допомагає роботу знайти правильну комбінацію швидкості та кута:
🔍 Що відбувається за кадром:
Початок (Спроба 1):
- Швидкість: 8.0 м/с, Кут: 0° (кидає прямо)
- Результат: дротик падає на 0.89м нижче цілі!
- Гравітація “з’їла” висоту за 0.375 секунди польоту
- Градієнти кричать: “Кидай вгору! І швидше!”
Середина навчання (Спроба 5):
- Швидкість: ~10.5 м/с, Кут: ~8°
- Промах зменшився до 0.12м
- Робот зрозумів: треба кидати під кутом вгору
- Баланс між швидкістю та кутом майже знайдено
Фінал (Спроба 10):
- Швидкість: ~11.2 м/с, Кут: ~6.5°
- Промах всього 2 см!
- Ідеальний компроміс: достатньо швидко (менше падіння) + правильний кут (компенсація гравітації)
💡 Ключові спостереження:
- Спочатку прогрес швидкий (5.2 → 3.1 см за 2 кроки)
- Потім уповільнюється (потрібна точність)
- Ніколи не досягає ідеального 0 (завжди є маленька похибка)
- Це нормально! В реальному світі 2 мм - чудовий результат
Підсумок та ключові концепції 🎓
Що ми вивчили:
-
Функції – математичні правила трансформації даних
- Описують зв’язки між змінними
- Можуть мати одну або багато змінних
-
Похідні – швидкість зміни функцій
- Показують напрямок та крутизну зміни
- Основа для оптимізації
-
Градієнт – вектор часткових похідних
- Вказує напрямок найшвидшого зростання
- Ключ до навчання в багатовимірному просторі
-
Градієнтний спуск – алгоритм оптимізації
- Рух проти градієнта до мінімуму
- Швидкість навчання контролює розмір кроку
-
Ланцюгове правило – похідні складених функцій
- Дозволяє навчати глибокі мережі
- Основа алгоритму зворотного поширення
Чому це важливо для ШІ? 🤖
- Навчання = оптимізація: ШІ навчається мінімізуючи функцію втрат
- Градієнти показують напрямок: Куди рухати параметри для покращення
- Ланцюгове правило масштабується: Працює для мереж з мільйонами параметрів
- Автоматичне диференціювання: Сучасні фреймворки обчислюють градієнти автоматично
🎯 Головне правило:
Похідна показує напрямок найшвидшої зміни функції.
Градієнтний спуск йде проти цього напрямку, щоб знайти мінімум.
Це основа навчання всіх нейронних мереж!