Đạo hàm vai trò của chức năng sigmoid trong mạng lưới thần kinh


18

Tôi cố gắng hiểu vai trò của đạo hàm của hàm sigmoid trong mạng lưới thần kinh. nhập mô tả hình ảnh ở đây

Đầu tiên tôi vẽ đồ thị hàm sigmoid và đạo hàm của tất cả các điểm từ định nghĩa bằng python. Vai trò của đạo hàm này chính xác là gì? nhập mô tả hình ảnh ở đây

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
Nếu bạn có thêm câu hỏi đừng ngần ngại hỏi
JahKnows

Câu trả lời:


23

Việc sử dụng các dẫn xuất trong mạng lưới thần kinh là cho quá trình đào tạo được gọi là backpropagation . Kỹ thuật này sử dụng giảm độ dốc để tìm một tập hợp các tham số mô hình tối ưu để giảm thiểu hàm mất. Trong ví dụ của bạn, bạn phải sử dụng đạo hàm của một sigmoid bởi vì đó là kích hoạt mà các nơ-ron riêng lẻ của bạn đang sử dụng.


Hàm mất

Bản chất của học máy là tối ưu hóa một hàm chi phí sao cho chúng ta có thể giảm thiểu hoặc tối đa hóa một số hàm mục tiêu. Điều này thường được gọi là tổn thất hoặc chi phí funtion. Chúng tôi thường muốn giảm thiểu chức năng này. Hàm chi phí, , liên kết một số hình phạt dựa trên các lỗi kết quả khi truyền dữ liệu qua mô hình của bạn dưới dạng hàm của các tham số mô hình.C

Hãy xem ví dụ mà chúng ta cố gắng dán nhãn xem hình ảnh có chứa mèo hay chó không. Nếu chúng ta có một mô hình hoàn hảo, chúng ta có thể cung cấp cho mô hình một bức tranh và nó sẽ cho chúng ta biết đó là mèo hay chó. Tuy nhiên, không có mô hình nào là hoàn hảo và nó sẽ phạm sai lầm.

Khi chúng tôi đào tạo mô hình của mình để có thể suy ra ý nghĩa từ dữ liệu đầu vào, chúng tôi muốn giảm thiểu số lượng lỗi mà nó gây ra. Vì vậy, chúng tôi sử dụng một bộ huấn luyện, dữ liệu này chứa rất nhiều hình ảnh của chó và mèo và chúng tôi có nhãn sự thật mặt đất liên quan đến hình ảnh đó. Mỗi lần chúng tôi chạy một vòng lặp đào tạo của mô hình, chúng tôi tính toán chi phí (số lượng sai lầm) của mô hình. Chúng tôi sẽ muốn giảm thiểu chi phí này.

Nhiều chức năng chi phí tồn tại mỗi phục vụ mục đích riêng của họ. Hàm chi phí phổ biến được sử dụng là chi phí bậc hai được định nghĩa là

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

Đây là hình vuông của sự khác biệt giữa nhãn dự đoán và nhãn sự thật mặt đất cho hình ảnh mà chúng tôi đã đào tạo. Chúng tôi sẽ muốn giảm thiểu điều này theo một cách nào đó.N

Giảm thiểu chức năng mất

Thật vậy, hầu hết học máy chỉ đơn giản là một nhóm các khung có khả năng xác định phân phối bằng cách giảm thiểu một số hàm chi phí. Câu hỏi chúng ta có thể hỏi là "làm thế nào chúng ta có thể giảm thiểu chức năng"?

Hãy giảm thiểu các chức năng sau

.y=x24x+6

Nếu chúng ta vẽ biểu đồ này, chúng ta có thể thấy rằng có tối thiểu là . Để làm điều này một cách phân tích, chúng ta có thể lấy đạo hàm của hàm này làx=2

dydx=2x4=0

.x=2

Tuy nhiên, thường thì việc tìm kiếm một mức tối thiểu toàn cầu về mặt phân tích là không khả thi. Vì vậy, thay vì chúng tôi sử dụng một số kỹ thuật tối ưu hóa. Ở đây cũng có nhiều cách khác nhau tồn tại như: Newton-Raphson, tìm kiếm lưới, v.v ... Trong số này có độ dốc giảm dần . Đây là kỹ thuật được sử dụng bởi các mạng lưới thần kinh.

Xuống dốc

Chúng ta hãy sử dụng một sự tương tự được sử dụng nổi tiếng để hiểu điều này. Hãy tưởng tượng một vấn đề tối thiểu hóa 2D. Điều này tương đương với việc đi bộ trên núi ở nơi hoang dã. Bạn muốn quay trở lại ngôi làng mà bạn biết là ở điểm thấp nhất. Ngay cả khi bạn không biết các hướng hồng y của làng. Tất cả những gì bạn cần làm là liên tục đi theo con đường dốc nhất, và cuối cùng bạn sẽ đến làng. Vì vậy, chúng tôi sẽ xuống bề mặt dựa trên độ dốc của độ dốc.

