こんにちは
今回は「pytorchでの微分」について解説したいと思います。
pytorchでの微分を理解することで、誤差逆伝播(微分を利用した重みパラメータの調整)などの実践的な手法を使えるようになります。
微分は、機械学習を学ぶ上でも欠かせない存在なので、しっかりとその手法をマスターしましょう!!
pytorchでの微分
pytorchでの微分は以下の手順で行います。
- 微分する変数に「requires_grad = True」を付与する
- 「.backward()」で微分を計算する
- 「.grad」で2.の計算結果を表示
それでは順番に見ていきます。
微分する変数に「requires_grad = True」を付与する
今回は
$$
y = 3x^2 + 1
$$
を\(x\)で微分していきましょう。
特に、\(x = 1\)のときの\(\frac{dy}{dx}\)を計算します。
微分する変数は\(x\)なので、
import torch x = torch.tensor([1.0], requires_grad = True)
とします。
この「requires_grad = True」とは「この変数で微分しますよー」というサインです。
誤差逆伝播では、多くの変数で損失関数を微分しなくてはいけないため、微分が自動化されています。
サインをつけ変えることによって、微分するorしない変数を簡単に区別することができます。
詳しくは公式ドキュメントを参照してください。
「.backward()」で微分を計算する
微分する変数(\(x\))を決めたら、次は\(y\)の微分を計算します。
これは
y.backward()
で行えます。簡単ですね。
しかしこれでは微分の結果を見ることができません。
よって次の操作が必要になります。
「.grad」で計算結果を表示
最後に
print(x.grad) # tensor([6.])
をすることによって\(x\)による微分、すなわち\(\frac{dy}{dx}\)の値を表示できます。
実際このコードを実行するとtensor([6.])と返ってきます。
手計算でもやってみると
$$
\frac{dy}{dx} = 6x = 6 (x=1)
$$
でpytorchの計算結果と一致します!
まとめ
以上のコードをまとめると
import torch x = torch.tensor([1.0], requires_grad = True) y = 3*x**2 + 1 y.backward() print(x.grad) # tensor([6.])
となります。
手順としては
- 微分する変数に「requires_grad = True」を付与する
- 「.backward()」で微分を計算する
- 「.grad」で2.の計算結果を表示
で微分を行うことができます。