おおまかな内容
単細胞な自己符号化器について学習させてみます。
なぜやるのか・どうなると思うか・どこまでやるか
記念すべき第1回の実験は自己符号化器が「単細胞の場合、どんな学習をするのか?」です。へそもないのにとっても「へそ曲がり」なボクの方向性をとってもよく表しています。ボクの2週間近くの努力をちゃぶ台返しするくらいのインパクトはあるかもです。でも「ボク、とっても気になります。」
準備と実験のやり方
プログラムのNode数を1にして実験します。1だといろいろ表示できないケースもあるのですが、気にせずすすみます。
実験の結果
Sigmoid関数ではあまりおもしろい結果にならなかったので、LeakyStepReLUという自作の複合的な活性化関数を使いました。
LeakyStepReLUはLeaky ReLUに飽和要素(Step関数的)をいれたものです。
ちなみに本家Leaky ReLUはこちら。英語がわからないので何が書いてあるかさっぱりです。
実験は以下のようになりました。
まとめ(わかったこと・わからなかったこと)
形成される重みWは「0」の形そのものといった感じです。
デコードでは、おおむね「0」みたいな感じ、「1」みたいな感じ、「9」みたいな感じ、「微妙」な感じの4つぐらいを表せているような気がします。
エンコードした値(右下図)については情報不足で表示できませんでした。
ニューラルネットワークの1つのノードは単独でもある程度の表現力を持つことがわかりました。
感想・思ったこと・考えたこと
単細胞(Node=1)でもあなどれせん。がんばっても2パターンの生成くらいになると予想していたのですが、それ以上のバリエーションがあります。まあアナログ的な挙動なので考えてみれば驚くほどのことではないかもですが、少し意外ではありました。
とくに バイアス b の設定によって、デコードするときフィルタ(=生成元図形)を反転して使用する場合もあるようなことと、活性化関数と中間的な重みの綾で、特出したケース(このサンプルでは0と1が特出したパターンに見えます)以外の場合でも何らかの表現ができそうなことがわかりました。
「蛇」のPythonは、ギリシャ神話に登場する巨大な蛇神「ピュトン」の名に由来します
「学習」Learningという言葉がどうもしっくりきません。そこには何等かの知性、知能がある期待がある気がします。このレベルでは「フィルタの自動生成」や「基本図形の最適重ね合わせ」くらいでしかありません。抽象的な概念抽出ができるくらいなら「学習」といってよい気がします。。。が、世の中にならって、機械学習や「学習」の言葉を使っていきます。(これぞ蛇足)
あと、ボクのページの最大の欠点に気が付いてしまいました。つくりやすく読みやすいようにとフォーマット化しましたが、同じような実験が100個続いたとすると誰も読んでくれなさそうです。さらに特定の「興味」を深く考える(=井戸底から見える範囲しかやらない)というコンセプトから当面は自己符号化器だけの実験となります。そうなると読みどころは、この「蛇足」コーナーということになるかもです。(これまたどうでもいい話)