Модуль: Обратное распространение


Когда путей несколько


Войдите на сайт, чтобы ответы сохранялись и баллы за тетрадь засчитывались.

Когда путей несколько

Что происходит, когда одно значение участвует сразу в нескольких вычислениях

Развилка графа
По каждому пути влияние считается отдельно. В точке, где пути сходятся, их вклады складываются.

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

Рассмотрим простой пример:

\[ a=2x, \qquad b=x^2, \qquad L=a+b. \]

Здесь \(x\) влияет на функцию потерь \(L\) сразу двумя путями:

x a = 2x b = x² L = a + b в backward вклады двух путей складываются
Верхний путь: через a

Сначала рассмотрим только путь

\[ x\rightarrow a\rightarrow L. \]

Так как

\[ L=a+b, \]

то при изменении только \(a\) величина \(L\) изменяется ровно на столько же:

\[ \frac{\partial L}{\partial a}=1. \]

Для операции

\[ a=2x \]

локальная производная равна:

\[ \frac{\partial a}{\partial x}=2. \]

По цепному правилу вклад верхнего пути:

\[ \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial x} = 1\cdot2 = 2. \]

Нижний путь: через b

Теперь отдельно рассмотрим путь

\[ x\rightarrow b\rightarrow L. \]

Так как

\[ L=a+b, \]

то:

\[ \frac{\partial L}{\partial b}=1. \]

Для

\[ b=x^2 \]

локальная производная:

\[ \frac{\partial b}{\partial x}=2x. \]

Поэтому вклад нижнего пути:

\[ \frac{\partial L}{\partial b} \cdot \frac{\partial b}{\partial x} = 1\cdot2x = 2x. \]

Почему вклады складываются

Изменение \(x\) одновременно меняет и \(a\), и \(b\).

Значит, функция потерь \(L\) изменяется сразу из-за двух причин. Нельзя выбрать только один из путей: оба воздействия происходят одновременно.

Поэтому полный градиент по \(x\) равен сумме вкладов:

\[ \frac{\partial L}{\partial x} = \frac{\partial L}{\partial a} \frac{\partial a}{\partial x} + \frac{\partial L}{\partial b} \frac{\partial b}{\partial x}. \]

Подставляем найденные выражения:

\[ \frac{\partial L}{\partial x} = 2+2x. \]

Например, при

\[ x=3 \]

верхний путь даёт:

\[ 2, \]

а нижний:

\[ 2x=6. \]

Поэтому:

\[ \frac{\partial L}{\partial x} = 2+6 = 8. \]

Если от одной величины к функции потерь ведёт несколько путей, вклад каждого пути считаем отдельно, а затем складываем.
Два правила, которые нужно различать

Теперь у нас есть два разных случая.

Вдоль одного последовательного пути — умножаем:

\[ \frac{\partial L}{\partial x} = \frac{\partial L}{\partial b} \cdot \frac{\partial b}{\partial a} \cdot \frac{\partial a}{\partial x}. \]

Если путей несколько — складываем их вклады:

\[ \frac{\partial L}{\partial x} = \text{вклад первого пути} + \text{вклад второго пути}. \]

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


Проверь себя

Два пути в backward дали вклады +3 и -1. Какой общий градиент приходит в исходный узел?