Включает ли коррекция к весам производную сигмоидальной функции? - PullRequest
0 голосов
/ 24 апреля 2020

Давайте оценим использование этой строки в приведенном ниже блоке кода. L1_delta = L1_error * nonlin(L1,True) # line 36

import numpy as np #line 1

# sigmoid function
def nonlin(x,deriv=False):
    if(deriv==True):
        return x*(1-x)
    return 1/(1+np.exp(-x))

# input dataset
X = np.array([  [0,0,1],
                [0,1,1],
                [1,0,1],
                [1,1,1] ])

# output dataset            
y = np.array([[0,0,1,1]]).T

# seed random numbers to make calculation
# deterministic (just a good practice)
np.random.seed(1)

# initialize weights randomly with mean 0
syn0 = 2*np.random.random((3,1)) - 1

for iter in range(1000):

    # forward propagation
    L0 = X
    L1 = nonlin(np.dot(L0,syn0))

    # how much did we miss?
    L1_error = y - L1

    # multiply how much we missed by the 
    # slope of the sigmoid at the values in L1
    L1_delta = L1_error * nonlin(L1,True) # line 36

    # update weights
    syn0 += np.dot(L0.T,L1_delta)

print ("Output After Training:")
print (L1)

Я хотел знать, требуется ли линия? Зачем нам фактор производной сигмоида?

Я видел много подобных примеров регрессии logisti c, в которых производная сигмоида не используется. Например https://github.com/chayankathuria/LogReg01/blob/master/GradientDescent.py

1 Ответ

1 голос
/ 24 апреля 2020

Да, линия действительно требуется. Вам нужна производная от функции активации (в данном случае сигмоид), потому что ваш конечный результат неявно зависит только от весов. Вот почему вам нужно применить правило цепочки, где появится производная сигмоида.

Я рекомендую вам взглянуть на этот пост в отношении обратного распространения: https://datascience.stackexchange.com/questions/28719/a-good-reference-for-the-back-propagation-algorithm

Это довольно хорошо объясняет математику обратного распространения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...