ゲレの工房

ゲーム好きの中の人が、自分が作りたいアプリを作る記録です

Neural Network ConsoleでTanhとReLUを比較してみた

前回までで、CNN(畳み込みニューラルネットワーク)のNeural Network Console上での実装をやってみた。

Neural Network Consoleでエオルゼア文字を解析してみた - 日曜プログラミング
Neural Network Consoleでエオルゼア文字を解析してみた (その2) - 日曜プログラミング
Neural Network Consoleでエオルゼア文字を解析してみた (その3) - 日曜プログラミング

ただ、全結合層の周りの処理などが不勉強なので、少し調べてみた。

以下の記事によると、畳み込み部分と全結合層ではTanhよりReLUを使ったほうがよいらしい。

qiita.com

ここでは数学的比較は行いません。
ここでは実装を行い、その比較まで行いたいと思います。
グラフィカルに実装し、ぱっと実行結果を比較できるのはいいですね。

前回までの実装から、Tanh部分をReLUに変更

Neural Network Console上での作業

実際に構築してみた。こんな感じになります。ただTanhをReLUに入れ替えただけなので詳しい説明は省きます。

f:id:gelehrtecrest:20170826041323p:plain

実際に動かしてみた

確かに動きますね。学習結果タブから評価を行ってみましょう。

blog.dl.sony.com


グラフィカルなものを比較したかぎり、エラーが少なく、結果の収束が早い気がします。

Tanhでの学習グラフ

f:id:gelehrtecrest:20170826054332p:plain

ReLUでの学習グラフ

f:id:gelehrtecrest:20170826054408p:plain

ただ、これでは正確な比較になりません。

互いに10回ずつ実行して比較してみた

グラフィカルに比較できるのはいいですが、ちょっと見づらいですか?
見づらいですね。でも直感的に見れるのはイイと思います。

ちょっとCSSで吐き出してみました。それを表に変形してみます。

Tanhでの結果

実行タイムスタンプ Validation Best Validation
20170826_044716 0.003396 0.001613
20170826_044310 0.002703 0.002103
20170826_043947 0.002729 0.003344
20170826_043628 0.006254 0.002706
20170826_043146 0.004643 0.002834
20170826_042824 0.003469 0.002378
20170826_042440 0.036845 0.003467
20170826_042041 0.005067 0.001765
20170826_041617 0.005954 0.003078
20170826_041108 0.008813 0.001854

ReLUでの結果

実行タイムスタンプ Validation Best Validation
20170826_053255 0.001079 0.001019
20170826_052501 0.001019 0.001266
20170826_052122 0.001094 0.001009
20170826_051721 0.001102 0.001251
20170826_051321 0.001496 0.001412
20170826_050703 0.001113 0.001375
20170826_050347 0.003981 0.001263
20170826_045851 0.001095 0.001326
20170826_045543 0.001100 0.001049
20170826_045110 0.001241 0.001490

まだちょっと読みにくいですか?読みにくいですよね?
せっかくCSVで吐き出しているので、Google スプレッドシートでグラフにしてみます。

tenh10_relu10.csv - Google スプレッドシート

グラフの画像はこうなりました。
左側10件がTanh、右側10件がReLUです。
赤点が学習途中の一番良かったValidation、青点が学習が終わったときのValidationです


f:id:gelehrtecrest:20170826061847p:plain

ReLUの方が精度いいことがわかりやすくなったかなと思います。

今後の予定

さて、ReLUでの計算が言語を超える力の実装に組み込めるか

TensorFlowの関数にReLUあるかどうか。ありますよね。こういう汎用関数がたくさん用意されているからTensorFlowが流行っているんですよね。
以下のサイトを参考にしました。

qiita.com

自分のソースコードを見直す

実は、自分のコードをしっかり見ていない私。
ネット上に共有してあったソースコードをコネコネして動かしただけのアプリ「言語を超える力」
ソースコードをみるとすでに ReLUを使っていますね。先人の知恵、すげー

gist0d0ce6876f44c4a7fd771a2df5c621c5



今回もFF14要素がないなぁ。カテゴリからは外さないけど。

今回はここまで
それではー


広告