# Домашнє завдання · Активації та ініціалізація

> Лекція: [lecture.html](lecture.html) · Практика: [practice.ipynb](practice.ipynb) · Тест: [quiz.html](quiz.html)

Мета цієї роботи одна: перестати вірити на слово, що «ReLU краща за сигмоїду», і навчитись
**показувати числом**, у чому саме різниця і де вона зникає. Усі три рівні спираються на ту
саму дошку оголошень і ті самі функції з практики.

---

## 🟢 Рівень 1 — База

Повтори дослід із затуханням градієнта, але зміни в ньому одну річ: **ширину шарів**.
Функція `норми_провини` з практики бере ширину параметром — прожени її для ширини 8, 32 і 128
при десяти шарах, для сигмоїди й для ReLU.

Для кожного випадку випиши три числа: норму провини першого шару, відношення «перший до
останнього» та множник на шар (це відношення в степені 1/9).

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

---

## 🟡 Рівень 2 — Плюс

Перевір твердження, яке лекція проголосила, але не довела до кінця: **He працює для ReLU,
Xavier — для tanh, і навпаки вони не працюють**.

Перепиши функцію `дисперсії_по_шарах` так, щоб активація теж була параметром, і побудуй
таблицю на чотири стовпці:

| | Xavier | He |
|---|---|---|
| **tanh** | ? | ? |
| **ReLU** | ? | ? |

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

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

---

## 🔴 Рівень 3 — Виклик

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

Що треба зробити:

1. навчи мережу 2 → 64 → 1 на сітці: швидкість навчання з `[0.5, 1, 2, 5, 10, 20, 50]`, масштаб
   ваг як `множник × sqrt(2/n_in)` з `множник ∈ [0.1, 0.5, 1, 2, 5]` — усього 35 запусків;
2. для кожного запуску запиши частку мертвих нейронів і точність;
3. намалюй теплову карту `imshow`: рядки — масштаб, стовпці — швидкість навчання, колір — частка мертвих;
4. окремо познач на карті клітинки, де точність вища за 0.92.

**Зроблено, якщо:** карта побудована, і ти сформулював письмово дві межі, які на ній видно:
(1) за яким приблизно добутком «крок × масштаб» починають масово вмирати нейрони і
(2) чи існує на карті область, де нейрони живі, а точність усе одно погана. Якщо існує —
поясни, що саме там заважає навчанню, якщо ні — покажи, що її нема.

---

## Підказки

- **Рівень 1.** Множник на шар для сигмоїди складається з двох частин: похідної активації
  й множення на матрицю ваг. Ініціалізація Xavier робить другу частину близькою до одиниці
  **за будь-якої ширини** — саме тому вона й залежить від `n_in`.
- **Рівень 2.** Дисперсія `tanh` не збігається з дисперсією передактивації: `tanh` теж стискає
  сигнал, просто не обнуляючи його. Тому «правильний» множник для пари tanh + Xavier може
  вийти не рівно 1.0, а трохи меншим — це нормально, головне порядок величини.
- **Рівень 3.** 35 запусків по 300 епох — це довго, якщо писати цикл наївно. Скороти кількість
  епох до 150: межа виживання видно вже там, бо нейрони гинуть у перші десятки кроків.
- Якщо на будь-якому рівні числа виглядають дивно — спершу надрукуй дисперсію активацій
  першого шару. Половина «дивних» результатів пояснюється тим, що вхід забули стандартизувати.
