Alterna · учебный материал
09.1 Рисуем зависимости вычисления
Каждое действие получает входы от предыдущих действий. Если обозначить эти связи, получится вычислительный граф.
Что в этом материале
- Операция хранит родителей
Содержание и основные понятия
Местные производные и правило цепочки уже знакомы.
Каждое действие получает входы от предыдущих действий. Если обозначить эти связи, получится вычислительный граф.
Сохраним зависимости выполненных действий и пройдём от ошибки назад. Вклады разных путей к общему весу складываются. Это автоматическое дифференцирование, а не новый способ угадывать направление.
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Операция хранит родителей
Распишем формулу как DAG: связи идут от операндов к результатам. Leaf содержит число; операция знает родителей, forward value и локальные производные. Топологический порядок гарантирует готовность родителей перед вычислением узла. N03,N10.
Сквозной пример: x=2,w=3,b=1,a=xw,z=a+b,L=z². Узлы a,z,L зависят от предыдущих. Идентичность узла отличается от равенства значений: разные переменные могут содержать одинаковые числа.
Редактор.
Граф задаётся JSON-массивом до20 узлов. Разрешены leaf,add,mul,tanh,relu. Parents должны быть объявлены раньше, IDs уникальны, output — последний узел. Это ограниченный декларативный формат, не выполнение JavaScript/Python из textarea. Изменять значения leaves можно непосредственно в JSON.
Эксперимент.
Сравните z*z с выражением, где две копии z имеют разные IDs. Forward может совпасть, но структура накопления различается. Цикл и неизвестный parent отвергаются с объяснением.
Под капотом.
Память графа включает edges, промежуточные values и gradients, а не только параметры модели. Общий узел достаточно вычислить один раз, но кратность его использования нельзя потерять. Это различие станет ключевым для обратного прохода.
x,w,b=2,3,1
a=x*w; z=a+b; L=z*z
assert (a,z,L)==(6,7,49)
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
Граф хранит операции и зависимости, из которых вычисляются values и derivatives.
Сначала получаем значения. Как этот вопрос продолжает полученный результат?
Python-примеры главы 09
Академическая база →