Deep Symbolic Regression RNNと強化学習でシンボリック回帰
TL;DR
RNNとCVaR最適化を組み合わせて、遺伝プログラミングが普通とされているシンボリック回帰をDeep Learningでやる方法を考えた。
Infomation
記号回帰
記号回帰とは次のような式をデータから発見するタスク
指数的に増える探索空間
関数の形は離散で係数は連続
基本的には遺伝プログラミングで解かれる
https://gyazo.com/966368375fcfad01ded41d56007580a7
全体的な流れ
RNNで式をサンプリングする・定数項を最適化する
サンプリングした式に対してリワードを計算する
上位εのみをもちいてリワードを計算する
ポリシーgradientとエントロピー最適化
https://gyazo.com/65febe78cc19b0b2ef8f59fe65a04417
計算式の木構造を理解したRNN
前順で計算式を出力する
木構造を理解するためにinputは兄弟ノードと親ノードになっている!
https://gyazo.com/ca7495a2e068d77955c0bbb85abd39db
RNNをPolicy Gradientで最適化する
$ J_{\mathrm{std}}(\theta) \doteq \mathbb{E}_{\tau \sim p(\tau \mid \theta)}[R(\tau)] を最適化するには
$ \begin{aligned} \nabla_{\theta} J_{\mathrm{std}}(\theta) &=\nabla_{\theta} \mathbb{E}_{\tau \sim p(\tau \mid \theta)}[R(\tau)] \\ &=\mathbb{E}_{\tau \sim p(\tau \mid \theta)}\left[R(\tau) \nabla_{\theta} \log p(\tau \mid \theta)\right] \end{aligned}
一般的なPolicy Gradientを計算すればいい。これをサンプリングで計算すればいい。
ただし、ここでは$ R(\tau)=1 /(1+\mathrm{NRMSE}) として標準化されたMSEを最適化する
上位ε%のみにしか興味がない最適化
$ J_{\mathrm{risk}}(\theta ; \varepsilon) \doteq \mathbb{E}_{\tau \sim p(\tau \mid \theta)}\left[R(\tau) \mid R(\tau) \geq R_{\varepsilon}(\theta)\right]
を最適化する。これはCVaR最適化。
結果
平均的にはGPとかに勝てている
https://gyazo.com/589b4994bc18a526f32940af33c0bf64
結果 上位ε%を最適化したほうがいい
https://gyazo.com/8bd0e51ef57f28bd751c2cec6f6f8806
参考文献
AI Feynman: a Physics-Inspired Method for Symbolic Regression