13

Tôi đang tạo một mạng nơron bằng cách sử dụng kỹ thuật backpropagation cho việc học.Nguồn gốc của sigmoid

Tôi hiểu rằng chúng tôi cần phải tìm nguồn gốc của hàm kích hoạt được sử dụng. Tôi đang sử dụng hàm sigmoid chuẩn

f(x) = 1/(1 + e^(-x)) 

và I have seen that phái sinh của nó là

dy/dx = f(x)' = f(x) * (1 - f(x)) 

Đây có thể là một câu hỏi ngớ ngẩn, nhưng điều này không có nghĩa là chúng ta phải vượt qua x qua hàm sigmoid hai lần trong phương trình, vì vậy nó sẽ mở rộng tới

dy/dx = f(x)' = 1/(1 + e^(-x)) * (1 - (1/(1 + e^(-x)))) 

hoặc là nó chỉ đơn giản là vấn đề của việc sản lượng đã tính toán của f(x), mà là sản phẩm của các tế bào thần kinh, và thay thế giá trị đó cho f(x)?

+0

Tôi khuyên bạn nên tự mình lấy đạo hàm. Với một chút đại số bạn có thể lấy được chính xác f (x) * (1 - f (x)), và sau đó bạn sẽ hiểu chính xác những gì đang xảy ra. (Và câu trả lời dưới đây chính xác 100%.) –

+0

nghĩ về vấn đề ban đầu của bạn về mặt thay thế và bạn sẽ thấy rằng f (x) là một thuật ngữ phổ biến bạn có thể đưa ra thông qua thay thế –

Trả lời

7

Hai cách thực hiện tương đương (vì các hàm toán học không có tác dụng phụ và luôn trả về cùng một đầu vào cho một đầu ra đã cho), vì vậy bạn cũng có thể làm theo cách thứ hai (nhanh hơn).

15

Dougal là chính xác. Chỉ cần thực hiện

f = 1/(1+exp(-x)) 
df = f * (1 - f) 
3

Một đại số nhỏ có thể đơn giản hóa điều này để bạn không phải thực hiện cuộc gọi df.
df = exp (-x)/(1 + exp (-x))^2

nguồn gốc:

df = 1/(1+e^-x) * (1 - (1/(1+e^-x))) 
df = 1/(1+e^-x) * (1+e^-x - 1)/(1+e^-x) 
df = 1/(1+e^-x) * (e^-x)/(1+e^-x) 
df = (e^-x)/(1+e^-x)^2 
0

Bạn có thể sử dụng đầu ra của chức năng sigmoid của bạn và vượt qua nó để chức năng SigmoidDerivative của bạn được sử dụng làm f(x) trong các mục sau:

dy/dx = f(x)' = f(x) * (1 - f(x)) 
Các vấn đề liên quan