2017年9月21日木曜日

RNN(Recurrent Neural Network)による時系列データ予測の分かりやすい例

RNN(Recurrent Neural Network)を使った時系列データの予測(推定)を理解するための良い例題(アプリ)がGoogleから提供されています。とても参考になるように思います。

https://magenta.tensorflow.org/sketch-rnn-demo

We taught this neural net to draw by training it on millions of doodles collected from the Quick, Draw! game. と書かれています。


以下の例は、「人の手」の簡単なイラストです。これを無数に用意して、RNNに学習させているはずです。RNNの学習とは、「P1, P2, P3, ... , Pn-1」まで描いた次はPnへ行きます、という時系列データセットP = {P1, P2, P3, ... , Pn-1, Pn }を十分多く用意します。そして、このようなデータセット群の全てについて、以下を満たすような一つの近似関数Fを求めることです。
 Pn = F(P1, P2, P3, ... , Pn-1)

十分満足できるようなFに到達するには、多くの学習回数が必要となるでしょう。以下は、そのような学習が済んだRNNを使っているはずです。

[Case1] マウスで、親指から人差し指の途中まで描くと、RNNはうまく、残りの部分を描いてくれました。



[Case2] 今度は、小指から薬指の途中まで描くと、これについてもRNNはうまく、残りの部分を描いてくれました。

[Case3 今度はうまく描けません!親指と人差し指あたりを強調するため、何度も行ったり来たりしたためです。そのような点列のデータは、このRNNは学習していなかった!


2017年9月16日土曜日

チンパンジーと人工知能(Deep Learning)による「じゃんけん」の理解

[追記:2017-9-17]チンパージと人間(または人工知能)とのじゃんけんについて追加しました。
 
 チンパンジーに「じゃんけん」のルールを理解させることに成功した(京都大学にて)とのニュースがありました。

http://www.kyoto-u.ac.jp/ja/research/research_results/2017/documents/170810_1/01.pdf
http://www.kyoto-u.ac.jp/ja/research/research_results/2017/170810_1.html
https://www.youtube.com/watch?v=5qqLKADacOE

 それならば、現在の人工知能Deep Learnig、特にCNN(畳み込みニューラルネットワーク))にも同じことをやらせてみよう、というのが本稿の趣旨です。以下では、私の理解した京都大学での実験をもとにしました。(私の理解に誤りがあるかも知れません。その節はご指摘いただければ幸いです。)



チンパンジーは何を学んだのか
 下図に、チンパンジーの手による「グー」「チョキ」「パー」があります。それぞれ1種類のみです。このうちの異なる2つを並べた画面をみて、どちらが勝ちかをチンパンジーに学ばせます。勝ちの方を正しく答えた(指を指した)場合に、餌をもらえます。


 そのような画面(左右入れ替えも含めて6種類の画面)を、1日に144回(3パタン×48回)学ぶ。それを約100日続けた結果、6種類のどの画面が出ても、正しく答える(指さす)ようになった。
 なお、この1セットの画像以外に、「手の甲とひらを変えた画像のセット」や「人間の手による画像のセット」でも、同様に学習できることが判明したとのこと。

人工知能 CNN君による学習
 結論から言いましょう。CNN(畳み込み層3層+α)では、チンパンジーが学習した6種類の画面に加えて、さらに12種類の画面(合計18種類の画面)を学習しました。これに60エポックを要しました。その学習結果を使って、本来の6種の画面をテストした結果、すべてに対して正解を得ました。(十分に学習が済んでいれば当然そうなります。)下図が、その出力結果図です。ここでのCNNは、Keras on Tensorflowを使って構成しました。


(注)このCNNでは、18画面を学習用データとしました。そのうちの6画面をテスト用にしました。通常の場合は、学習用データをテスト用データは別々に用意しますが、チンパンジーの学習の仕方に合わせるため、このようにしました。

簡単な考察

  • チンパンジーの学習では、学習完了までに、6種のうちのいずれかの1画面×140回×100日 = 14,000回画面を見た。
  • 人工知能CNNでは、学習完了までに、18種類の画面×60回 = 1,080回画面を見た。
  • 単純計算では、(かなり乱暴だが)CNNはチンパンジーよりも、14,000/1,080 = 13倍の効率で学習できたとも言える。
  • チンパンジーは、6種類の画面だけをひたすら学習した。
  • 一方、CNNではこの6種類の画面だけでは、十分に学習することができなかった。以下のようにさらに12種の(元の画像を左右に回転させるなどして得られた画像を編集した)画面を追加して学習することで上記の結果を得た。
  • すなわち、チンパンジーは少ない種類の画面を多くの反復回数をかけて学習した。一方のCNNは、(いくつかの変形を含む)多くの種類の画面を少ない反復回数で学習した。これは、CNNの重要な特性であろう。






チンパンジーと人間の間のじゃんけん

 この京大の研究結果に基づいて、将来的には、チンパンジーと人間(または人工知能CNN君)がじゃんけんすることもありそうです。そこまでは検証できませんので、ここでは、CNN君が、下図のような、チンパンジーと人の手の組み合わせでも難無く学習できることを示しておきます。

 実際に学習した成果(CNN君による判定結果)を示します。チンパンジーの手だけの場合と比べて、特に難しいことではありませんでした。CNN君にとっては。


2017年9月10日日曜日

LSTMによる学内消費電力の予測

 Deep Learningにおいて、CNN(畳み込みニューラルネットワーク)とRNN(再帰型ニューラルネットワーク)はその双璧とも言えよう。ここでは、RNNのうちのLSTM(Long short-term memory)の応用について検討する。

 LSTMと言えば、時系列のデータ。株価、為替、乗客数、売り上げ等々、予測したいものはいくらでもある。ここでは、大学らしいデータでやってみたい。公開されている「KAIT学内電力使用状況」のデータを対象として検討した。Keras(on TensorFlow)を使用した。




簡単な考察
  1. 約1日半の実測データのうちの6割を使って学習。(夏期休業中の金曜と土曜のため、電力消費は少ない。)
  2. ここでの学習とは、時点tでの実測値とそれ以前の連続nステップ(ここではn=2)前のデータから成る順序付きセットを、(t+1)での実測値に結び付けることである。それらの結び付けを全部(可能な限り正確に)反映するマシンLSTM(ニューラルネットワーク)を作成することである。
  3. その学習結果にしたがって予測を行う。上図のとおり、学習が進む(epochが増える)にしたがって、良い予測結果が得られている。
  4. ただし、誤解がありそうである。評価領域での予測は、何もデータを与えずに予測するのではない。あくまで、学習済みLSTMを使って、②で示した時刻tまでの実測値のセットから次のステップ(t+1)での値を予測する。
  5. 今回の時間刻みは30分毎にしてある。したがって、基本的には30分後を予測する。しかし、その予測がかなり妥当であれば、それを元にさらにその先を自動的に予測することも可能かもしれない。
  6. 学習用領域における、学習済みのLSTMを用いた予測結果は、当然、評価領域での予測よりも良好になるはず。