質問: f0∘f1∘f2∘...∘fn Because each primitive function fk has a simple derivative, we can use the chain rule to find df/dx pretty easily. Although I've used a single-variable function f:R→R as my example here, it's straightforward to extend this idea to multivariate functions f:Rn→Rm. **【面白いidea 2】** Automatic differentiation computes derivatives based on computational functions (which in turn are broken down into basic operations such as addition/subtraction and multipliation/division). Since TensorFlow does differentiation based on a computation graph of operations, I'd intuitively say that it's **automatic differentiation** (I don't know of any other technique that would be appropriate here; I think the possibility that TensorFlow is **converting the computation graph into a mathematical equation** that is then **parsed** to compute the derivative of that equation is prob. out of question). The authors say "symbolic differentiation" in the TensorFlow whitepaper though -- however, I think this may be a **misnomer** similar to "Tensor" instead of "(multi-dimensional) data array" if you'd ask a mathematician.
回答: 人がキーボード叩いて実装されてはいると思います。 結局微分は一般的な形式が存在するので難しくはなさそうですが。 自動微分が普通では書けないと思う理由はなんですか? http://ailaby.com/chainer_foward_backward/ https://github.com/tensorflow/tensorflow/blob/master/tensorflow/cc/gradients/math_grad.cc ちなみに微分できないと自動微分できません。 define-and-runだとif文を挟んだ際にif文の分岐分だけグラフのパターンが分かれてしまうため、一般に論理構造を含む実装は困難です。 TensorflowのEagerモードなど、define-by-runで動的にグラフを形成する場合は実装が少々簡単になります。 グラフを計算するときは具体的に入力値が定まっているときなので常にグラフは分岐しない一本道になります。 以下コメント欄を転記。 http://tensorflow.classcat.com/2018/07/17/tensorflow-tutorials-automatic-differentiation/ https://www.tensorflow.org/guide/eager#computing_gradients 上の2つのリンクをたどってみてください。 Eagerの場合逐次実行できるのでGradientTapeというもので計算のフローをたどることができます。 遅延評価されるので、入力を実際に与えたときに初めてフローが形成されます。 なので、実は途中でif文を大量に挟んでも問題ありません。 if文があっても、特別な入力に対しては一つのフローにならなければならないからです。 これは動的にグラフ形成を許すEagerモードならではの実装だと思われます。 結論としては、 1シンボリックには計算していません 2特定の値に対して計算フローを形成するので、必ず一本道になり、単純な自動微分に帰結します