はじめに
前回:加算と減算を同時に学習できるか? は加算と減算を同時にできるのか、ということについて試してみました。「加算」「減算」単体ではうまくいきましたが、「加算と減算を入力で切り替える」のはどうもやり方が悪いのかできませんでしたが。。。
今回は、今まで整数kの入力するのに2進法で表現していましたが、そもそも入力には実数値がとれるので、k/N を入力としたときにkが出力できるのか試してみます。できて当たり前のような気もしますが、頭の中にその式がすぐに浮かんでこなかったので実際に試してみます。
お題:k/Nの実数入力から k を出力できるのか?
問題
- 問題: 0~1の実数を 0~Nの出力に対応させる学習ができるか
- 入力: 1つの k/N (k=0~N) という実数 (入力層は1個)
- 出力: k に対応する Nodeを1にする (出力層は N+1個)
例えば、N=4だとして、
0 -> 0.0, 1 -> 0.25, 2 -> 0.5, 3-> 0.75, 4 -> 1.0
という入力から、対応する出力のNodeを1にするという問題です。
実験
Nは 2~8 の間で試してみました。中間層は適当です(あってもなくても学習できたので)。
結果
問題なく学習出来ました。なるほどー
追加のお題: 2つの k1/N, k2/Nの実数入力から k1+k2 を出力できるのか?
前のお題の発展です。
問題
- 問題: 0~Nの整数を0~1の実数にMappingした入力を2つとり、その足し算を0~2Nの対応するNodeに出力することを学習できるか
- 入力: 2つの k1/N, k2/N (k1,k2 = 0~N) という実数 (入力層は2個)
- 出力: k1+k2 に対応する Nodeを1にする (出力層は 2N+1個)
実験
結果
これも問題なく学習出来ました。
さいごに
この実験から、例えば、ゲームにおいてあるマスのオブジェクトがN種類あり得る場合、
1マス辺り1Nodeで表現しても良さそうです(あるマスのオブジェクトkはk/Nとして入力する)。
マスごとにK個の入力Nodeを用意する必要が無いというのは結構便利ですね。
DQNでAtariのゲームをやったときも、ピクセルのRGBをGrayScaleに変換したものを入力にしたようですし、そんな感じでやっても良いっぽいです。