chainer.Variable と chainer.Function

Chainerは、動的計算グラフ(Define-by-Run)を特徴とするPythonベースの機械学習フレームワークであり、その中核となるコンポーネントが chainer.Variablechainer.Function です。これらはChainerの自動微分機能やモデル構築の基礎となる重要なデータ構造です。


1. chainer.Variable:計算グラフのノード(データと勾配を保持)

概要

Variable は、数値データ(主にNumPyまたはCuPyの配列)とその 勾配(微分値)を保持するためのコンテナです。計算グラフ上のノードとして機能し、順伝播と逆伝播の両方に関与します。

主な属性

  • data: 実際の数値データ(NumPy または CuPy の配列)

  • grad: 微分値(勾配)。逆伝播で自動的に計算される

  • creator: そのVariableを生成したFunctionオブジェクト(計算グラフの構築に利用)

使用例

python
import chainer import numpy as np x = chainer.Variable(np.array([1.0, 2.0, 3.0], dtype=np.float32))

2. chainer.Function:計算ノード(順伝播と逆伝播を定義)

概要

Function は、Variable 間の計算を表すノードであり、順伝播と逆伝播のロジックを定義する抽象クラスです。たとえば加算、行列積、ReLUなどの処理が該当します。Functionの実装はforwardbackwardメソッドを通じて行われます。

基本構造

  • forward(inputs): 入力(Variabledata)に基づく順伝播の計算

  • backward(inputs, grad_outputs): 出力の勾配から入力の勾配を計算する

自作Functionの例

python
from chainer import Function class Square(Function): def forward(self, inputs): x, = inputs y = x ** 2 return y, def backward(self, inputs, grad_outputs): x, = inputs gy, = grad_outputs gx = 2 * x * gy return gx,

使用方法:

python
x = chainer.Variable(np.array([2.0], dtype=np.float32)) y = Square().apply((x,))[0] # applyはVariableを受け取りVariableを返す y.backward() print(x.grad) # [4.0]

3. Variable と Function の関係(計算グラフの構築)

  • Variable はデータと勾配を保持

  • Function は計算処理を行い、新たな Variable を生成

  • このやり取りにより、動的に計算グラフが構築され、逆伝播時に creator をたどって自動微分が行われる


まとめ

要素 説明
chainer.Variable データと勾配を保持するラッパー。計算グラフのノードとして機能
chainer.Function 演算処理のロジック(順伝播・逆伝播)を定義する抽象基底クラス
相互作用 FunctionがVariableを変換し、VariableはFunctionを記録して逆伝播時に使用

この仕組みによって、Chainerは柔軟なネットワーク設計と効率的な自動微分機構を実現しています。

生成日:2025/05/23