Value — число, которое помнит, откуда оно взялось
Обычное число после $c = $a * $b — просто 6, откуда оно взялось, уже не узнать.
Value хранит результат и вдобавок помнит, из каких чисел и какой операцией его получили.
Из этих связей складывается граф вычислений. По нему потом можно пройти назад и узнать, как каждое число влияет на результат.
Пример из видео: L = (a · b + c) · f
Двигайте ползунки: граф пересчитывается слева направо (это forward). Кликните по любому прямоугольнику, чтобы увидеть, что лежит внутри объекта.
Обратный проход по шагам
Внутри выбранного Value
Прямоугольник на графе — объект Value. Кружок — операция, которая его породила.
У листьев (a, b, c, f) операции нет: это исходные числа.
Что такое grad «на пальцах»
grad узла — насколько изменится L, если чуть-чуть увеличить этот узел. Проверим без всякого backward: прибавим к каждому листу h = 0.001 и посмотрим, как сдвинулся L.
Числа совпадают: backward вычисляет ровно это, только сразу для всех узлов за один проход, без того чтобы пересчитывать L по разу на каждый вес.
Как объяснить другому
- Value — обёртка над числом. Внутри
data(само число),prev(из чего получено),op(как) иgrad. - Каждая операция (
add,mul,tanh) возвращает новый Value и оставляет ему «инструкцию на обратный путь» — функциюbackwardFn. gradотвечает на вопрос: «если это число чуть увеличить, как изменится итог?» Знак показывает направление, величина — силу влияния.backward()ставит итогуgrad = 1и вызывает инструкции в обратном порядке, так что градиент протекает от итога к каждому листу.