LUT-Network
~その後の話~
2022/05/07
Ryuji Fuchikami
渕上 竜司
これまでの経緯とか
私が LUT-Network を FPGAX#11 (2019/02/02)で発表させ
ていただいて2年以上が経ちました。
その後、夏のAI EdgeハードウェアMeetup in 福岡 で発表したり
SWEST21で発表していただいたり。
そして、@FIssiki様の多大なるご協力のもと、ICCE2019(Berlin)に
て発表できました(私日本で仕事してたので、当日何もしてませんが)。
BinaryBrain も Ver4.2.2 となり Star もいっぱい頂きました
PyPI のダウンロード数もそこそこ有難いレベルに(感謝)
2
改めて LUT-Network の本質を
再考してみます
3
(ある工夫を加えることで)
デジタル回路は微分可能
という話
4
微分可能なものは
そのままDeep学習可能
5
微分可能な条件とは…
観測したときにアナログ値の確率で1が観測されるバイナリ値に変換すること
6
例) ⊿Σ変調や、D級アンプなどもこの一例である
Stochastic演算
7
1110111101
0100111010
0100111000
1の出現率0.8
1の出現率0.5
0.8×05 = 0.4
お互いに相関無く確率的にのみ1/0が現れるデータであれば、
ANDゲート1個で出現確率の乗算が出来る
1の出現率0.4
バイナリ変調済みデータ列はゲート1個で乗算できる可能性がある
この考えをFPGAのLUTに適用すると…
8
Stochastic-LUT モデル
9
-
*
-
x0
x1
*
W0
binarize
*
*
W1
*
*
W2
*
*
W3
1
1
+ y
2入力LUTの例 x0-x1 を入力する確率変数. W0-W3 をテーブル値とする
W0 が参照される確率 : (1 - x1) * (1 - x0)
W1 が参照される確率 : (1 - x1) * x0
W2 が参照される確率 : x1 * (1 - x0)
W3 が参照される確率 : x1 * x0
y = W0 * (1 - x1) * (1 - x0)
+ W1 * (1 - x1) * x0
+ W2 * x1 * (1 - x0)
+ W3 * x1 * x0
値をすべて観測時に0と1のどちらかの値に決まる確率変数として確率値をFP32で扱います。
この計算グラフは微分可能であるため、誤差逆伝播が可能です。
6入力LUTのグラフは図示すると巨大になるので作成していませんが、同様に作成可能です。
確率的LUTモデルを用いることで、一度に非常に多くのバイナリ値を計算したのと同じ効果が得られるため、
micro-MLPよりも高速/高精度な結果が得られます。W値はそのままLUT化できます。
(詳しくは ICCE2019 の発表資料などをご参照ください)
Stochastic-LUTモデルの内部のパラメータ
10
input[n-1:0]
output
LUTテーブルは入力数nに対してn次元を持ち、その中で連続体として振舞います。
上記は2入力LUTにXORを学習させた場合の模式図です。
内部の状態テーブルを参照する形式を取るために、パーセプトロンモデルと違っ
て単独でテーブルをXOR形状に学習することも可能です
2入力LUTをXOR学習させた場合の例
入力データのStochastic化と計算機効率
肝はオーバーサンプリング
(⊿Σ変調やD級アンプ、高速度カメラなど)
11
データがバイナリ量子化され周波数が上がる
(空間軸情報の時間軸への拡散)
データ:演算比が 1:1 に近づき
LSI内のトランジスタの演算器割り当て比率が上がり
効率の高い計算機が作れる
計算機効率とデータ帯域の例
10M sample/s のデータに 160MHzの演算器を割り当てた場合、
演算器は16回再利用しないと効率が出ない
12
16個の係数を演算器にリロードするために、
メモリ/シーケンサ/DMAなどの回路リソースを消費
(計算機効率ダウン)
16倍にオーバーサンプリングして160M sample/s とすれば
すべてが専用計算気にできるのでリソースの100%を演算器に割り当て可能
(FPGAの場合、係数をすべてLUTに織り込める)
いったんまとめると
• Stochastic性を使うとデジタル回路は直接Deepで学習で
きる
• アナログ値にStochastic性を持たせるためにバイナリ変調
(オーバーサンプリング)を掛けると空間の情報を時間に拡散
できる
⇒ 情報の濃度を変えずにデータ:演算比率を変えられる
• データ:演算比率が 1:1 になると効率の高い計算機アー
キテクチャが可能になる(係数が固定でき、係数入れ替えの
ための回路が不要になる)
• LUT-Net が嵌まるアプリではFPGAで大変効率のいい機
械学習が使える可能性がある
13
手書き数字(MNIST)認識の実験事例紹介
14
xc7z020clg400-1
こんな微小リソース量で 認識が1ミリ秒の遅延でできてます
MNISTコア単体性能 CNN時318,877fps
カメラも含めたシステム動作1000fps
認識精度に対する高い省リソース性
15
https://twitter.com/Ryuz88/status/1318874376062685184
「何に対して高いの?」と言われると困るのですが、
当時(ICCD2020)の同条件の発表より、早い段階(ICCE2019)で
小サイズ/高認識率を発表していたわけで…
BinaryBrain の話
• どうやって学習させるの? となったときに 6入力1出力のLUTモデルが
細かすぎて、cuBLAS とか使って速く書くのが困難。
• なので、PyTorch とか Tensorflow でやるのは困難
• 仕方がないから自作しました → BinaryBrain
• 現在 RNN 対応とかもしつつ Ver 4 を公開中
• https://github.com/ryuz/BinaryBrain
16
当時実験できていたこと
17
分類器(Classification)
MNIST
手書き文字
認識率 99%
CIFAR-10
一般物体10種
認識率60%
Auto Encoder Regression
特徴化とそこからの画像生成 重回帰分析のフィッティング
今少し手を付けていたもの
18
https://ryuz.hatenablog.com/entry/2021/08/12/120436
• RNNっぽいことに手を出して、行けそうな雰囲気は確認
• DMAとか書くのがめんどくさくて実装確認が進んでいない
• 試しに HLS 向けに C言語出力させてみたがHLSのコンパイルが進まないので断念中
おわりに
• FPGAでしか扱えないリアルタイム信号処理領域は依
然として存在する
• FPGAは大規模化は依然続いており、ケースによって
はルールベースのアルゴリズムではもてあます程度の規模
• LUT-Network は先に回路リソースを固定して、その範
囲でベストエフォートな認識性能を出すよう学習可能
• 既にFPGAを使っていて、SOTAな認識はいらないがルー
ルベースでは到達できない微妙なレンジが狙いたいとき、
LUT-Net は結構よいソリューションでは?。
19
• 著者アクセス先
• 渕上 竜司 (Ryuji Fuchikami)
• e-mail : ryuji.fuchikami@nifty.com
• Web-Site : http://ryuz.my.coocan.jp/
• Blog. : http://ryuz.txt-nifty.com/
• GitHub : https://github.com/ryuz/
• Twitter : https://twitter.com/Ryuz88
• Facebook : https://www.facebook.com/ryuji.fuchikami
• YouTube : https://www.youtube.com/user/nekoneko1024
20

LUT-Network その後の話(2022/05/07)