LUT-NetworkでAutoEncoder
AutoEncoderが動いた
しばらく開発に打ち込んでいたり、いろいろと行事もあって、ブログの更新が出来ていませんでした。
その隙にLUT-Networkの開発の方は順調に進みまして、いくつかの成果が得られています。
Twitterの方には報告していましたが、流れていってしまうのでひとまず最新の成果であるAutoEncoderの適用をブログにも書いておきます。
MLPでの最初の1枚
下記が、一番最初に何も考えずに、もともと作っていた、MLP(Multi Layer Perceptron)でMNISTを行うネットの出口を32にして、Encoder適当につけて回したときの1枚だけの画像ダンプです。x7 でのオーバーサンプルでバイナリ変調していますが、回路自体はFPGA用のバイナリ回路です。
きっと歴史的な1枚に違いありません(大嘘)
まさか動くと思ってなかったのですが、見てのとおりなんとなく数字の7が見えます。
急にやる気が出てきました。
最終段でのBatchNormalization取り外し
さて、先ほどの数字の周辺ですが、MNISTでは外周は殆ど黒で学習は簡単なはずなのに砂嵐状のノイズがいます。
これは今回、律儀に全部のBinarizerの前にBatchNormalization を入れていたので、「全部0を出力する」ということが出来なくなっていたためと思われます。
早速、最終段のみ BatchNormalization を取り外して、1 epoch だけ回して見たのが下記です。
1 epoch なので、いろいろイマイチですが、BatchNormalization の課題は見えてきました。
もしかしたら最終段以外もBatchNormalizationの多用は、偏った表現を禁じてしまう点で不利な部分もあるのかもしれません。今後の研究課題です。
CNNに挑戦
さて、AutoEncoder といえばやはり畳み込みでしょう。
ということでUpSamplerを作って、ちゃんと普通のAutoEncoderを作ってみました。
間は32bitに絞っているので、表現能力はそのレベルですが、かなり特徴を掴んだエンコード&デコードが出来ているようです。
AutoEncoderは派生でいろいろな応用があるようなので、今後まだまだ改善の余地はありそうです。
おわりに
なお、私は、普通のネットで普通のAutoEncoderをやったことがありません。
自作プラットフォームで、バイナリで、疎結合で、基本素子もパーセプトロンとは異なる独自素子で、FPGA化用。
それでも動いちゃう不思議な面白い世界です。ちゃんと絵が出ました。
もちろん先人の情報あればこそですが、面白くなってきました。
ちなみにAutoEncoderが動くということは、認識だけじゃなくて、生成もやれる可能性が出てきたという理解でおります。流行のGANとかも限定的になにかやれるかもしれないですね。
なお、AutoEncoderの前に実験して、これまた Twitterにだけ流して終わっていた、バイナリ変調については、調子に乗ってQiitaに記事を書いてみました。
« パーセプトロンに代わる素子の可能性について | トップページ | 「夏のAI EdgeハードウェアMeetup in 福岡」でお話させて頂きます »
「Deep Learning」カテゴリの記事
- Deep Learning の開発フロー(2020.03.23)
- LUT-Networkの蒸留とMobileNet風構成とセマンティックセグメンテーション(2020.03.09)
- LUT-Networkの蒸留(Distillation)について(2019.12.29)
- FPGAでのDNN(Deep Neural Network)の整理(LUT-Netまとめ)(2019.12.15)
- LUT-NetのFPGAリソースについて(2019.12.08)
この記事へのコメントは終了しました。
コメント