論文メモ Automatic differentiation in Pytorch
July 4, 2020Pytorchの自動微分を解説したプレプリントのショートペーパである。
Pytorchの自動微分特徴として、in-placeアルゴリズム、微分の導出に不要な計算を省く仕組みのあるテープ、C++による実装をあげている。
0.4.0での仕様変更によってTensors
とVariables
がマージされたことやvolatile
が非推奨になったことをふまえていない。
読むときは、以上の点をはじめとする現在のAPIとの差異に注意する必要がある。
in-placeアルゴリズムは、データ変換のアルゴリズムで、入力データの記憶領域以外の領域をほとんど使わないものをさす。 例えば、副作用をゆるし、出力を入力の記憶領域に格納する手法はこれに該当する。 in-placeアルゴリズムは記憶領域を節約できるが、自動微分の計算が不可能になる。 そこで、in-placeアルゴリムで微分計算ができない場合は、例外を発生させるように作られている。 例えば、\(\tanh'(x)=1-\tanh'(x)\)であるため、次の計算は失敗する。
import torch
x = torch.randn(1, required_grad=True)
y = x.tanh()
y.add_(3)
y.backward()
- 論文はこちらからダウンロードできます。