Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Зворотне Поширення | Нейронна Мережа з Нуля
Вступ до нейронних мереж

bookЗворотне Поширення

Зворотне поширення (backprop) — це процес обчислення того, як функція втрат змінюється відносно кожного параметра в мережі. Мета — оновити параметри у напрямку, який зменшує втрати.

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

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

  1. Виконати пряме поширення;
  2. Обчислити похідну втрат відносно попередньо-активаційного виходу;
  3. Поширити цю похідну назад через шари, використовуючи правило ланцюга;
  4. Обчислити градієнти для ваг і зсувів, щоб оновити їх.
Note
Примітка

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

Позначення

Для кращого розуміння скористаємося такими позначеннями:

  • WlW^l — матриця ваг шару ll;
  • blb^l — вектор зсувів шару ll;
  • zlz^l — вектор попередньо-активаційних значень шару ll;
  • ala^l — вектор активацій шару ll;

Відповідно, якщо a0a^0 дорівнює xx (вхідні дані), пряме поширення у перцептроні з n шарами можна описати наступною послідовністю операцій:

a0=x,......z1=W1a0+b1,zl=Wlal1+bl,zn=Wnan1+bn,a1=f1(z1),al=fl(zl),an=fn(zn),......y^=an.\begin{aligned} a^0 &= x, & &... & &...\\ z^1 &= W^1 a^0 + b^1, & z^l &= W^l a^{l-1} + b^l, & z^n &= W^n a^{n-1} + b^n,\\ a^1 &= f^1(z^1), & a^l &= f^l(z^l), & a^n &= f^n(z^n),\\ &... & &... & \hat y &= a^n. \end{aligned}

Щоб математично описати зворотне поширення помилки, вводимо такі позначення:

  • dalda^l: похідна функції втрат за активаціями на шарі ll;
  • dzldz^l: похідна функції втрат за передактиваціями на шарі ll (до застосування функції активації);
  • dWldW^l: похідна функції втрат за вагами на шарі ll;
  • dbldb^l: похідна функції втрат за зміщеннями на шарі ll.

Обчислення градієнтів для вихідного шару

На фінальному шарі nn спочатку обчислюємо градієнт функції втрат за активаціями вихідного шару, danda^n. Далі, використовуючи правило ланцюга, обчислюємо градієнт функції втрат за передактиваціями вихідного шару:

dzn=danfn(zn)dz^n = da^n \odot f'^n(z^n)
Note
Примітка

Символ \odot позначає покомпонентне множення. Оскільки ми працюємо з векторами та матрицями, звичайний символ множення \cdot позначає скалярний добуток. fnf'^n — це похідна функції активації вихідного шару.

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

Після отримання dzn\text d z^n обчислюємо градієнти для ваг і зсувів:

dWn=dzn(an1)Tdbn=dzn\begin{aligned} dW^n &= dz^n \cdot (a^{n-1})^T\\ db^n &= dz^n \end{aligned}

де (an1)T(a^{n-1})^Tтранспонований вектор активації з попереднього шару. Якщо початковий вектор має розмір nneurons×1n_{neurons} \times 1, то транспонований — 1×nneurons1 \times n_{neurons}.

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

dan1=(Wn)Tdznda^{n-1} = (W^n)^T \cdot dz^n

Поширення градієнтів до прихованих шарів

Для кожного прихованого шару ll процедура однакова. Маючи dalda^l:

  1. Обчислити похідну функції втрат за попередніми активаціями;
  2. Обчислити градієнти для ваг і зсувів;
  3. Обчислити dal1da^{l-1} для подальшого поширення похідної назад.
dzl=dalfl(zl)dWl=dzl(al1)Tdbl=dzldal1=(Wl)Tdzl\begin{aligned} dz^l &= da^l \odot f'^l(z^l)\\ dW^l &= dz^l \cdot (a^{l-1})^T\\ db^l &= dz^l\\ da^{l-1} &= (W^l)^T \cdot dz^l \end{aligned}

Цей крок повторюється, доки ми не досягнемо вхідного шару.

Оновлення ваг і зміщень

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

Wl=WlαdWlbl=blαdbl\begin{aligned} W^l &= W^l - \alpha \cdot dW^l\\ b^l &= b^l - \alpha \cdot db^l \end{aligned}

де α\alpha — це швидкість навчання, яка визначає, наскільки сильно ми коригуємо параметри.

question mark

Під час зворотного поширення, як нейронна мережа оновлює свої ваги та зміщення для мінімізації функції втрат?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 7

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 4

