メモ: PyTorchの自動微分について
はじめに
PyTorchの自動微分についてのメモを記す。
自動微分
アルゴリズムによって定義された関数からその関数の偏導関数値を計算するアルゴリズムを導出するための技術。 数値微分や数式微分とも異なる方法で、これら方法の問題点(誤差や桁落ちによる精度低下、プログラムから微分表現を導けない)を 解消できる手段とのこと。
PyTorchでの自動微分の例
- tensorを作るときに、
requires_grad=True
とする。 - テンソル演算する。 (ex. y = x **2)
y.backward()
で勾配を計算する。x.grad
で勾配値が得られる
import torch x = torch.tensor(1.0, requires_grad=True) # require_grad=Trueが必要。defaultはFalse y = x ** 2 y.backward() # 勾配を求める print(x.grad) # xにおける勾配の値がx.gradに入っている x = torch.tensor(1.0, requires_grad=True) y = 2 ** x y.backward() print(x.grad) x1 = torch.tensor(1.0, requires_grad=True) x2 = torch.tensor(1.0, requires_grad=True) y = x1**2 + torch.sqrt(x1*x2) # 偏微分のケース y.backward() print(x1.grad, x2.grad)
実行結果
tensor(2.) tensor(1.3863) tensor(2.5000) tensor(0.5000)