Backpropagtion с ReLU - Понимание расчета - PullRequest
0 голосов
/ 28 октября 2019

Я начал работать с нейронными сетями и пытаюсь реализовать прямой и обратный проход с помощью функции активации ReLU. Однако я чувствую, что неправильно понимаю нечто относительно фундаментальное, когда речь идет о обратном проходе.

import numpy as np

class ReLU:
    def __init__(self):
        self.input_tensor = None

    def forward(self, input_tensor):
        self.input_tensor = input_tensor
        return np.maximum(0, input_tensor)

    def backward(self, error_tensor):
        deriv = np.greater(error_tensor, 0).astype(int)

        return self.input_tensor - deriv

Мой вопрос прост: как вообще должен выглядеть результат обратного метода? Моя путаница проистекает из того факта, что производная от ReLU достаточно проста, но я не уверен, как это затем учитывается в выводе, который передается на следующую лекцию. Я абсолютно осознаю, что я не могу просто вычесть производные из старого ввода, но я не могу видеть, как они идут вместе.

1 Ответ

0 голосов
/ 28 октября 2019

Для x> 0 relu - это как умножение x на 1. Иначе, это как умножение x на 0. Производная равна 1 (x> 0) или 0 (x <= 0). </p>

в зависимости от того, что было на выходе, вы должны умножить error_tensor на 1 или 0.

Если это не ясно, это означает, что вы должны сохранить выходные данные прямого прохода, чтобы помочь вычислить градиент.

...