G検定(JDLA) 練習問題 33:深層学習フレームワーク:計算グラフと自動微分
深層学習フレームワークにおける「計算グラフ」と自動微分の仕組みについて、正しいものはどれか。
- 自動微分は計算グラフ上で連鎖律を適用し、出力から入力へ勾配を効率的に計算する仕組みである
- 計算グラフは常に静的(構築後に変更不可)でなければならず、動的に計算グラフを構築するフレームワークは存在しない
- 自動微分は数値微分と同一の手法であり、微小な変化量を用いて差分商を計算することで勾配を近似する
- 計算グラフにおけるノードは必ず学習可能なパラメータのみを表し、演算そのものを表すことはできない
- 自動微分を利用する場合、開発者は各層の勾配計算式を手動で導出し、コードに明示的に実装する必要がある
正解と解説を見る
正解:自動微分は計算グラフ上で連鎖律を適用し、出力から入力へ勾配を効率的に計算する仕組みである
自動微分は計算グラフを用いて、連鎖律に基づき出力側から入力側へ勾配を逆向きに伝播させることで効率的に微分値を求める技術であり、誤差逆伝播法の背後にある計算原理である。
【正解の理由】
計算グラフは演算の依存関係をグラフ構造で表現したものであり、自動微分はこのグラフ上で連鎖律を適用することで、各パラメータに対する勾配を効率的かつ正確に計算できる。これにより誤差逆伝播法が実現されている。
【不正解の理由】
• 「計算グラフは常に静的でなければならない」:PyTorchのように実行時に動的にグラフを構築するDefine-by-Run方式のフレームワークも広く使われている
• 「自動微分は数値微分と同一」:数値微分は差分商による近似計算であり、自動微分は連鎖律による解析的な(誤差の少ない)勾配計算であり別の手法である
• 「ノードは学習可能なパラメータのみを表す」:計算グラフのノードは加算・乗算・活性化関数などの演算や変数を表すことができ、パラメータに限定されない
• 「開発者が勾配計算式を手動で導出しコードに実装する必要がある」:自動微分の利点はまさに勾配計算を自動化し、手動での微分導出を不要にする点にある