再帰型ニューラルネット
再帰型ニューラルネットは回帰(型)ニューラルネット、あるいは循環ニューラルネットと訳されることもあるがどちらも同じもの1。再帰型ニューラルネットワークとは、内部に閉路をもつニューラルネットの総称2。
1岡谷 2015 p.112
2岡谷 2015 p.114
synaptic.js
synaptic.jsはアーキテクチャによらないJavaScriptのnode.jsおよびブラウザ向けのライブラリ。
今回はDemoとして公開されている下記Discrete Sequence Recallを試す。
Discrete Sequence Recall (処理に時間が掛かるためPCブラウザでの閲覧を推奨)
このデモでは入力として色で分けられた●からなるSequenceを受け取り、灰色●、黒色●(いずれもPromptsクラス)を受け取った時に水色●と緑色●(Targets)を、Sequence内の順番通りに出力する。Sequenceの中には、Targets、Promptsいずれにも含まれないDistractors(●●)が含まれる。このネットワークはどれがTargetsか、Promptsか、Distractorsかを事前に知らない。
var LSTM = new Architect.LSTM(6,7,2); LSTM.trainer.DSR({ targets: [2,4], distractors: [3,5], prompts: [0,1], length: 10 });
Architest.LSTM
ソースコード
Synaptic.jsが提供するLayerオブジェクトを活用し、ネットワークの構築が下記の様に行われる。peepholesが何を意味しているのかは不明。
architest.js 90行目-159行目
architest.js 165行目-173行目
165行目以降で新たに作成するTrainerオブジェクトのプロパティ値を用意する。new Trainer()の第一引数として指定された値は、Trainerのnetworkプロパティとなる。
Trainer.DSR
ソースコード
iterationの値(規定値:100000)の数だけ、シーケンスの作成、訓練を行う。
"TRY ANOTHER SEQUENCE"ボタンをクリックした時の挙動
ソースコードvalidate関数が呼び出される。その後一連の手続きを経て(next関数に入る)新たなinput配列が生成され、それを引数として LSTM.activateが呼び出される。LSTM.activateはpredictionを返却し、このpredictionを引数としvalue関数を呼び出すと、その戻り値としてLSTMの出力が何番目のTargetsに当たるのかが得られる(Targetの出力がない場合はvalue関数の戻り値が"none"となる)。
next関数はinput, output行を出力する度に呼び出される。そのためnext関数内で実行されるLSTM.activateもその分だけ呼び出しを受ける。
参考書籍
- 岡谷貴之(2015)『深層学習 』(機械学習プロフェッショナルシリーズ)講談社