Перейти до змісту

Лабораторна робота 10. У який бік змінювати два параметри

Коротко про роботу

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

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

▶ Відкрити робочий зошит у браузері

1. Ситуація

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

Головне питання роботи: Який із кількох запропонованих напрямів зменшує помилку найшвидше поблизу заданої точки?

2. Що вже потрібно знати

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

  • часткові похідні;
  • градієнт;
  • напрямна похідна;
  • одиничний напрям;

Якщо якийсь пункт забувся, поверніться до відповідної лекції. У цій роботі нова теорія не вводиться без пояснення.

3. Як перейти від ситуації до математики

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

Спочатку сформулюйте зміст задачі словами. Лише після цього записуйте формули й код. Це зменшує ризик правильно порахувати не ту задачу.

4. Ваш варіант

У notebook змініть тільки один рядок:

STUDENT_X = 1  # поставте свій номер 1..30

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

Після запуску комірки «Дані вашого варіанта» notebook покаже всі числа, потрібні для роботи. Вручну підставляти STUDENT_X у формули не потрібно. Спочатку подивіться на отримані дані та підпишіть, що означає кожен масив або параметр.

5. Де тут треба подумати

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

Перед тим як писати код, дайте собі відповідь на два питання:

  1. Що означає знак напрямної похідної для малого кроку?
  2. Чому прогноз градієнта може погіршитися, якщо зробити надто великий крок?

Відповідь не треба робити довгою. Достатньо 1–2 речень на кожне питання. Це допомагає перевірити, що ви розумієте задачу до запуску обчислень.

6. Послідовність роботи

Крок 1. Записати контрольну точку

Обчисліть \(J(z_0)\) і поясніть, що означають дві координати.

Крок 2. Вивести градієнт

Отримайте формули для двох часткових похідних і реалізуйте функцію grad(z).

Крок 3. Перевірити градієнт чисельно

Для кожної координати порівняйте похідну зі скінченною різницею.

Крок 4. Порівняти напрямки

Для заданих одиничних напрямів обчисліть \(\nabla J(z_0)^T d\).

Крок 5. Побудувати антиградієнт

Нормуйте \(-\nabla J(z_0)\) і порівняйте його напрямну похідну з іншими.

Крок 6. Перевірити прогноз реальним кроком

Візьміть малий \(h\) і порівняйте \(J(z_0+h d)-J(z_0)\) із прогнозом.

7. Python

Використовуйте: NumPy.

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

8. Локальна самоперевірка

У робочому notebook наперед створені назви змінних, які читає автоматична перевірка. Не перейменовуйте їх. Ви самі пишете спосіб розв’язання, але фінальний результат записуєте у визначені змінні.

Змінна Що записати
gradient градієнт J у z0
directional_derivatives чотири похідні вздовж directions
best_direction номер 1..4 напряму з найменшою похідною
predicted_change лінійний прогноз зміни для кроку h=0.05
actual_change фактична зміна J для того самого кроку

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

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

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

9. Що має бути у звіті

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

  1. номер вашого варіанта;
  2. вихідні дані, які реально використовувалися;
  3. ключовий проміжний результат, на якому ґрунтується рішення;
  4. фінальний результат;
  5. незалежна числова перевірка;
  6. коротке пояснення, що цей результат означає в початковій прикладній ситуації.

Наприкінці дайте відповідь на головне питання лабораторної одним коротким абзацом.

10. Контрольні питання

  1. Що означає від’ємна напрямна похідна?
Показати відповідь Малий рух у цьому напрямі має зменшувати функцію в першому наближенні.
  1. Чому напрями треба нормувати перед порівнянням?
Показати відповідь Інакше величина напрямної похідної залежатиме не тільки від напрямку, а й від довжини вектора.