Сначала рассмотрим следующий короткий математический трюк. Как вычислить производную от деления функции, следующим образом:
Теперь давайте воспользуемся приведенной выше формулой, чтобы найти производную сигмовидной функции следующим образом:
Теперь рассмотрим следующую графовую сеть, она может быть частью какой-то нейронной сети, потому что у нас есть умножение, сложение и некоторая нелинейность в нейронной сети.
Вектор признаков равен 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).
Теперь приступим к расчетам обратного распространения.
- Частная производная от 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 следующим образом:
Результаты следующие: