Рольове похідне від сигмоподібної функції в нейронних мережах


18

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

Спочатку я будую сигмоподібну функцію та похідну всіх точок з визначення за допомогою python. Яка саме роль цієї похідної? введіть тут опис зображення

import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def derivative(x, step):
    return (sigmoid(x+step) - sigmoid(x)) / step

x = np.linspace(-10, 10, 1000)

y1 = sigmoid(x)
y2 = derivative(x, 0.0000000000001)

plt.plot(x, y1, label='sigmoid')
plt.plot(x, y2, label='derivative')
plt.legend(loc='upper left')
plt.show()

2
Якщо у вас є додаткові запитання, не соромтесь задавати питання
JahKnows

Відповіді:


23

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


Функція втрат

Суть машинного навчання полягає в оптимізації функції затрат, щоб ми могли мінімізувати або максимально використовувати якусь цільову функцію. Зазвичай це називається функцією втрат або витрат. Зазвичай ми хочемо мінімізувати цю функцію. Функція витрат, , пов'язує певну суму штрафу на основі помилок, що виникають при передачі даних через вашу модель, як функцію параметрів моделі.C

Давайте розглянемо приклад, де ми намагаємось позначити, чи містить зображення кішку чи собаку. Якщо у нас є досконала модель, ми можемо надати моделі картинку, і вона підкаже, чи це кішка чи собака. Однак жодна модель не є ідеальною, і вона буде робити помилки.

Коли ми навчаємо нашу модель, щоб мати можливість виводити значення з вхідних даних, ми хочемо мінімізувати кількість помилок, які вона робить. Тому ми використовуємо навчальний набір, ці дані містять багато зображень собак та котів, і ми маємо основну мітку правди, пов’язану з цим зображенням. Кожен раз, коли ми виконуємо навчальну ітерацію моделі, ми обчислюємо вартість (кількість помилок) моделі. Ми хочемо мінімізувати ці витрати.

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

.C=1Ni=0N(y^y)2

Це квадрат різниці між передбачуваною міткою та міткою основної істини для зображень, над якими ми тренувались. Ми хочемо якось мінімізувати це.N

Мінімізація функції втрат

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

Зведемо до мінімуму наступну функцію

.y=x24x+6

Якщо ми побудуємо це, ми можемо побачити, що при є мінімум . Для цього аналітично ми можемо взяти похідну від цієї функції якx=2

dydx=2x4=0

.x=2

Однак часто знайти глобальний мінімум аналітично не представляється можливим. Тому замість цього ми використовуємо деякі методи оптимізації. Тут також існує багато різних способів, таких як: Ньютон-Рафсон, пошук по сітці тощо. Серед них градієнтне спуск . Це методика, яку використовують нейронні мережі.

Спуск градієнта

Давайте скористаємося чудово використовуваною аналогією, щоб зрозуміти це. Уявіть проблему мінімізації 2D. Це еквівалент перебування на гірському поході в пустелі. Ви хочете повернутися в село, яке ви знаєте, що знаходиться в нижній точці. Навіть якщо ви не знаєте кардинальних напрямків села. Все, що вам потрібно зробити, - це безперервно проїхати найкрутішим шляхом вниз, і ви зрештою дістанетесь до села. Так ми спустимось вниз по поверхні виходячи з крутості схилу.

Візьмемо нашу функцію

y=x24x+6

визначимо для якого y мінімізовано. Алгоритм спуску градієнта спочатку говорить, що ми виберемо випадкове значення для x . Будемо ініціалізувати при x = 8 . Тоді алгоритм буде робити наступні ітеративно, поки ми не досягнемо конвергенції.xyxx=8

xnew=xoldνdydx

де - рівень навчання, ми можемо встановити це на будь-яке значення, яке нам сподобається. Однак є розумний спосіб вибрати це. Занадто великий, і ми ніколи не досягнемо свого мінімального значення, і занадто великий, ми витрачатимемо так багато часу, перш ніж потрапити. Це аналогічно розміру кроків, якими ви хочете спуститись крутим схилом. Маленькими кроками, і ви помрете на горі, ви ніколи не зійдете. Занадто великий крок, і ви ризикуєте перестрілити село і закінчити інший бік гори. Похідна - це засіб, за допомогою якого ми рухаємось по цьому схилу до нашого мінімуму.ν

dydx=2x4

