Зворотне поширення (Румельхарт, Гінтон та Вільямс, 1986) — алгоритм, що зробив навчання глибоких нейронних мереж практичним. Він застосовує правило диференціювання складеної функції для ефективного обчислення градієнта функції втрат за кожною вагою мережі за один зворотний прохід. Порівняно з наївним підходом збурення кожної ваги окремо, що потребує O(W) прямих проходів для W ваг, зворотне поширення забезпечує обчислення градієнтів за O(W) операцій. Цей алгоритм лежить в основі практично кожної сучасної системи глибокого навчання — від класифікаторів зображень до великих мовних моделей.
Симуляція візуалізує багатошаровий персептрон (MLP) із вхідним шаром, двома прихованими шарами регульованої ширини H і двокласовим виходом. Проходьте крок за кроком прямий прохід (активації течуть зліва направо) і зворотний прохід (δ-сигнали течуть справа наліво), обирайте між активаціями ReLU, tanh і сигмоїдою, перемикайтеся між класифікацією (softmax) і регресією (лінійний) та малюйте власні набори даних включно з XOR, спіралями і «двома місяцями».
Яку проблему вирішує зворотне поширення?
Навчання нейронної мережі означає пошук ваг W, що мінімізують функцію втрат L(W) — наприклад, крос-ентропію для класифікації. Градієнтний спуск потребує обчислення ∂L/∂w для кожної ваги w. Наївна оцінка кінцевими різницями потребувала б W + 1 прямих проходів. Зворотне поширення використовує правило ланцюжка для точного обчислення градієнта за всіма W вагами лише одним прямим і одним зворотним проходом.
Як правило ланцюжка забезпечує роботу зворотного поширення?
Правило ланцюжка: якщо z = f(y) і y = g(x), то dz/dx = (dz/dy)(dy/dx). У мережі з шарами l = 1, …, L зворотний прохід обчислює δ^(l) = (∂L/∂a^(l)) рекурсивно: δ^(l) = (W^(l+1))ᵀ δ^(l+1) ⊙ σ'(z^(l)), де σ' — похідна функції активації. Градієнт ваг тоді: ∂L/∂W^(l) = δ^(l) (a^(l-1))ᵀ.
Що таке проблема затухаючих градієнтів?
При активаціях сигмоїди або tanh похідна σ'(z) щонайбільше 0,25 (сигмоїда) і зменшується до нуля при великих |z|. Множення таких похідних через ланцюжок по L шарах призводить до експоненційного зменшення градієнтів у перших шарах — на (0,25)^L для сигмоїди. При 10 шарах градієнти стискаються приблизно у 10⁶ разів, унеможливлюючи навчання. ReLU (σ'(z) = 1 для z > 0) уникає цього, але може страждати від «мертвих нейронів».
Стохастичний градієнтний спуск (СГС) оновлює ваги після кожного прикладу — швидко, але галасливо. Пакетний GD обчислює точний градієнт по всьому набору даних перед оновленням — стабільно, але повільно. Міні-пакетний GD (стандарт у глибокому навчанні) використовує випадкову підмножину B прикладів на оновлення. Міні-пакет балансує між шумом (що допомагає виходити з локальних мінімумів) та обчислювальною ефективністю (матричні операції над пакетами добре паралелізуються на GPU).
Сигмоїда σ(z) = 1/(1 + e^(–z)) відображає виходи в (0, 1); страждає від затухаючих градієнтів при великих |z|. tanh(z) відображає в (–1, 1) і має сильніші градієнти поблизу нуля, ніж сигмоїда — краща для прихованих шарів. ReLU(z) = max(0, z) є найпопулярнішим сучасним вибором: постійний градієнт 1 для z > 0 (без затухання), обчислювально дешевий, породжує розріджені активації. Leaky ReLU і GELU — поширені варіанти, що усувають проблему «мертвого ReLU».
Швидкість навчання η масштабує кожен крок градієнта: W ← W – η ∂L/∂W. Занадто велика η призводить до коливань або розбіжності; занадто мала — до надзвичайно повільного сходження. Типові значення від η = 10⁻⁴ до 10⁻¹. Повзунок у симуляції використовує логарифмічну шкалу. Сучасні оптимізатори (Adam) адаптують η на параметр за допомогою оцінок моментів, значно зменшуючи потребу в ручному підборі.
Яскравість ребра під час зворотного проходу пропорційна |∂L/∂w| — абсолютному значенню градієнта для цієї ваги. Яскраво яскраві ребра навчаються швидко — їхні ваги оновлюються великим кроком. Темні ребра відповідають майже нульовому градієнту, тобто ці ваги майже не змінюються. У глибоких мережах із сигмоїдними активаціями ранні шари часто виглядають темними (затухаючий градієнт), тоді як пізні яскраво сяють.
Фон полотна розфарбовано за поточним класовим передбаченням мережі в кожній точці: червоні ділянки — клас 0, сині — клас 1, насиченість вказує на впевненість. Після кожного оновлення ваг фон перемальовується прямим проходом у кожному пікселі (на більш грубій сітці для продуктивності). Спостерігаючи за навчанням, можна помітити, як межа рішень скручується й загострюється, іноді застряючи в локальному мінімумі.
П'ять пресетів тестують різні аспекти виразності мережі: «2 Гаусса» (лінійно роздільні згустки) вирішується навіть без прихованих шарів; «XOR» потребує щонайменше одного прихованого шару; «Місяці» і «Спіралі» вимагають нелінійної, неопуклої межі; «3 Кластери» тестує мультикласове розділення з виходом softmax. Спіралі — класичний тест: повнозв'язна мережа лише з двома tanh-нейронами може їх вирішити, тоді як лінійний класифікатор — ні.
|∇| = √(Σ (∂L/∂w)²) — евклідова довжина вектора градієнта за всіма вагами. Великий |∇| означає, що поверхня втрат стрімка і мережа далека від мінімуму; дуже малий — сходження або плато. Моніторинг |∇| допомагає виявити вибухові (|∇| раптово дуже великий) і затухаючі (|∇| ~ 0 на початку навчання) градієнти. Відсікання градієнтів встановлює максимально дозволений |∇| для стабілізації навчання рекурентних мереж.
Так — XOR не є лінійно роздільним: жодна пряма не може розділити чотири комбінації входів, тому персептрон (без прихованих шарів) повністю провалюється. Мережа хоча б з одним прихованим нейроном з нелінійною активацією здатна точно навчитись XOR. Доповідь Румельхарта та ін. (1986) використовувала XOR як ключову демонстрацію того, що зворотне поширення дає прихованим одиницям розвивати корисні внутрішні представлення. При η = 0,1 і tanh мережа тут зазвичай вирішує XOR за кілька сотень кроків СГС.