バイナリLUT-Networkで回帰問題をやってみる
バイナリネットワークをやっていると課題の一つに「普通にやると回帰問題が解けない」というのがあるかと思います。
バイナリネットはバイナリを入れてバイナリを出力しますので、そのままでは多値的なものが扱えません。例えば二乗誤差が最小になるようにフィッティングしたい場合、ターゲットが0.5だと0でも1でも誤差が変わらず最小化される余地がありません。
一方で、バイナリであっても1になる確率というものは、もっとアナログ的な値を持っており、確率的な動作は可能です。
信号処理の世界にはバイナリ変調という考え方があります。
例えば下記のサイトのような⊿Σ変調は有名ですし、現在のオーディオは1bitDACが主流です。
ということで私もアイデアだけは前からもっており、先日のFPGAXでも下記のアイデアを書かせていただきました。
現在、BinaryBrain Version3 を作ろうとしているのですが、その過程でちょっと試してみましたので、紹介しておきます。
バイナリでもオーバーサンプリングすることで、多値になるので2乗誤差が計算できますし、結果もちゃんと収束傾向にあるようで、そこそこのフィッティングはするようです。
回路の利用の仕方が変わるだけで、回路自体は肥大化することはありません。従来多値を空間方向のリソースで計算していたのを、時間方向に転嫁しているわけです。
回路の利用の仕方が変わるだけで、回路自体は肥大化することはありません。従来多値を空間方向のリソースで計算していたのを、時間方向に転嫁しているわけです。
条件は十分揃えられてないのであまり比較にならない部分もあるのですが、通常のFP32でのDenseAffineとバイナリ疎結合の LUT-Network
でそれぞれ scikit-learn の diabetes のデータを 0.0-1.0
で正規化して損失関数は二乗誤差として解かせてみました。バイナリは255倍のオーバーサンプリングです。
255倍のオーバーサンプリングですので、8bit程度の精度で出力できているはずです。
なお、こちらのサイトなどを参考にさせていただいてます。私のものはバイナリ計算に都合がいいようにレンジを補正しているので、サイトの損失値とは比較できない点はお気をつけください。バイナリとの比較もあって、FP32の方は活性化もSigmoidにして素のSGDでフィッティングしています。
なお、まだプラットフォームの開発とデバッグの真っ最中なので、いろいろと不具合を孕んでいる可能性がある点はご了承ください。特に定量性はあまり無いと思います。ただ可能性としては面白い特性が出てきたので、速報レベルのネタ記事です。
(2019/03/12追記)
個人的にはなかなか面白い特性の発見だったのですが、タイミング的に Edge TPU の衝撃に埋まってしまった感じがあるのと、TPUに乗り遅れて悔しい(笑)ので、少し、専用LSIについて追記してみます。
FPGAを計算機とだけ見てしまうと、CPU/GPUよりもFPGAが向いている計算領域があったとして、最初はFPGAで性能が出るわけですが、ここで専用LSIが出てきてしまうとFPGAは負けてしまいますので、どうしてもボリュームゾーンではプロトタイプフェーズでしか出番が無いという宿命を背負っているわけです。専用計算機と汎用機の中間ぐらいにいるのでやむなしかと思います。
一方で、LUT-Networkに関して言えば、唯一この規則の例外でして、LUT-Network用の専用LSIを作ったとしたらそれはFPGAそのものに他ならないわけです。
このネットワークに関しては専用LSIに後からフィールドを奪われる心配が無い上に、FPGAが持つ本来の性能としての演算器を外部I/Oと直結できるというメリットや、バイナリ故の、空間を圧縮して時間方向に処理を増やす方向でのアプローチでリアルタイム性を高めるられるという可能性が残っています。
今回、バイナリでも回帰が出来そうだという話は、I/O直結でリアルタイムな信号処理を行う分野に、ある程度高度なAI処理を適用できる可能性がでてきたという意味を含んでいると考えており、まだまだFPGAにも組み込みAI分野で生き残る可能性があるのではという希望とともに、もうちょっと頑張ってみようと思っている次第です。
ちなみに上記のいいとこ取りしたのがAIコア入りのFPGAのようにも思える部分はあるのですが、既存のAIコアは、RTLのロジックの中に組み込むというよりは、GPU的な高性能ノイマン型が入っているイメージが強く「リアルタイム」とは少し違うような気がしています。
本当の意味で、データフロープロセッシングをリアルタイム信号処理のデータフロー内にワンパスで入れ込もうとすると、量子化とスパース化を論理限界まで攻めてみる必要があるように思っています。
本当の意味で、データフロープロセッシングをリアルタイム信号処理のデータフロー内にワンパスで入れ込もうとすると、量子化とスパース化を論理限界まで攻めてみる必要があるように思っています。
この分野、まだ誰も論理限界を示せていないのではないかとは思う次第です。
« fpgax発表資料(2019/02/02) LUT-Network | トップページ | LUT-Networkの為の学習方法アイデアメモ »
「FPGA」カテゴリの記事
- 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)
- MNIST認識のリアルタイム動作環境更新(2019.09.02)
「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)
この記事へのコメントは終了しました。
« fpgax発表資料(2019/02/02) LUT-Network | トップページ | LUT-Networkの為の学習方法アイデアメモ »
コメント