Вычислительные графики
Обратное распространение реализуется в средах глубокого обучения, таких как 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 - скорость обучения *.
Мы повторяем этот процесс до тех пор, пока не будут выполнены критерии остановки.