Hãy thực hiện chức năng của chúng tôi

y=x24x+6

chúng ta sẽ xác định y được giảm thiểu. Thuật toán gốc dốc trước tiên cho biết chúng ta sẽ chọn một giá trị ngẫu nhiên cho x . Hãy để chúng tôi khởi tạo tại x = 8 . Sau đó, thuật toán sẽ thực hiện các bước lặp sau cho đến khi chúng ta đạt được sự hội tụ.xyxx=8

xnew=xoldνdydx

Trong đó là tỷ lệ học tập, chúng ta có thể đặt giá trị này thành bất kỳ giá trị nào chúng ta muốn. Tuy nhiên có một cách thông minh để chọn điều này. Quá lớn và chúng tôi sẽ không bao giờ đạt được giá trị tối thiểu của chúng tôi và quá lớn chúng tôi sẽ lãng phí rất nhiều thời gian trước khi chúng tôi đến đó. Nó tương tự như kích thước của các bước bạn muốn xuống dốc cao. Bước nhỏ và bạn sẽ chết trên núi, bạn sẽ không bao giờ xuống được. Quá lớn của một bước và bạn có nguy cơ bắn vào ngôi làng và kết thúc ở phía bên kia của ngọn núi. Đạo hàm là phương tiện để chúng ta đi xuống dốc này về phía mức tối thiểu của chúng ta.ν

dydx=2x4

ν=0.1

Lặp lại 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 * 2,51 - 4 ) = 2,41 x 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
xnew=2.510.1(22.514)=2.41
xnew=2.410.1(22.414)=2.32
x n e w = 2,26 - 0,1 ( 2 * 2,26 - 4 ) = 2,21 x n e w = 2,21 - 0,1 ( 2 * 2.21 - 4 ) = 2,16 x n e w = 2,16 - 0,1 ( 2 * 2,16 - 4 ) = 2,13 x nxnew=2.320.1(22.324)=2.26
xnew=2.260.1(22.264)=2.21
xnew=2.210.1(22.214)=2.16
xnew=2.160.1(22.164)=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(xnew=2.130.1(22.134)=2.10
xnew=2.100.1(22.104)=2.08
xnew=2.080.1(22.084)=2.06
x n e wxnew=2.060.1(22.064)=2.05
x n e w = 2,04 - 0,1 ( 2 * 2.04 - 4 ) = 2,03 x n e w = 2,03 - 0,1 ( 2 * 2,03 - 4 ) =xnew=2.050.1(22.054)=2.04
xnew=2.040.1(22.044)=2.03
x n e w = 2,02 - 0,1 ( 2 * 2,02 - 4 ) = 2,02 x n e w = 2,02 - 0,1 ( 2 * 2,02 - 4 ) = 2,01 x n e w = 2,01 - 0,1 ( 2 * 2.01 - 4 ) = 2,01 x n e w = 2,01xnew=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
x n e w = 2,01 - 0,1 ( 2 * 2.01 - 4 ) = 2,00 x n e w = 2.00 - 0.1 ( 2 * 2.00 - 4 ) = 2,00 x n e w = 2,00 - 0,1 ( 2 * 2.00 -xnew=2.010.1(22.014)=2.01
xnew=2.010.1(22.014)=2.00
xnew=2.000.1(22.004)=2.00
x n e w = 2,00 - 0,1 ( 2 * 2.00 - 4 ) = 2,00 x n e w = 2,00 - 0,1 ( 2 * 2.00 - 4 ) = 2.00xnew=2.000.1(22.004)=2.00
xnew=2.000.1(22.004)=2.00
xnew=2.000.1(22.004)=2.00

Và chúng ta thấy rằng thuật toán hội tụ tại ! Chúng tôi đã tìm thấy tối thiểu.x=2


Áp dụng cho mạng thần kinh

xy^

σ(z)=11+exp(z)

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

wxb

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

How to train the neural network?

We will use gradient descent to train the weights based on the output of the sigmoid function and we will use some cost function C and train on batches of data of size N.

C=12NiN(y^y)2

y^ is the predicted class obtained from the sigmoid function and y is the ground truth label. We will use gradient descent to minimize the cost function with respect to the weights w. To make life easier we will split the derivative as follows

Cw=Cy^y^w.

Cy^=y^y

and we have that y^=σ(wTx) and the derivative of the sigmoid function is σ(z)z=σ(z)(1σ(z)) thus we have,

y^w=11+exp(wTx+b)(111+exp(wTx+b)).

So we can then update the weights through gradient descent as

wnew=woldηCw

where η is the learning rate.


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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.