0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初心者向けPyTorch篇:4.自動微分

Last updated at Posted at 2024-12-27

PyTorchは、自動微分を容易に行える便利なライブラリです。この例では、PyTorchを使って基本的なテンソル操作と勾配計算を行う方法を説明します。

テンソルの作成と操作

torch.randでランダムな値を持つ2x3のテンソルtを作成します。requires_grad=Trueを指定することで、このテンソルに対する操作が記録され、後で勾配を計算できるようにします。

import torch
import numpy as np

t = torch.rand(2, 3, requires_grad=True)

y = t + 5
print(y)
# tensor([[5.6119, 5.9397, 5.8334], 
#         [5.6603, 5.1596, 5.1985]], grad_fn=<AddBackward0>)
# ここのTensorはAddBackwardという方法で計算されていることが分かります。

z = y * 2
out = z.mean()
print(out)
# tensor(11.1344, grad_fn=<MeanBackward0>)

勾配の計算

out.backward()を呼び出すことで、outに関するtの勾配を計算します。

out.backward()

print(t.grad)  # 勾配 d(out)/d(t)
# tensor([[0.3333, 0.3333, 0.3333], 
#         [0.3333, 0.3333, 0.3333]])

自動微分の中止

detachを使用すると、テンソルを計算グラフから切り離し、それ以上の自動微分が発生しなくなります。

result = out.detach()
print(result)
# tensor(11.1344)
# ここのgrad_fnが無くなっています。自動微分が中止されていることが分かります。

torch.no_grad()ブロック内計算グラフ全体を無効化できます。自動微分が中止されています。

with torch.no_grad():
    y = t + 2
    print(y)
# tensor([[2.8853, 2.7369, 2.0852],
#        [2.1785, 2.7781, 2.3694]])
# ここのgrad_fnが無くなっています。自動微分が中止されていることが分かります。

まとめ

このコード例では、PyTorchの自動微分機能を利用して、テンソルの操作や勾配の計算を学びました。requires_gradを有効にすると、計算グラフが作られ、微分操作が簡単に実行できます。

補足: t.grad計算(数学の部分)

コードと計算の流れ
t = torch.rand(2, 3, requires_grad=True)
y = t + 5
z = y * 2
out = z.mean()
out.backward()
print(t.grad)
  1. 初期状態
    tはランダムな値を持つ2×3の行列で、requires_grad=Trueが設定されているため、このテンソルは計算グラフを通して自動的に微分が計算されます。
    image.png

  2. y=t+5
    image.png

  3. z=y×2
    image.png

  4. out=mean(z)
    image.png
    image.png

微分(バックプロパゲーション)

out.backward()を実行すると、tに対する微分∂out/∂tを計算します。ここでは連鎖律(チェーンルール)を使います。
image.png

合成微分(チェーンルール)

image.png

結果(t.grad)

tの全要素の勾配(微分値)は同じ値になります
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?