おおまかな内容
「そうよ。あれは『効率化のための転置行列』ではないの。『AutoEncoder』本来の力を私たちが押さえ込む為の拘束具なの。」
「その呪縛が今自らの力で解かれていく。私たちにはもう『AutoEncoder』を止めることはできないの。」
(ということで、『重み共有』が解除されたようです。)
「始まったな。」
「ああ、全てはこれからだ。」
なぜやるのか・どうなると思うか
もちろん『重み共有』を解除するのはボクです。あしからず。
『重み共有』にしていると、元の情報→フィルターによる抽出(エンコード)→圧縮情報→フィルタ自身を生成器とみなして逆変換(そして合成)(デコード)→もとに近い情報となります。元と同じにするのが大前提なので、実質逆関数でいいということのようです。
デコードにオペレーションを加えると、移動でも回転でも拡大縮小でもできるはずです。これが学習できるか?という実験です。(普通の1層の学習になるので、できるとは思いますが、実証しないとなんとも言えません。)ボク、とっても気になります。
準備と実験のやり方
par_untied = Trueとして W2がW1の転置行列であることをやめ、独自に計算をします。
変換元には元と同じく トレーニングデータ xを使いますが、 学習させるときは、xに画像的な移動や回転や拡大、縮小をかけてそれを学習させます。各種コスト関数や指標は「元の状態に戻る前提」で比較しているので、比較関連のグラフや値はひどいものになると思いますが、学習自体のロジックは上の(移動などの)写像オペレーションを加えるだけで(あと重み共有をやめる以外は)変更がありません。自分自身へ復元するだけではなく、写像(変換)を含めて復元することを期待します。
実験の結果
結果は複数回にわけて報告します。まずは移動です。以下のようになりました。
まとめ(わかったこと・わからなかったこと)
移動のオペレーションを含めて、画像をエンコード・デコードできました。
ボクとしては、「うまくいく」の「とうまくいかない」(W2実装のバグを含め)の半々な感じだったので、とてもワクワクしました。
回転は次の実験にご期待ください。(期待どおりだとつまらないですが、たぶん期待通りになります。)
第4使徒は蛇ににている?あれは手なのかそれとも足なのでしょうか?
やってみる前は学習できるのか、半信半疑でしたが、あっけなくうまくいきました。いろいろ思った通りに動作するので、ボクの『自己符号化器』は結構素直ないい子だと思います。意図的なオペレーションを加えて学習させているので、もはや『自己符号化器』ではなく通常の単層学習層かもしれません。他にもいろいろな実験用の機能を取り込んですすめていきたいと思います。あくまで、『自己符号化器』の範囲から大きくそれないで進めていくつもりです。
「やはり目覚めたのよ。彼女が。。。」...
「S2機関を自ら取り込んでいるというの?。『AutoEncoder』初号機が。」(ダメ押しw)