本日はbotterアドベントカレンダー25日目の記事として、僕が普段行っているDeepLearningモデルの開発tipsの中でも、大昔から使っている任意のモデルに対して適応可能な金融データのモデリングでも使えるちょっとしたtipsとその面白い関係性について紹介したいと思います。
botterの皆さんが仮想通貨スペシフィックな非常に面白い記事や超大作を書いている中、非常に特化した小さい記事になってしまいますが、一部の方に刺さるとうれしく思います。
Monte Carlo Dropout
Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning: https://arxiv.org/abs/1506.02142
上記論文にて出てくるテクニックです。論文趣旨を要約するのであれば、Dropoutを用いるとDLの出力は近似的にベイズ推論となっているということを証明している論文です。Dropoutを推論時に有効化することで、各レイヤーの重みの分布からサンプリングをしていることになり、何度も繰り返すことで出力の分布を得ることができます。
これによって得られたモデルの出力の平均値を最終的な出力として使うことにより、予測精度の改善を得ることができます。一方で、推論時に多数のサンプリングを行う必要性があるため、推論コストは数十倍必要になってきます。
Stochastic Weight Averaging(SWA)
Averaging Weights Leads to Wider Optima and Better Generalization: https://arxiv.org/abs/1803.05407
上記論文にて出てくるテクニックです。同じく要約すると、SGDで最適化中にモデルウェイトの移動平均を同時に計算し、推論時にはウェイトの移動平均を用いるアプローチで、これによりフラットな解に到達しより良い汎化性能を得られるようになります。
こちらもマーケット予測でも有効で、モデルの予測精度を改善することが多いです。
以上2つのテクニックが今回の記事で紹介するtipsになります。
個人的に非常に面白いなと思った点と関係性についてアペンディックスとして話していきます。Monte Carlo Dropoutはもともとモデルの不確実性を測るためのアプローチとして研究されてきたうちのドロップアウトの特性証明の論文の一つです。一方もともとSWAのアイディアはロスサーフェスと汎化性能の関係性に対する議論から出てきていて、FastGeometric Ensembling(https://arxiv.org/pdf/1802.10026.pdf) がその前身となるアイデアとなっています。2つの論文は全く別々のコンテキストから生まれてきたものではありますが、推論時の数式は非常に近似しておりとても興味深いなと思ったことを覚えています。
前者は推論時にウェイトにノイズを載せて最終的にモデル全体の出力の平均をとる形で、後者はノイズを加えたウェイトの平均をもとにモデルの出力をとる形です。ノイズが微小な変動を表現していると解釈するならば、2つの手法はかなり近似的な役割を果たしています。それを反映してなのか、SWA後にMC Dropoutを行った際に得られるパフォーマンスのブーストはかなり限定的であり、SWA単体で実装するだけで十分な効果が得られることが多いように思います。SWAは推論時にサンプリングが必要ないため、MC Dropoutよりも非常に高速かつ精度の高い予測を得ることができ、特に短期の予測モデルを作っている方にとってはうれしい手法なのではないかと思います。
以上、短くなってしまいましたがtipsの紹介でした。皆さんのDLモデルが改善しますように!