Найти в Дзене
Вечный джун

Простой и автоматический градиент в PyTorch

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

Рассмотрим функцию 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
-2

Но запустим операцию обратного распространения (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)