Використання похідних у нейронних мережах призначено для тренувального процесу, який називається зворотним розмноженням . Ця методика використовує спуск градієнта , щоб знайти оптимальний набір параметрів моделі, щоб мінімізувати функцію втрат. У вашому прикладі ви повинні використовувати похідне сигмоїди, оскільки це активація, яку використовують ваші окремі нейрони.
Функція втрат
Суть машинного навчання полягає в оптимізації функції затрат, щоб ми могли мінімізувати або максимально використовувати якусь цільову функцію. Зазвичай це називається функцією втрат або витрат. Зазвичай ми хочемо мінімізувати цю функцію. Функція витрат, , пов'язує певну суму штрафу на основі помилок, що виникають при передачі даних через вашу модель, як функцію параметрів моделі.C
Давайте розглянемо приклад, де ми намагаємось позначити, чи містить зображення кішку чи собаку. Якщо у нас є досконала модель, ми можемо надати моделі картинку, і вона підкаже, чи це кішка чи собака. Однак жодна модель не є ідеальною, і вона буде робити помилки.
Коли ми навчаємо нашу модель, щоб мати можливість виводити значення з вхідних даних, ми хочемо мінімізувати кількість помилок, які вона робить. Тому ми використовуємо навчальний набір, ці дані містять багато зображень собак та котів, і ми маємо основну мітку правди, пов’язану з цим зображенням. Кожен раз, коли ми виконуємо навчальну ітерацію моделі, ми обчислюємо вартість (кількість помилок) моделі. Ми хочемо мінімізувати ці витрати.
Існує багато функцій витрат, кожен з яких служить власному призначенню. Загальна функція витрат, яка використовується, - це квадратична вартість, яка визначається як
.C=1N∑Ni=0(y^−y)2
Це квадрат різниці між передбачуваною міткою та міткою основної істини для зображень, над якими ми тренувались. Ми хочемо якось мінімізувати це.N
Мінімізація функції втрат
Насправді більшість машинного навчання - це просто сімейство фреймворків, які здатні визначити розподіл шляхом мінімізації деякої функції витрат. Питання, яке ми можемо задати - "як ми можемо мінімізувати функцію"?
Зведемо до мінімуму наступну функцію
.y=x2−4x+6
Якщо ми побудуємо це, ми можемо побачити, що при є мінімум . Для цього аналітично ми можемо взяти похідну від цієї функції якx=2
dydx=2x−4=0
.x=2
Однак часто знайти глобальний мінімум аналітично не представляється можливим. Тому замість цього ми використовуємо деякі методи оптимізації. Тут також існує багато різних способів, таких як: Ньютон-Рафсон, пошук по сітці тощо. Серед них градієнтне спуск . Це методика, яку використовують нейронні мережі.
Спуск градієнта
Давайте скористаємося чудово використовуваною аналогією, щоб зрозуміти це. Уявіть проблему мінімізації 2D. Це еквівалент перебування на гірському поході в пустелі. Ви хочете повернутися в село, яке ви знаєте, що знаходиться в нижній точці. Навіть якщо ви не знаєте кардинальних напрямків села. Все, що вам потрібно зробити, - це безперервно проїхати найкрутішим шляхом вниз, і ви зрештою дістанетесь до села. Так ми спустимось вниз по поверхні виходячи з крутості схилу.
Візьмемо нашу функцію
y=x2−4x+6
визначимо для якого y мінімізовано. Алгоритм спуску градієнта спочатку говорить, що ми виберемо випадкове значення для x . Будемо ініціалізувати при x = 8 . Тоді алгоритм буде робити наступні ітеративно, поки ми не досягнемо конвергенції.xyxx=8
xnew=xold−νdydx
де - рівень навчання, ми можемо встановити це на будь-яке значення, яке нам сподобається. Однак є розумний спосіб вибрати це. Занадто великий, і ми ніколи не досягнемо свого мінімального значення, і занадто великий, ми витрачатимемо так багато часу, перш ніж потрапити. Це аналогічно розміру кроків, якими ви хочете спуститись крутим схилом. Маленькими кроками, і ви помрете на горі, ви ніколи не зійдете. Занадто великий крок, і ви ризикуєте перестрілити село і закінчити інший бік гори. Похідна - це засіб, за допомогою якого ми рухаємось по цьому схилу до нашого мінімуму.ν
dydx=2x−4
ν=0.1
Ітерація 1:
x n e w = 6,8 - 0,1 ( 2 ∗ 6,8 - 4 ) = 5,84 x n e w = 5,84 - 0,1 ( 2 ∗ 5,84 - 4 ) = 5,07 x n e w = 5,07 - 0,1xnew=8−0.1(2∗8−4)=6.8
xnew=6.8−0.1(2∗6.8−4)=5.84
xnew=5.84−0.1(2∗5.84−4)=5.07
x n e w = 4.45 - 0.1 ( 2 ∗ 4.45 - 4 ) = 3.96 x n e w = 3.96 - 0.1 ( 2 ∗ 3.96 - 4 ) = 3.57 x n e w = 3.57 - 0,1 ( 2 ∗ 3,57 - 4 )xnew=5.07−0.1(2∗5.07−4)=4.45
xnew=4.45−0.1(2∗4.45−4)=3.96
xnew=3.96−0.1(2∗3.96−4)=3.57
x n e w = 3,25 - 0,1 ( 2 ∗ 3,25 - 4 ) = 3,00 x n e w = 3,00 - 0,1 ( 2 ∗ 3,00 - 4 ) = 2,80 x n e w = 2,80 - 0,1 ( 2 ∗ 2,80 - 4 ) = 2,64 x n e w =xnew=3.57−0.1(2∗3.57−4)=3.25
xnew=3.25−0.1(2∗3.25−4)=3.00
xnew=3.00−0.1(2∗3.00−4)=2.80
xnew=2.80−0.1(2∗2.80−4)=2.64
x n e w = 2,51 - 0,1 ( 2 ∗ n e w = 2,41 - 0,1 ( 2 ∗ 2,41 - 4 ) = 2,32 x n e w = 2,32 - 0,1 ( 2 ∗ 2,32xnew=2.64−0.1(2∗2.64−4)=2.51
x - 4 ) = 2,26 x n e w = 2,26 - 0,1 ( 2 ∗ 2,26 - 4 ) = 2,21 x n e w = 2,21 - 0,1 ( 2 ∗ 2,21xnew=2.51−0.1(2∗2.51−4)=2.41
xnew=2.41−0.1(2∗2.41−4)=2.32
xnew=2.32−0.1(2∗2.32−4)=2.26
xnew=2.26−0.1(2∗2.26−4)=2.21
x n e w = 2,16 - 0,1 ( 2 ∗ 2,16 - 4 ) = 2,13 x nxnew=2.21−0.1(2∗2.21−4)=2.16
хн е ш= 2,16 - 0,1 ( 2 ∗ 2,16 - 4 ) = 2,13
x n e w =2,10-0,1(2∗2,10-4)=2,08 x n e w =2,08-0,1(2∗2,08-4)=2,06 x n e w =2,06-0,1(хн е ш= 2,13 - 0,1 ( 2 ∗ 2,13 - 4 ) = 2,10
хн е ш= 2,10 - 0,1 ( 2 ∗ 2,10 - 4 ) = 2,08
хн е ш= 2,08 - 0,1 ( 2 ∗ 2,08 - 4 ) = 2,06
хн е ш=2.06−0.1(2∗2.06−4)=2.05
xnew=2.05−0.1(2∗2.05−4)=2.04
xnew=2.04−0.1(2∗2.04−4)=2.03
xnew=2.03−0.1(2∗2.03−4)=2.02
xnew=2.02−0.1(2∗2.02−4)=2.02
xnew=2.02−0.1(2∗2.02−4)=2.01
xnew=2.01−0.1(2∗2.01−4)=2.01
xnew=2.01−0.1(2∗2.01−4)=2.01
xnew=2.01−0.1(2∗2.01−4)=2.00
xnew=2.00−0.1(2∗2.00−4)=2.00
xnew=2.00−0.1(2∗2.00−4)=2.00
xnew=2.00−0.1(2∗2.00−4)=2.00
xnew=2.00−0.1(2∗2.00−4)=2.00
x=2
Застосовується для нейронних мереж
xy^
σ(z)=11+exp(z)
y^(wTx)=11+exp(wTx+b)
wxb
C=12N∑Ni=0(y^−y)2
Як тренувати нейронну мережу?
CN
C=12N∑Ni(y^−y)2
y^yw
∂C∂w=∂C∂y^∂y^∂w
∂С∂у^= у^- у
у^= σ( шТх )∂σ( z)∂z= σ( z) ( 1 - σ( z) )
∂у^∂ш= 11 + e x p ( шТx + b )( 1 - 11 + e x p ( шТx + b )).
Тож ми можемо оновлювати ваги за допомогою градієнтного спуску як
шн е ш= шo l d- η∂С∂ш
де η - це рівень навчання.