記録は作業の証

鉄道とコンピュータ

ゼロから作るDeep LearningをCommon Lispで書き直す(ステップ18)

ソースコード

ステップ18 メモリ使用量を減らすモード

計算の途中で得た微分は不要な場合が多いため、用が済んだら消去するように改良する。 また、逆伝播を無効にするモードも実装する。

モード切替を実装するにあたり、backward総称関数にキーワード引数を追加する代わりにスペシャル変数を定義することにした。 というのも、オリジナルのコードretain_gradは一カ所しか使っていないし、enable_backpropとコンテキストマネージャの件はCommon Lispが持つスペシャル変数の典型的な用例ではないかと思ったからである。その特性から言って、総称関数はインターフェースとして安定しているべきなんだろう。

<variable>クラスのbackwardメソッドでは、uiop:if-letを使った計算をwith-accessorsを使って置き換え、読みやすさを改善してみた。loopdolistで置き換え、インデントも直した。

gist.github.com