Вычислительные графики

Обратное распространение реализуется в средах глубокого обучения, таких как Tensorflow, Torch, Theano и т. Д., С использованием вычислительных графов. Что еще более важно, понимание обратного распространения на вычислительных графах объединяет несколько различных алгоритмов и их вариации, такие как обратное распространение во времени и обратное распространение с общими весами. После того, как все преобразовано в вычислительный граф, они по-прежнему остаются тем же алгоритмом - только обратное распространение по вычислительным графам.

Что такое вычислительный граф

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

Например, вот простое математическое уравнение -

$$ p = x + y $$

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

Вышеупомянутый вычислительный граф имеет узел сложения (узел со знаком «+») с двумя входными переменными x и y и одним выходом q.

Возьмем другой пример, немного более сложный. У нас есть следующее уравнение.

$$ g = \ left (x + y \ right) \ ast z $$

Вышеприведенное уравнение представлено следующим вычислительным графиком.

Вычислительные графики и обратное распространение

Вычислительные графы и обратное распространение - важные базовые концепции глубокого обучения для обучения нейронных сетей.

Вперед пас

Прямой проход - это процедура оценки значения математического выражения, представленного вычислительными графиками. Выполнение прямого прохода означает, что мы передаем значение из переменных в прямом направлении слева (вход) вправо, где находится выход.

Давайте рассмотрим пример, присвоив некоторую ценность всем входам. Предположим, всем входам заданы следующие значения.

$$ x = 1, y = 3, z = −3 $$

Дав эти значения входам, мы можем выполнить прямой проход и получить следующие значения для выходов на каждом узле.

Сначала мы используем значение x = 1 и y = 3, чтобы получить p = 4.

Затем мы используем p = 4 и z = -3, чтобы получить g = -12. Идем слева направо, вперед.

Задачи обратного прохода

В обратном проходе мы намерены вычислить градиенты для каждого ввода относительно окончательного вывода. Эти градиенты необходимы для обучения нейронной сети с использованием градиентного спуска.

Например, нам нужны следующие градиенты.

Желаемые градиенты

$$ \ frac {\ partial x} {\ partial f}, \ frac {\ partial y} {\ partial f}, \ frac {\ partial z} {\ partial f} $$

Обратный проход (обратное распространение)

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

$$ \ frac {\ partial g} {\ partial g} = 1 $$

Наш расчетный график теперь выглядит так, как показано ниже -

Затем мы выполним обратный проход через операцию «*». Мы рассчитаем градиенты в точках p и z. Поскольку g = p * z, мы знаем, что -

$$ \ frac {\ partial g} {\ partial z} = p $$

$$ \ frac {\ partial g} {\ partial p} = z $$

Мы уже знаем значения z и p из прямого прохода. Отсюда получаем -

$$ \ frac {\ partial g} {\ partial z} = p = 4 $$

и

$$ \ frac {\ partial g} {\ partial p} = z = -3 $$

Мы хотим вычислить градиенты по x и y -

$$ \ frac {\ partial g} {\ partial x}, \ frac {\ partial g} {\ partial y} $$

Однако мы хотим сделать это эффективно (хотя x и g находятся всего в двух шагах на этом графике, представьте, что они действительно далеко друг от друга). Чтобы вычислить эти значения эффективно, мы будем использовать цепное правило дифференцирования. Из цепного правила у нас есть -

$$ \ frac {\ partial g} {\ partial x} = \ frac {\ partial g} {\ partial p} \ ast \ frac {\ partial p} {\ partial x} $$

$$ \ frac {\ partial g} {\ partial y} = \ frac {\ partial g} {\ partial p} \ ast \ frac {\ partial p} {\ partial y} $$

Но мы уже знаем, что dg / dp = -3, dp / dx и dp / dy просты, поскольку p напрямую зависит от x и y. У нас есть -

$$ p = x + y \ Rightarrow \ frac {\ partial x} {\ partial p} = 1, \ frac {\ partial y} {\ partial p} = 1 $$

Отсюда получаем -

$$ \ frac {\ partial g} {\ partial f} = \ frac {\ partial g} {\ partial p} \ ast \ frac {\ partial p} {\ partial x} = \ left (-3 \ right) .1 = -3 $$

Кроме того, для входа y -

$$ \ frac {\ partial g} {\ partial y} = \ frac {\ partial g} {\ partial p} \ ast \ frac {\ partial p} {\ partial y} = \ left (-3 \ right) .1 = -3 $$

Основная причина сделать это в обратном порядке заключается в том, что, когда нам нужно было вычислить градиент в x, мы использовали только уже вычисленные значения и dq / dx (производная выхода узла по отношению к входу того же узла). Мы использовали локальную информацию для вычисления глобального значения.

Шаги по обучению нейронной сети

Выполните следующие шаги, чтобы обучить нейронную сеть -

  • Для точки данных x в наборе данных мы выполняем прямой проход с x в качестве входных данных и вычисляем стоимость c в качестве выходных данных.

  • Мы выполняем обратный проход, начиная с c, и вычисляем градиенты для всех узлов в графе. Сюда входят узлы, которые представляют веса нейронной сети.

  • Затем мы обновляем веса, выполняя градиенты W = W - скорость обучения *.

  • Мы повторяем этот процесс до тех пор, пока не будут выполнены критерии остановки.