アソシアトロン でMISNT

MINSTの手書き数字のパターン認識をアソシアトロンでできないかと思っている。ディープラーニングに勝とうというわけではない。そもそも、アソシアトロン ではできない可能性が高いが、何事も挑戦である。

基本的なアイデアはこうだ。

まず、MNSITは28X28の画像データになっている。以前、ディープラーニングでやったことがある。MNIST手書き数字データで93%の識別率

1ピクセル1バイトのデータになっていたと思う。例えば、ゼロ以上の値を持つピクセルを1とし、それ以外を-1としてアソシアトロン に乗せると、パターンのベクトル次元は、784次元しかない。一方MNISTの学習データは60000個あるのだ。784次元にこれだけのパターンを学習させるのは、つまり前のアソシアトロン の原理で説明したM行列を作成するのは、ほとんど不可能だというか、意味がない。識別不能であることがやる前から明らかだ。

アソシアトロン は、パターンの情報を分散させることでその威力は生まれているわけだから、784次元はMNISTには少なすぎるのである。

そこでまず、もともと1ピクセル1バイトだから、その値をビット化して、例えばあるピクセルのデータが77だったら、'01001101'として、のちに0を-1に変換すれば、784x8=6272次元になる。さらに、1ニューロンは、0,1,-1のいずれかなので、2ビット必要になるので、6272x2=12544ニューロンを使うことになる。具体的なやり方は、1の時は、10、0の時は、00、-1の時は11にすればいい(一つ使わないものが出るがそれは問題ない)。

これで結構増えた。

でもまだ足りない。何しろデータは60000組あるのである。ここで、少しトリッキーな操作をすることが考えられる。現時点では、あくまでも、こうしたらいいかなという程度の思いつきである。

上で示したように、1ピクセルは、8x2=16ビット(16ニューロン)で表されるのだが、この各ニューロンにランダムなゆらぎを与えよう。今、この16ニューロンは、先の作りから2ビットずつペアになっているのだが、この1ビットめに2ビット使う。この1ビットめが1の時は、新たな2ビットについて、01か10で表すのである。どちらで表すかは、データごとにランダムにxれぞれ0.5の確率で割り振る。

こんな不確実なゆらぎを与えても結果は多分変わらないだろうと思う。そうすると、パターンベクトルは、さらに8倍の大きさになる。

すなわち12544x8=100352、つまり約10万次元となるのである。これだけ増えれば、6万組の学習データの記憶が可能になるのではないか。

というのが、私のアイデアである。

ただ、この場合、一つのパターン行列が100352x100352ビットになる。すなわち約1Gになってしまう。これではちょっとコンピュータが持たない。だから、これはちょっと多すぎる。いや、できなくはないか。