化学系エンジニアがAIを学ぶ

PyTorchでディープラーニング、強化学習を学び、主に化学工学の問題に取り組みます

メモ: 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)

参考