ν=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=80.1(284)=6.8
xnew=6.80.1(26.84)=5.84
xnew=5.840.1(25.844)=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.070.1(25.074)=4.45
xnew=4.450.1(24.454)=3.96
xnew=3.960.1(23.964)=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.570.1(23.574)=3.25
xnew=3.250.1(23.254)=3.00
xnew=3.000.1(23.004)=2.80
xnew=2.800.1(22.804)=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.640.1(22.644)=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.510.1(22.514)=2.41
xnew=2.410.1(22.414)=2.32
xnew=2.320.1(22.324)=2.26
xnew=2.260.1(22.264)=2.21
x n e w = 2,16 - 0,1 ( 2 2,16 - 4 ) = 2,13 x nxnew=2.210.1(22.214)=2.16
хнеш=2.16-0,1(22.16-4)=2.13
x n e w =2,10-0,1(22,10-4)=2,08 x n e w =2,08-0,1(22,08-4)=2,06 x n e w =2,06-0,1(хнеш=2.13-0,1(22.13-4)=2.10
хнеш=2.10-0,1(22.10-4)=2.08
хнеш=2.08-0,1(22.08-4)=2.06
xnew=2.060.1(22.064)=2.05
xnew=2.050.1(22.054)=2.04
xnew=2.040.1(22.044)=2.03
xnew=2.030.1(22.034)=2.02
xnew=2.020.1(22.024)=2.02
xnew=2.020.1(22.024)=2.01
xnew=2.010.1(22.014)=2.01
xnew=2.010.1(22.014)=2.01
xnew=2.010.1(22.014)=2.00
xnew=2.000.1(22.004)=2.00
xnew=2.000.1(22.004)=2.00
xnew=2.000.1(22.004)=2.00
xnew=2.000.1(22.004)=2.00

x=2


Застосовується для нейронних мереж

xy^

σ(z)=11+exp(z)

y^(wTx)=11+exp(wTx+b)

wxb

C=12Ni=0N(y^y)2

Як тренувати нейронну мережу?

CN

C=12NiN(y^y)2

y^yw

Cw=Cy^y^w

Су^=у^-у

у^=σ(шТх)σ(z)z=σ(z)(1-σ(z))

у^ш=11+ехp(шТх+б)(1-11+ехp(шТх+б)).

Тож ми можемо оновлювати ваги за допомогою градієнтного спуску як

шнеш=шолг-ηСш

де η - це рівень навчання.


2
please tell me why is this process not so nicely described in books? Do you have a blog? What materials for learning neural networks do you recommend? I have test data and I want to train it. Can I draw a function that I will minimize? I would like to visualize this process to better understand it.
lukassz

Can you explain backpropagation in this simple way?
lukassz

1
Amazing Answer...(+1)
Aditya

1
Backprop is also similar to what JahKnows has Explained above... Its just the gradient is carried all the way to the inputs right from the outputs.. A quick google search will make this clear.. Also the same goes every other activation functions also..
Aditya

1
@lukassz, notice that his equation is the same as the one I have for the weight update in the before last equation. Cw=(y^y)derivative of sigmoid. He uses the same cost function as me, dont forget that you need to take the derivative of the loss function too, that becomes y^y, where y^ are the predicted labels and y are the ground truth labels.
JahKnows

2

During the phase where the neural network generates its prediction, it feeds the input forward through the network. For each layer, the layer's input X goes first through an affine transformation WX+b and then is passed through the sigmoid function σ(WX+b).

In order to train the network, the output y^ is then compared to the expected output (or label) y through a cost function L(y,y^)=L(y,σ(WX+b)). The goal of the whole training procedure is to minimize that cost function. In order to do that, a technique called gradient descent is performed which calculates how we should change W and b so that the cost reduces.

Gradient Descent requires calculating the derivative of the cost function w.r.t W and b. In order to do that we must apply the chain rule, because the derivative we need to calculate is a composition of two functions. As dictated by the chain rule we must calculate the derivative of the sigmoid function.

One of the reasons that the sigmoid function is popular with neural networks, is because its derivative is easy to compute.


1

In simple words:

Derivative shows neuron's ability to learn on particular input.

For example if input is 0 or 1 or -2, the derivative (the "learning ability") is high and back-propagation will improve neuron's weights for this sample dramatically.

On other hand, if input is 20, the the derivative will be very close to 0. It means that back-propagation on this sample will not "teach" this neuron to produce a better result.

The things above are valid for a single sample.

Let's look at the bigger picture, for all samples in the training set. Here we have several situations:

  • If derivative is 0 for all samples in your training set AND neuron always produces wrong results - it means the neuron is saturated (dumb) and will not improve.
  • If derivative is 0 for all samples in your training set AND neuron always produces correct results - it means the neuron have been studying really well and already as smart as it could (side note: this case is good but it may indicate potential overfitting, which is not good)

  • If derivative is 0 on some samples, non-0 on other samples AND neuron produces mixed results - it indicates that this neuron doing some good work and potentially may improve from further training (though not necessarily as it depends on other neurons and training data you have)

So, when you are looking at the derivative plot, you can see how much the neuron prepared to learn and absorb the new knowledge, given a particular input.


0

The derivative you see here is important in neural networks. It's the reason why people generally prefer something else such as rectified linear unit.

Do you see the derivative drop for the two ends? What if your network is on the very left side, but it needs to move to the right side? Imagine you're on -10.0 but you want 10.0. The gradient will be too small for your network to converge quickly. We don't want to wait, we want quicker convergence. RLU doesn't have this problem.

We call this problem "Neural Network Saturation".

Please see https://www.quora.com/What-is-special-about-rectifier-neural-units-used-in-NN-learning

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.