Alterna · учебный материал

09.6 Программа вычисляет производные

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

Что в этом материале

Содержание и основные понятия

На предыдущей странице: один вес используется несколько раз.
Автоматическое дифференцирование сохраняет связи действий и применяет уже изученные местные правила. Оно не угадывает градиент и не выбирает оптимизатор.
Сохраним зависимости выполненных действий и пройдём от ошибки назад. Вклады разных путей к общему весу складываются. Это автоматическое дифференцирование, а не новый способ угадывать направление.
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Из правил получается работающая система
Value хранит data,grad и edges с локальными производными. Add/mul создают новые объекты. Backward строит порядок, очищает gradients, seedит output единицей и суммирует contributions.
Это настоящий ограниченный AD engine, а не таблица заранее вычисленных gradients. В браузере дополнительно поддерживаются tanh/relu и сериализуемая пошаговая трасса. Python-пример можно скачать и запустить самостоятельно.
Проверка.
Сопоставьте gradient с центральной разностью [L(θ+h)−L(θ−h)]/(2h) при h=1e−5 для каждой координаты. Избегайте точек недифференцируемости ReLU: разность в0 не обязана совпадать с convention. Численные тесты проверяют реализацию на fixtures, но не заменяют формального доказательства всей программы.
Не поддерживаются tensor broadcasting, higher-order graphs, in-place mutation и GPU. Это прозрачная основа, которую можно расширять после проверки инвариантов. Следующий блок разберёт
физическое выполнение вычислений
, пока обозначенное в программе курса.
class Value:
def __init__(self,data,parents=()):
self.data=float(data); self.grad=0.0; self.parents=list(parents)
def __add__(self,other):
return Value(self.data+other.data,[(self,1.0),(other,1.0)])
def __mul__(self,other):
return Value(self.data*other.data,[(self,other.data),(other,self.data)])
def backward(self):
# Полный исполняемый пример — по ссылке ниже.
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
Это явный контракт engine; другие frameworks могут накапливать между вызовами.
Как компьютер хранит числа и выполняет столько похожих операций?
Python-примеры главы 09
Академическая база →

Структурная карта учебников