リカレントニューラルネットワークによる時系列の生成（人工知能が美術や音楽を作るMagenta 翻訳①）

###はじめに
<Font color="gray" >この記事は、GoogleのMagentaプロジェクトのドキュメント
["Generating Sequences With Recurrent Neural Networks"](https://github.com/tensorflow/magenta/blob/master/magenta/reviews/summary_generation_sequences.md)（David Ha)の翻訳です。
このドキュメントは、[Alex Graves氏による同名の論文](http://arxiv.org/abs/1308.0850)のレビュー記事であり、
[Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)で配布されている成果物です。
</font>

　Google Brainはディープラーニングにより、美術や音楽を生成するプロジェクトMagentaを立ち上げました。Magentaの目的の1つは、プロジェクトの研究を紹介することでもあり、いくつかの論文のレビュー記事を公開しています。

　リカレントニューラルネットワーク(RNN)は時系列データと相性の良いニューラルネットワークで、GoogleのプロジェクトMagentaでも、[作曲をするモデル](http://qiita.com/YoshikawaMasashi/items/0f6fbbe39c4381457b0a)として使われています。この記事では、RNNによる時系列の生成の基本的な考え方を解説します。

#リカレントニューラルネットワークによる時系列の生成

　2013年にAlex Graves氏によって書かれた[Generating Sequences With Recurrent Neural Networks](http://arxiv.org/abs/1308.0850)は、リカレントニューラルネットワークによる時系列生成について述べた主要な論文の1つとなっています。ここでは、時系列データの確率分布をモデリングすることについて議論しています。このアプローチにより、次に起こることを正確に予測する代わりに、過去から知ったすべての情報から未来の確率分布を予測するRNNを得ます。

　人間でさえ、未来を正確に予測することに比べて、未来に何がどれくらい起こりそうか予測する方が簡単です。しかしながら、これは機械にとっては難しい問題で、特に[マルコフ性](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%82%B3%E3%83%95%E6%80%A7)を持たない時系列にとっては難しいです。このような予測は、全過去の時系列が与えられた場合に、次のステップで起こる確率分布を計算することだと定義することができます。
　

```math
  P( Y[n+1]=y[n+1]\ |\ Y[n]=y[n], Y[n-1]=y[n-1], Y[n-2]=y[n-2], \ldots) \ \ \ \ (1)
```

　
　N-gramモデルのようなシンプルな方法では、前のN個の文字が与えられ、次の文字を予測します。そこでは、t-Nステップ以前のものは切り捨てて近似します。それではNが大きくなった時に、うまく調節されません。

　この論文で、Graves氏は(1)式で確率分布関数(PDF)を近似するために、どのようにRNNを使うのかを説明しています。RNNは再帰的であるため、過去の出来事の豊かな表現を記憶することができます。この論文では、遠い過去の情報もRNNが記録しておくために[LSTM](http://qiita.com/KojiOhki/items/89cd7b69a8a6239d67ca)セルを使うことを提案しています。この変更により、時系列の次の値の確率分布関数は、現在の時系列の値と、RNNの隠れ状態の関数として、近似することができます。
　

```math
  P( Y[n+1]=y[n+1]\ |\ Y[n]=y[n], H[n]=h[n]) \ \ \ \ (2)
```

　
　Graves氏は、シェークスピアの作品やすべてのWikipediaの記事やオンラインの手書き文字のデータベースを含めた、多くの時系列データセットに、RNNを学習させてフィッティングする方法を詳細に解説しています。この学習では、RNNによって生成される時系列と、実際のデータセットとのクロスエントロピー誤差を使った、バックプロパゲーション(backpropagation through time :BPTT)を用いています。さらに、勾配刈込み（Gradient clipping)を使うことによって、勾配や重みが発散されてしまうのを防ぎます。

　訓練を行った後に、興味深いことが起こります。もし、RNNが生成した確率分布が実際のデータの経験確率分布関数に十分近いなら、この分布からサンプルを取って、模造ではあるものの、もっともらしい時系列をRNNは生成します。このテクニックはここ2,3年によく知られるようになりました。これは政治的皮肉([Obama-RNN](https://medium.com/@samim/obama-rnn-machine-generated-political-speeches-c8abd18a2ea0#.rzbuq8qhc),[@deepdrumpf](https://twitter.com/deepdrumpf))や[アスキーアート](http://rodarmor.com/artnet/)の生成にも使われています。

[RNNから時系列をサンプリングする概念図](https://camo.githubusercontent.com/0312d4a679bc4bc3ba12152b3cb71071e80980a1/687474703a2f2f626c6f672e6f746f726f2e6e65742f77702d636f6e74656e742f75706c6f6164732f73697465732f322f323031352f31322f73746174655f6469616772616d2e737667)

　近年この手法の応用として、文書の生成が最も幅広く使われています。このデータは簡単に利用可能で、確率分布はソフトマックス層でモデリングされます。一方、それに比べてあまり研究されていないのは、音の波形や、手書き文字や、ベクター絵画を含む、実際の"数"の時系列を生成するアプローチです。

　この論文では、オンラインの手書き文字データベースでRNNを訓練させる実験をしています。このデータは、タブレットから記録された実際の手書き文字で、一筆一筆ベクトル形式で表現されています。[IAM手書き文字データセットの例はこのようになっています。](https://camo.githubusercontent.com/0d1c202e1330d9f2a23e4e1e28ffb92db7908549/687474703a2f2f626c6f672e6f746f726f2e6e65742f77702d636f6e74656e742f75706c6f6164732f73697465732f322f323031352f31322f69616d5f73616d706c6573322e737667)

　これらの手書きサンプルは、タブレットによって座標移動の小さなベクトルの集まりの表現として記録されています。それぞれのベクトルは、ベクトルとは別に2値状態をもっていて、これは一筆が終わること(すなわち、ペンがスクリーンから離れること)を示しています。一筆が終わった次のベクトルは、新しい一筆を始める座標を示しています。

[それぞれのベクトルをランダムな色で視覚化することによってこのように訓練データがみえます。](https://camo.githubusercontent.com/d3113abaa8958ab414a6de060af5397ff8617e86/687474703a2f2f626c6f672e6f746f726f2e6e65742f77702d636f6e74656e742f75706c6f6164732f73697465732f322f323031352f31322f706f696e745f636f6c6f722e737667)

[さらに、同様にそれぞれの一筆をランダムな色で視覚化することができ、それはそれぞれの小さなベクトルを視覚化するより、魅力的に見えます。](https://camo.githubusercontent.com/ccb49182edce110ed2183a9a315b6163dd1ceaf6/687474703a2f2f626c6f672e6f746f726f2e6e65742f77702d636f6e74656e742f75706c6f6164732f73697465732f322f323031352f31322f7374726f6b655f636f6c6f722e737667)

　モデルはそれぞれの一筆ではなく、それぞれのベクトルに対して訓練することを述べておきます。(一筆はペンが上がるまでのベクトルの集まりです）

　RNNのすることは、次の座標移動(移動の大きさを示す実数の組み合わせ)の条件付き確率分布と一筆が終わる(2値で示され、これをSとします)条件付き確率分布をモデリングすることです。
　

```math
  P( X[n+1]=x_{n+1}, Y[n+1]=y[n+1], S[n+1]=s[n+1]\ |\ \\X[n]=x[n], Y[n]=y[n], S[n]=s[n], H[n]=h[n] ) \ \ \ \ (3)
```

　
　論文で解説されている方法では、XとYの条件付き確率分布を多数の小さなガウス分布を足し合わせた混合ガウス分布で近似し、Sはベルヌーイの乱数変数で近似しています。混合分布のパラメーターを生成するためにニューラルネットワークを使うテクニックは、当初、[ビショップ](https://www.researchgate.net/publication/40497979_Mixture_density_networks)によって、フィードフォワードネットワークのために開発されました。このアプローチをRNNに拡張します。それぞれのステップでRNNは(x[n],y[n],s[n],h[n])を混合ガウス分布関数のパラメーターに変換します。これは、時間が経て、xやyが書き換えられるにしたがって、変わっていきます。[例えば、RNNが前のいくつかの点を見ているのを想像してください（灰色の点です）、そしてRNNは次の点の場所に対する確率分布を予測するはずです（ピンクの範囲です)。](https://camo.githubusercontent.com/0c33f16ff35dcaefc97cdae674bcbffff2626665/687474703a2f2f626c6f672e6f746f726f2e6e65742f77702d636f6e74656e742f75706c6f6164732f73697465732f322f323031352f31322f6d646e5f6469616772616d2e737667)

　ペンは今の一筆を続けるかもしれませんし、それを終えて右に移動しあらたな文字を書き始めるかもしれません。RNNはこの不確実性をモデリングします。すべてのIAMデータベースに対してモデルをフィッティングした後、[RNNで偽物の手書き文字を上で述べたようにサンプリングできます。](https://camo.githubusercontent.com/5d9bcc37d297f4cd4adc83721b3592e138cb259d/687474703a2f2f626c6f672e6f746f726f2e6e65742f77702d636f6e74656e742f75706c6f6164732f73697465732f322f323031352f31322f67656e6572617465645f6578616d706c65735f302e737667)

　[サンプリングの過程でRNNが出力する確率分布を詳しく調査することもできます。](https://camo.githubusercontent.com/7bd4accb23112370788f7c7ca7bc4460988f6516/687474703a2f2f626c6f672e6f746f726f2e6e65742f77702d636f6e74656e742f75706c6f6164732f73697465732f322f323031352f31322f66756c6c5f736574322e737667)ここではRNNの考えを理解するために、RNNのサンプルに加えて、座標移動の確率分布(赤い点)と一筆がおわる確率（灰色の線の濃さ）のサンプルを視覚化しています。

　このことはとても強力です。そして将来、この時系列をサンプリングする方法を拡張することにより、あらゆる方針を探求することができます。例えば、[少し変更が加えられたRNN](https://camo.githubusercontent.com/929d47a514b23049c7999deb3972fea97b1afa99/687474703a2f2f626c6f672e6f746f726f2e6e65742f77702d636f6e74656e742f75706c6f6164732f73697465732f322f323031362f30312f72616e646f6d5f7261646963616c732e706e67)は、[中国漢字のデータ](http://kanjivg.tagaini.net/)に対して訓練することができ、[虚構の中国漢字](http://otoro.net/kanji/)を生成します。

　Graves氏の論文の続く部分では、条件付きサンプリングを行ういくつかの方法も解説しています。書きたいある文字と、その前後の文字の情報を利用するモデルが与えられると、文字のつながりの微妙な差異を理解することができるようになります。
　

```math
  P( X[n+1]=x[n+1], Y[n+1]=y[n+1], S[n+1]=s[n+1]\ |\ X[n]=x[n], Y[n]=y[n],\\ S[n]=s[n], C[n+1]=c[n+1], C[n]=c[n], C[n-1]=c[n-1], H[n]=h[n] ) \ \ \ \ (4)
```

　
　すべてのモデルと同様に、生成RNNモデルは制限がないわけではありません。例えば、生成RNNモデルは動物のベクトル描画のようなより複雑なデータセットで訓練することは難しいでしょう。それぞれの画像の性質が複雑で、多様であるからです。例えば、ある動物を描写するときに、モデルは目や耳、鼻、体、足、しっぽのようなより高次の概念を学習する必要があります。人が書いたり描いたりするとき、ほとんどの場合、事前に書きたいものに関するアイディアを持っています。このモデルの１つの欠点は、出力層だけにランダム性が集中していることであり、このような高レベルの概念を捉え、生成することができないのかもしれないです。

　このRNNのテクニックの見込みのある拡張は、RNNをVariational RNN ([VRNN](http://arxiv.org/abs/1506.02216))に変換して、条件付き確率分布を学習することです。この新しい方法を使うことによって、コンテンツの種類や出力のスタイルを管理するために、[潜在変数](https://en.wikipedia.org/wiki/Latent_variable)や[thought vector](http://www.iamwire.com/2015/09/google-thought-vectors-inceptionism-artificial-intelligence-artificial-neural-networks-ai-dreams-122293/122293)をモデルに埋め込むことができます。Graves氏の論文では、VRNNを先ほどと同じ手書き文字の実験に適用したときに、いくつかの頼もしい結果が出ました。VRNNによって生成された手書き文字のサンプルは、あるスタイルからほかのスタイルに変わらずに、同じ手書きのスタイルを維持しています。

　結論として、この論文はRNNを生成モデルとして動かせるようにする方法論を紹介し、コンピューターがコンテンツを生成する領域における、興味深い方向性を開拓しています。