bookЗворотне Поширення

Свайпніть щоб показати меню

Зворотне поширення (backprop) — це процес обчислення того, як функція втрат змінюється відносно кожного параметра в мережі. Мета — оновити параметри у напрямку, який зменшує втрати.

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

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

  1. Виконати пряме поширення;
  2. Обчислити похідну втрат відносно попередньо-активаційного виходу;
  3. Поширити цю похідну назад через шари, використовуючи правило ланцюга;
  4. Обчислити градієнти для ваг і зсувів, щоб оновити їх.
Note
Примітка

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

Позначення

Для кращого розуміння скористаємося такими позначеннями:

  • WlW^l — матриця ваг шару ll;
  • blb^l — вектор зсувів шару ll;
  • zlz^l — вектор попередньо-активаційних значень шару ll;
  • ala^l — вектор активацій шару ll;

Відповідно, якщо a0a^0 дорівнює xx (вхідні дані), пряме поширення у перцептроні з n шарами можна описати наступною послідовністю операцій:

a0=x,......z1=W1a0+b1,zl=Wlal1+bl,zn=Wnan1+bn,a1=f1(z1),al=fl(zl),an=fn(zn),......y^=an.\begin{aligned} a^0 &= x, & &... & &...\\ z^1 &= W^1 a^0 + b^1, & z^l &= W^l a^{l-1} + b^l, & z^n &= W^n a^{n-1} + b^n,\\ a^1 &= f^1(z^1), & a^l &= f^l(z^l), & a^n &= f^n(z^n),\\ &... & &... & \hat y &= a^n. \end{aligned}

Щоб математично описати зворотне поширення помилки, вводимо такі позначення:

  • dalda^l: похідна функції втрат за активаціями на шарі ll;
  • dzldz^l: похідна функції втрат за передактиваціями на шарі ll (до застосування функції активації);
  • dWldW^l: похідна функції втрат за вагами на шарі ll;
  • dbldb^l: похідна функції втрат за зміщеннями на шарі ll.

Обчислення градієнтів для вихідного шару

На фінальному шарі nn спочатку обчислюємо градієнт функції втрат за активаціями вихідного шару, danda^n. Далі, використовуючи правило ланцюга, обчислюємо градієнт функції втрат за передактиваціями вихідного шару:

dzn=danfn(zn)dz^n = da^n \odot f'^n(z^n)
Note
Примітка

Символ \odot позначає покомпонентне множення. Оскільки ми працюємо з векторами та матрицями, звичайний символ множення \cdot позначає скалярний добуток. fnf'^n — це похідна функції активації вихідного шару.

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

Після отримання dzn\text d z^n обчислюємо градієнти для ваг і зсувів:

dWn=dzn(an1)Tdbn=dzn\begin{aligned} dW^n &= dz^n \cdot (a^{n-1})^T\\ db^n &= dz^n \end{aligned}

де (an1)T(a^{n-1})^Tтранспонований вектор активації з попереднього шару. Якщо початковий вектор має розмір nneurons×1n_{neurons} \times 1, то транспонований — 1×nneurons1 \times n_{neurons}.

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

dan1=(Wn)Tdznda^{n-1} = (W^n)^T \cdot dz^n

Поширення градієнтів до прихованих шарів

Для кожного прихованого шару ll процедура однакова. Маючи dalda^l:

  1. Обчислити похідну функції втрат за попередніми активаціями;
  2. Обчислити градієнти для ваг і зсувів;
  3. Обчислити dal1da^{l-1} для подальшого поширення похідної назад.
dzl=dalfl(zl)dWl=dzl(al1)Tdbl=dzldal1=(Wl)Tdzl\begin{aligned} dz^l &= da^l \odot f'^l(z^l)\\ dW^l &= dz^l \cdot (a^{l-1})^T\\ db^l &= dz^l\\ da^{l-1} &= (W^l)^T \cdot dz^l \end{aligned}

Цей крок повторюється, доки ми не досягнемо вхідного шару.

Оновлення ваг і зміщень

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

Wl=WlαdWlbl=blαdbl\begin{aligned} W^l &= W^l - \alpha \cdot dW^l\\ b^l &= b^l - \alpha \cdot db^l \end{aligned}

де α\alpha — це швидкість навчання, яка визначає, наскільки сильно ми коригуємо параметри.

question mark

Під час зворотного поширення, як нейронна мережа оновлює свої ваги та зміщення для мінімізації функції втрат?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 7
some-alt