# Вычислительный граф: выражение как схема

Зачем это нужно: нейросеть — это не одна функция, а цепочка из многих: линейный шаг, потом активация, потом следующий линейный шаг, и так далее (в [«Логистической регрессии»](/notes/logistic-regression/) цепочка была короче: $z \to a \to L$). Чтобы посчитать производную такой цепочки, удобно сперва нарисовать её как схему — **вычислительный граф**. Эта статья строит только схему и считает по ней число вперёд (прямой ход); что делать с производными по этому графу — в следующей статье. Если незнакома сама идея наклона-производной, начни с [«Производных: что такое наклон функции»](/notes/derivatives-intuition/) и [«Больше примеров производных»](/notes/derivatives-more-examples/).

Вычислительный граф — кружки-операции, стрелки-зависимости между ними. Представь кухонный рецепт: блюдо не готовится одним действием, оно расписано на шаги — нарезать, обжарить, смешать, — и каждый шаг берёт то, что получилось на предыдущем, и выдаёт что-то новое. Или сборочный конвейер: одна станция закручивает гайку, следующая красит корпус, третья упаковывает — каждая делает одну простую операцию и передаёт результат дальше. Вычислительный граф — то же самое, только для математического выражения: он режет его на маленькие пронумерованные операции, и каждая по отдельности элементарна.

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

$$J(a, b, c) = 3(a + bc)$$

Буквы здесь ничего не значат физически — просто три независимых входа. Разобьём вычисление на элементарные шаги — это и есть узлы графа:

- $u = b \cdot c$ (первое умножение)
- $v = a + u$ (сложение)
- $J = 3v$ (второе умножение)

Три шага — три стрелки: $b$ и $c$ вливаются в $u$, $a$ и $u$ вливаются в $v$, $v$ вливается в $J$. Слева направо этот проход называют **прямым ходом** (forward pass) — он просто вычисляет число, ничего не гадая.

Если можешь пересказать: вычислительный граф — это рецепт или конвейер для выражения, разбитый на пронумерованные шаги-узлы со стрелками-зависимостями между ними; проход слева направо — прямой ход, — продолжай к числам.

Возьмём числа: $a = 4$, $b = 3$, $c = 2$. Считаем шаг за шагом:

$u = b \cdot c = 3 \cdot 2 = 6$

$v = a + u = 4 + 6 = 10$

$J = 3v = 3 \cdot 10 = 30$

Прямой ход на этих числах даёт $J = 30$. То же самое, только длиннее и с активациями между слоями, происходит в предсказании нейросети: числа текут слева направо по графу, и на выходе получается результат — как $\hat{y} = \sigma(w^Tx + b)$ в логистической регрессии, только с большим числом узлов.

Если можешь пересказать: вычислительный граф разбивает выражение на элементарные шаги-узлы; прямой ход слева направо просто вычисляет число, — листай дальше.

## Что дальше

Прямой ход посчитал число, но не сказал, насколько $J$ изменится, если чуть подвинуть $a$, $b$ или $c$. Ответ — обратный ход по этому же графу, тема [«Производных с вычислительным графом»](/notes/derivatives-with-computation-graph/).
