【機械学習】pytorchでの微分

機械学習

こんにちは

今回は「pytorchでの微分」について解説したいと思います。

pytorchでの微分を理解することで、誤差逆伝播(微分を利用した重みパラメータの調整)などの実践的な手法を使えるようになります。

微分は、機械学習を学ぶ上でも欠かせない存在なので、しっかりとその手法をマスターしましょう!!

スポンサーリンク

pytorchでの微分

pytorchでの微分は以下の手順で行います。

  1. 微分する変数に「requires_grad = True」を付与する
  2. 「.backward()」で微分を計算する
  3. 「.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.])

となります。

手順としては

  1. 微分する変数に「requires_grad = True」を付与する
  2. 「.backward()」で微分を計算する
  3. 「.grad」で2.の計算結果を表示

で微分を行うことができます。

タイトルとURLをコピーしました