次回 どうも、最近は自動微分沼にはまっています。 前前回と前回ではリバースモードによる自動微分を Rust で実装しました。これらは実装が簡単である分、高階微分に対応していないという欠点があります。機械学習では1次の微分で済む場合が多いですが、一般の最適化問題には2次微分を使うものもありますので、何とかサポートしたいところです。 高階自動微分を行う論文はそれなりにあるのですが、理論的難易度は急に上がる感じがします。また解説しているブログや技術記事も極端に少ないです。 方針としては私が調べた限り3通りあります。 ノードごとの高階微分のルールを手で計算する 二重数を拡張する 微分した結果を返すサブグラフを動的に生成する 本稿では 1. と 2. を扱います。 1. は現実的にスケーラブルな解法とはいえませんので、実質的に 2. の話になります。 3. は長くなりそうなので次に回します。 手で高