Coda

論文メモ Automatic differentiation in Pytorch

July 4, 2020

Pytorchの自動微分を解説したプレプリントのショートペーパである。 Pytorchの自動微分特徴として、in-placeアルゴリズム、微分の導出に不要な計算を省く仕組みのあるテープ、C++による実装をあげている。 0.4.0での仕様変更によってTensorsVariablesがマージされたことや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()