chakokuのブログ(rev4)

日々のごった煮ブログです

【DLfS】スクラッチでリカレントネットワークを組みたい(俺RNN)

ディープラーニングと呼ばれるNNは一般的にFeed Forward Neural Networkと呼ばれるもので、過去のNNの状態を計算には加えず、入力に対して出力が算出されるもの。一方、文書理解とか音声認識は、Recurrent Neural Network(RNN)と呼ばれる、過去のNNの状態と入力を合わせて演算して出力を算出するものである。
自分は画像認識よりも、文書合成とかそっちの方が興味があるので、DLfSの勉強は一旦ここまでとして、なんとか自力でRNNを組んでみたい。RNNでよく紹介される実装は、LSTM(Long Short-Term Memory)と呼ばれる過去経緯を保持できるレイヤーを使ったものなのだが、LSTMのさらに簡略化された実装として、GRU(Gated Recurrent Unit)が提案されており、このGRUの逆伝搬をどうにかこうにかPythonで実装して、俺RNNを作りたい。
で、、俺RNNで何をやらせるか??それは、自動作曲と自動演奏。特に自分はアンビエントテクノというのかそういうのが好きで、アンビエント系ってクリエイティブな項目(オリジナリティ)はコード進行とリズムパターンだけじゃないのか?とも思えて、だったらバッハを真似た自動作曲のような高度な学習はいらないから、俺RNNでいろんなアンビエント音源を学習して、学習後は延々と少しずつ変化するアンビエント音楽が流せられないかというのが夢。

■参考URL
RECURRENT NEURAL NETWORK TUTORIAL, PART 4 – IMPLEMENTING A GRU/LSTM RNN WITH PYTHON AND THEANO
http://www.wildml.com/2015/10/recurrent-neural-network-tutorial-part-4-implementing-a-grulstm-rnn-with-python-and-theano/
forwardのサンプルソースはあるけど、逆伝搬はTheanoのgradで代用しているようである。

LSTMのバックプロパゲーション
https://cran.r-project.org/web/packages/rnn/vignettes/LSTM_units.html

Graphically Determining Backpropagation Equations
http://practicalcryptography.com/miscellaneous/machine-learning/graphically-determining-backpropagation-equations/
GRUのバックプロパゲーション
https://cran.r-project.org/web/packages/rnn/vignettes/GRU_units.html