🔥

PyTorchのAutograd(自動微分)機能を概観する

2025/01/08に公開

本記事の概要

本記事では、PyTorchの機能の1つであるAutograd(自動微分)について解説し、簡単な実装例を紹介します。

Autograd機能の利用にあたって理解しておきたいこと

Autograd機能を利用するためには、いくつかの概念と注意点を理解する必要があります。実装時に特に押さえておくべきポイントについて説明します。

requires_gradの設定

  • Tensorを定義するときにrequires_grad=Trueを設定する
  • requires_grad=Trueにすることで勾配計算の追跡が可能になる
  • 学習不要な層やパラメータに対してはrequires_grad=Falseにして無駄な計算を回避する

in-place演算

  • in-place演算とは: 変更可能なオブジェクトの場合に元の値を変更する演算のこと
  • x += 1のようなin-place演算は自動微分の計算グラフを壊す可能性がありRuntimeErrorの原因となる
  • in-place演算はできるだけ回避し、新しい変数に代入して演算すること

.backward()の呼び出し

  • .backward()を呼び出すとその時点で勾配計算が実行される
  • .backward()は呼び出すたびに勾配計算が累積されることに注意が必要
  • 繰り返し計算する場合は、.zero_grad()optimizer.zero_grad()を呼び出して前回の勾配をリセットする必要がある

.grad属性の更新

  • .backward()を呼び出すと.gradに勾配が記録される
  • .gradを参照したりログをとりたい場合は更新のタイミングに注意する

Autogradの実装例

Autograd機能の基本的な使い方を理解するための最小限の実装例を示します。この例では、単純な計算における勾配の追跡と計算の流れを確認できます。

import torch

# 入力用テンソルを定義: requires_grad=Trueにする
x = torch.tensor(1.0, requires_grad=True)

# パラメータを仮定
weight = 2
bias = 5

# 計算式を定義
def calc(x, weight, bias):
    return x*weight + bias

# 計算を実行
y = calc(x, weight, bias)

# `backward()`を呼び出して勾配を計算
y.backward()

# 勾配を参照
print("x.grad:", x.grad)

まとめ

本記事では、PyTorchのAutograd機能の基礎的な内容について解説し、簡単な実装例を紹介しました。Autogradは深層学習の実装において重要な役割を果たす機能であり、本記事で紹介した基本的な理解と注意点を理解することで、より効果的に活用することができます。

Discussion