kosyachniy
@kosyachniy
Python BackEnd, Web FullStack

Что это за метод оптимизации при обратном распространении ошибки?

Есть код обратного распространения ошибки (Ссылка)

Вырезка:
def backpropagation(y):
        w = np.zeros((x.shape[1], 1))
        iteration = 0

        while True: # for iteration in range(1, 51):
            iteration += 1
            error_max = 0

            for i in range(x.shape[0]):
                error = y[i] - x[i].dot(w).sum()

                error_max = max(error, error_max)
                # print('Error', error_max, error)

                for j in range(x.shape[1]):
                    delta = x[i][j] * error
                    w[j] += delta
                    # print('Δw{} = {}'.format(j, delta))

            print('№{}: {}'.format(iteration, error_max)) #

            if error_max < fault:
                break

        return w


Используемый метод:


error = y - x.dot(weights).sum()
weights += x * error


Что это за метод оптимизации? Это градиентный спуск или нет?

Насколько я понимаю градиентный спуск это:
Ссылка
Вырезка:
def backpropagation(y):
        w = np.zeros((x.shape[1], 1))
        iteration = 0

        def gradient(f, x):
            return derivative(f, x, 1e-6)

        while True: # for iteration in range(1, 51):
            iteration += 1
            error_max = 0

            for i in range(x.shape[0]):
                f = lambda o: y[i] - x[i].dot(o).sum()

                error = f(w)
                # print(error)
                error_max = max(error, error_max)

                # print('Error', error_max, error)

                antigrad = -1 * gradient(f, w)

                # print('-∇ = {}'.format(antigrad)) #

                n = 2
                delta = error * antigrad * n

                for j in range(x.shape[1]):
                    w[j] += delta * x[i][j]
                    # print('Δw{} = {}'.format(j, delta))

            print('№{}: {}'.format(iteration, error_max)) #

            if error_max < fault:
                break

        return w


Метод:

error = y - x.dot(weights).sum()
delta = error * antigradient * n
weights += delta * x


Где n - шаг

Но! Это не работает! В чём моя ошибка? И что это за метод?
  • Вопрос задан
  • 158 просмотров
Решения вопроса 1
@ivodopyanov
NLP, python, numpy, tensorflow
Разница, как я понимаю, в том, что во втором случае есть еще функция активации (f) и что-то типа learning rate (n). Поэтому они участвуют в вычислении delta.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы