Вычисление градиента ошибки и обратного распространения ошибки играет крайне важную роль в машинном обучении. Без автоматического вычисления градиента нам бы пришлось вручную вычислять производные в порой крайне сложных функциях.
Рассмотрим функцию simple_gradient из всё того же примера от pytorch.
Для того, чтобы иметь возможность высчитывать автоматически градиент нашей функции, нам необходимо обернуть в переменный класс (Variable) нашу функцию и указать в ней, что этой функции требуется градиент (requires_grad). По итогу мы получим примерно такой код.
x = Variable(torch.ones(2, 2) * 2, requires_grad=True)
Создадим ещё одну функцию, например
z = 2 * (x * x) + 5 * x
Не трудно догадаться, что производной для второй функции будет
4 * x + 5
Но запустим операцию обратного распространения (backward) относительно обычного тензора 2*2 заполненного единицами.
z.backward(torch.ones(2, 2))
Ну а теперь вычислим градиент
print(x.grad)
По итогу мы получим такой ответ
Variable containing:
13 13
13 13
[torch.FloatTensor of size 2x2]
По итогу мы получим такой занимательный код:
x = Variable(torch.ones(2, 2) * 2, requires_grad=True)
z = 2 * (x * x) + 5 * x
z.backward(torch.ones(2, 2))
print(x.grad)