Зворотне поширення помилки (Backpropagation)
Зворотне поширення помилки є основним алгоритмом для навчання штучних нейронних мереж. Він ефективно обчислює градієнт функції втрат щодо ваг і зміщень мережі, дозволяючи ітеративно оновлювати ваги для мінімізації помилок прогнозування.
Зворотне поширення помилки (англ. backpropagation, скорочення від 'backward propagation of errors') є фундаментальним алгоритмом, що дозволяє штучним нейронним мережам навчатися. Він обчислює градієнт визначеної функції втрат відносно кожної ваги та зміщення в мережі. Ця інформація про градієнт потім подається в оптимізаційний алгоритм (наприклад, градієнтний спуск) для систематичного коригування параметрів мережі. Мета полягає в мінімізації розбіжності між прогнозами мережі та фактичними цільовими значеннями. Процес природно включає два проходи: прямий прохід для генерації прогнозів і зворотний прохід для поширення сигналів помилки та обчислення градієнтів.
Основні кроки:
- Прямий прохід: Вхідні дані проходять через мережу, шар за шаром. Кожен нейрон застосовує зважену суму своїх входів, додає зміщення та пропускає результат через функцію активації для отримання виходу.
- Обчислення втрат: Функція втрат вимірює помилку між кінцевим виходом мережі та істинними значеннями.
- Зворотний прохід (Обчислення градієнта): Починаючи з вихідного шару, помилка поширюється назад. Використовуючи правило ланцюга диференціювання, алгоритм обчислює, скільки кожна вага та зміщення зробили внесок у загальну помилку (тобто градієнт).
- Оновлення параметрів: Оптимізаційний алгоритм використовує ці обчислені градієнти для коригування ваг і зміщень, переміщуючи їх у напрямку, що зменшує втрати.
Цей цикл повторюється, дозволяючи мережі поступово вдосконалювати свої внутрішні параметри та підвищувати точність прогнозування.
graph LR
Center["Зворотне поширення помилки (Backpropagation)"]:::main
Pre_linear_algebra["linear-algebra"]:::pre --> Center
click Pre_linear_algebra "/terms/linear-algebra"
Rel_gradient_descent["gradient-descent"]:::related -.-> Center
click Rel_gradient_descent "/terms/gradient-descent"
Rel_deep_learning["deep-learning"]:::related -.-> Center
click Rel_deep_learning "/terms/deep-learning"
classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
linkStyle default stroke:#4b5563,stroke-width:2px;
🧒 Простими словами
Уявіть навчання нейронної мережі як викладання студенту складного предмета. Студент намагається відповісти на запитання (прямий прохід), отримує оцінку (втрати), і ви точно кажете йому, *як* він помилився і наскільки щодо кожної концепції, яку він використовував (зворотний прохід). Потім він коригує своє розуміння цих концепцій (оновлення ваг), щоб наступного разу відповісти краще. Зворотне поширення помилки — це саме цей точний механізм зворотного зв'язку для ШІ, що дозволяє йому навчатися, виправляючи власні помилки.
🤓 Expert Deep Dive
Зворотне поширення помилки — це ефективний алгоритм для обчислення градієнта $
abla_{\theta} L(\theta; D)$ функції втрат $L$ відносно параметрів $\theta$ (ваг $W$ та зміщень $b$) нейронної мережі, враховуючи набір даних $D = \{(x^{(i)}, y^{(i)})\}$. Він використовує правило ланцюга диференціювання для розкладання обчислення градієнта на послідовність локальних операцій, що виконуються шар за шаром. Нехай $a^{(l)}$ позначає вектор активації шару $l$, а $z^{(l)} = W^{(l)}a^{(l-1)} + b^{(l)}$ — вектор перед активацією. Вихід шару $l$ — це $a^{(l)} = f(z^{(l)})$, де $f$ — функція активації. Втрати $L$ зазвичай є функцією кінцевого виходу $a^{(L)}$ та цільового значення $y$. Зворотний прохід обчислює термін помилки $\delta^{(l)}$ для кожного шару $l$, починаючи з вихідного шару. Для вихідного шару $L$, $\delta^{(L)} = \frac{\partial L}{\partial a^{(L)}} \odot f'(z^{(L)})$, де $\odot$ позначає поелементне множення, а $f'$ — похідну функції активації. Для прихованих шарів $l < L$, термін помилки обчислюється рекурсивно: $\delta^{(l)} = ((W^{(l+1)})^T \delta^{(l+1)}) \odot f'(z^{(l)})$. Градієнти втрат відносно параметрів шару $l$ потім виводяться як $
abla_{W^{(l)}} L = \delta^{(l)} (a^{(l-1)})^T$ та $
abla_{b^{(l)}} L = \delta^{(l)}$. Ці градієнти є необхідними вхідними даними для оптимізаційних алгоритмів, таких як стохастичний градієнтний спуск (SGD) або Adam, які оновлюють $\theta$ для мінімізації $L$.