Сначала рассмотрим следующий короткий математический трюк. Как вычислить производную от деления функции, следующим образом:

Теперь давайте воспользуемся приведенной выше формулой, чтобы найти производную сигмовидной функции следующим образом:

Теперь рассмотрим следующую графовую сеть, она может быть частью какой-то нейронной сети, потому что у нас есть умножение, сложение и некоторая нелинейность в нейронной сети.

Вектор признаков равен X=[0,11 0,22 0,33] и

веса W = [0,55 0,66 0,77], b=[0,88]

здесь

a0 = x0*w0

a1 = x1*w1

a2 = x2*w2

и

z = a0 + a1 + a2 + b

y = сигмоид (z), см. уравнение (2)

Результаты расчетов (прямой путь) также показаны на Рисунке-1.

Теперь давайте вычислим производную выходной переменной y (это потери, которые мы хотим минимизировать) по каждой из внутренних переменных, чтобы позже мы могли использовать эти производные для уравнения обновления (3).

Теперь приступим к расчетам обратного распространения.

  1. Частная производная от y относительно y равно 1.0 так просто.

2. Теперь, используя уравнение (2), мы получаем следующее:

3. Для a0 имеем:

4. Для a1 имеем:

5. Для a2 имеем:

6. Для частной производной по b получаем:

7. Для w0 имеем следующее:

8. А для w1 имеем:

9. Частная производная y по w2:

Теперь у нас есть частные производные y (которые являются потерями) по каждому параметру w0, w1, w2 и b, теперь мы можем использовать уравнение обновления (3) для градиентного спуска.

Закулисные вещи, которые мы только что сделали с помощью ручных вычислений, можно выполнить с помощью Pytorch следующим образом:

Результаты следующие: