ソースコード
ステップ18 メモリ使用量を減らすモード
計算の途中で得た微分は不要な場合が多いため、用が済んだら消去するように改良する。 また、逆伝播を無効にするモードも実装する。
モード切替を実装するにあたり、backward
総称関数にキーワード引数を追加する代わりにスペシャル変数を定義することにした。
というのも、オリジナルのコードでretain_grad
は一カ所しか使っていないし、enable_backprop
とコンテキストマネージャの件はCommon Lispが持つスペシャル変数の典型的な用例ではないかと思ったからである。その特性から言って、総称関数はインターフェースとして安定しているべきなんだろう。
<variable>
クラスのbackward
メソッドでは、uiop:if-let
を使った計算をwith-accessorsを使って置き換え、読みやすさを改善してみた。loop
をdolist
で置き換え、インデントも直した。