Тест самоперевірки

Нейронні мережі

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

← до лекції
Відповіді0 / 8   правильних: 0
Питання 1 / 8

Ти зібрав мережу 2 → 100 → 100 → 1, але забув поставити активації між шарами. Що станеться?

Чому так. Композиція лінійних відображень лінійна: W₂(W₁x + b₁) + b₂ = (W₂W₁)x + (W₂b₁ + b₂). Тому 20 тисяч параметрів рахуватимуть рівно те, що рахує одна пряма. Це мовчазна помилка: жодного винятку, лосс спадає, модель щось показує — і ти шукаєш причину годинами. У практиці ми перевірили це через assert: вихід мережі без активацій до останнього знаку збігся з виходом одного лінійного шару.
Питання 2 / 8

Чому похідну втрати по входу останнього нейрона беруть саме від крос-ентропії, а не від MSE?

Чому так. Знаменник ŷ(1−ŷ) з похідної крос-ентропії точно скорочується з тим самим множником із похідної сигмоїди — лишається чиста різниця «прогноз мінус відповідь». У MSE скорочення немає: при ŷ = 0.999 і y = 0 множник ŷ(1−ŷ) дорівнює 0.001, тобто модель груба помилилась і саме тому не хоче виправлятись. Обидві функції визначені всюди на (0, 1) — річ не в цьому.
Питання 3 / 8

Мережа вчиться, втрата спадає з 0.69 до 0.05. Чи доводить це, що твій backprop написаний без помилок?

Чому так. Помилковий градієнт часто лишається напрямком, який хоч трохи зменшує втрату, — тому навчання «наче працює». У практиці ми навмисно викинули множення на похідну tanh: відносна похибка градієнта підскочила з 2·10⁻¹⁰ до 0.25, а мережа все одно спускалася б. Надійна перевірка — чисельне диференціювання, і воно не потребує жодної сторонньої бібліотеки.
Питання 4 / 8

Чому в чисельній перевірці градієнта беруть центральну різницю (L(w+h) − L(w−h))/2h, а не односторонню?

Чому так. При h = 10⁻⁵ це різниця між похибкою близько 10⁻⁵ і близько 10⁻¹⁰. З односторонньою різницею неможливо відрізнити правильний градієнт від майже правильного — і саме такі помилки найважче ловити. Центральна різниця, навпаки, коштує вдвічі дорожче: два прямі проходи на параметр замість одного.
Питання 5 / 8

Ти прогнав перевірку градієнта й отримав відносну похибку 3·10⁻³. Що це означає?

Чому так. На float64 із кроком 10⁻⁵ правильна реалізація дає похибку порядку 10⁻¹⁰. Значення 10⁻³ — це вже не чисельний шум, а розбіжність формул. Зменшувати h тут шкідливо: при h < 10⁻⁸ у чисельнику віднімаються майже однакові числа, і похибка округлення починає рости, а не падати.
Питання 6 / 8

Ти навчив мережу двічі — той самий код, ті самі дані, та сама швидкість навчання, різне зерно ініціалізації — і отримав 0.98 та 0.86. Що робити?

Чому так. Поверхня втрат нейромережі має локальні мінімуми, сідлові точки, плато й експоненційно багато симетрій — уже перестановками 8 нейронів кожен мінімум копіюється 40 320 разів. Тому залежність від початкових ваг — властивість задачі, а не баг. Борються з нею розумною ініціалізацією (He, Glorot), адаптивними оптимізаторами й міні-батчами, а не збільшенням швидкості навчання.
Питання 7 / 8

Похідна сигмоїди ніде не перевищує 0.25. Що це означає для мережі з 10 прихованих шарів на сигмоїдах?

Чому так. Проходячи назад крізь кожен шар, градієнт множиться на похідну активації. Десять шарів дають множник близько 0.25¹⁰ ≈ 9.5·10⁻⁷. Верхні шари вчаться, нижні стоять із майже випадковими вагами — це і є затухання градієнта, причина, чому до 2010-х глибокі мережі не вдавалося навчити. ReLU має похідну рівно 1 на всій додатній півосі й тому пропускає градієнт без ослаблення.
Питання 8 / 8

Теорема про універсальну апроксимацію каже, що мережа з одним прихованим шаром наближає будь-яку неперервну функцію. Чому тоді будують глибокі мережі?

Чому так. Теорема стверджує, що потрібний набір ваг існує десь у просторі параметрів — але не дає алгоритму, як його знайти, і не обіцяє, що градієнтний спуск туди дійде. Крім того, ширина може знадобитись астрономічна: є функції, які мережа глибини k представляє поліноміальною кількістю нейронів, а глибини k−1 — лише експоненційною. І окремо: теорема про виразність, а машинне навчання — про узагальнення, і друге з першого не випливає.