Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
LUT-Network
~ 新のリアルタイムコンピューティングを目指して~
REVISION2
Ryuji Fuchikami
渕上 竜司
本資料について
• 前回資料「fpgax 2019/02/02発表資料 (Web公開版) 」から
のアップデートです。
• https://www.slideshare.net/ryuz88/lut-network-
fpgx201902
• ...
LUT-Network公開の履歴
• BinaryBrain Version 1 (2018/8/1 ~)
• 「LUT-Network」 と名づけました。
• 原理検証用のベタ書きプログラムのgithubへの公開でした
• バイナリLUTをS...
リアルタイムコンピューティングとは?
• 計算を現実世界のダイナミクスに適合させ、生活空間に計算機を入れ込むこと
• 意識的にPCにアクセスするのではなく、今ある現実世界のスペックでエッジコン
ピューティングが必要。
Human
thing
t...
Real-Time Binary-DNN architecture for FPGA
memory
processor
input
device
output
device
fpsは基本的にベストエフォート
対メモリでの計算
性能は出ても遅延が...
LUT-Network の概要
• 通常のDNN
1. ニューロ素子を配置して結線を定義
2. 学習を実施
3. 各ニューロ素子の重み係数が得られる
• LUT-Network
1. LUT素子を配置して結線を定義
2. 学習を実施
3. 各L...
LUT-Network の性能紹介
7
xc7z020clg400-1
微小リソースで実装可能 超低遅延でリアルタイム認識
MNIST MLP 分類はコア単独なら318,877fpsで動作
1ミリ秒遅延, 1000fps スループット
Network Design
Learning
(e.g. Tensor Flow)
Convert to C++
network
parameter
C++ source code
High Level Synthesis
(e.g. Viv...
LUT-Networkの特徴
• 基本的にはエッジでのPredictionの効率化技術
• バイナリ・ニューラル・ネットワークの一種である
• BDNNで可能なものは(原理的には)学習可能(な筈)
• LUT単位の学習なので高密度&高速(300...
どうやってLUTを学習させるのか?
1. 力技総当り学習
• Trainデータに対して、損失関数が最小化するように直接LUTテーブルを最適化
• 学習可能な構成に制約
• MLPのみ学習可能
• 単独で大きなネットの直接学習は困難(別のBDNN...
力技総当り学習
入力値 発生回数 0出力時の損失 1出力時の損失
0 37932 47813.7 48233.9
1 39482 50001.3 49692.9
2 37028 44698.9 44845.7
3 40640 49257.1 4...
















yxwvu
tsrqp
onmlk
jihgf
edcba
















000
000
000
000
000
wv
ts
ok...
Micro-MLPモデルのActivation
• forward
• Sign()
• 𝑦 =
1 𝑖𝑓 𝑥 ≥ 0,
0 𝑜𝑡ℎ𝑒𝑟𝑤𝑖𝑠𝑒,
• backward
• hard-tanh()
• 𝑔 𝑥 = 1 𝑥 ≤1
Binary C...
確率的LUTモデルによる学習 [new]
14
-
*
-
x0
x1
*
W0
binarize
*
*
W1
*
*
W2
*
*
W3
1
1
+ y
2入力LUTの例 x0-x1 を入力する確率変数. W0-W3 をテーブル値とする
W...
確率的LUTモデル
15
input[n-1:0]
output
LUTテーブルは入力数nに対してn次元を持ち、その中で連続体として振舞います。
上記は2入力LUTにXORを学習させた場合の模式図です。
内部の状態テーブルを参照する形式を取るた...
学習 推論
行列
Matrix
重み
Weight
活性化
Activation
畳み込み
Convolution
Deep
Network
CPUs/GPUs FPGA
Binary
Connect
密行列
(Dense)
2値
(Binar...
動作事例1
[MNIST MLP 1000fps])
DNN
(LUT-Net)
MIPI-CSI
RX
Raspberry Pi
Camera V2
(Sony IMX219)
SERDE
S
TX
PS
(Linux)
SERDES
RX
...
MNIST MLP 1000fps
LUT: 1182
input:784
layer0: 256
layer1: 256
layer2: 128
layer3: 128
layer4: 128
layer5: 128
layer6: 128
...
DNN
(LUT-Net)
MIPI-CSI
RX
Raspberry Pi
Camera V2
(Sony IMX219)
SERDE
S
TX
PS
(Linux)
SERDES
RX
FIN1216
DMA
OLED
UG-9664HDD...
MNIST CNN (DNN部分)
CNV3x3
CNV3x3
MaxPol
Affine
CNV3x3
CNV3x3
MaxPol
Affine
// sub-networks for convolution(3x3)
bb::NeuralN...
MNIST CNN (システム全体)
include Camera and OLED control
21
result of: RTL-simulation
MNIST CNN 学習ログ [micro-MLP]
fitting start : MnistCnnBin
initial test_accuracy : 0.1518
[save] MnistCnnBin_net_1.json
[load]...
MNIST CNN 学習ログ [確率的LUT]
fitting start : MnistStochasticLut6Cnn
72.35s epoch[ 1] test accuracy : 0.9508 train accuracy : 0....
線形回帰計算ログ [確率的LUT]
(scikit-learnのdiabetesデータを利用)
fitting start : DiabetesRegressionStochasticLut6
[initial] test MSE : 0.05...
Learning prediction
operator
CPU
1Core
operator
CPU 1Core
(1 weight calculate instructions)
FPGA
(XILIN 7-Series)
ASIC
mul...
オーバーサンプリングによるバイナリ変調モデル
• オーバーサンプリングと量子化による変調
• PWM(Pulse Width Modulation)変調
• ⊿Σ変調
• ディザ, etc
• 例えば高速度カメラはそれ自身がノイズを多く含むので...
Real-timeの為のアーキテクチャ案
27
DNN
Video-In
ME MC
Video-Out
フレームメモリ
IIRフィルタに似たアーキテクチャ
メモリは過去のものの参照にしか使わない
常に最新情報で最善の結果を出力し続ける
次のステップに向けて
• 疎結合の接続ルールの改善
• 現在基本的にランダム結線
• CNNがそうであるように、データには局所性がある
• 実は今も少しチャンネル方向に制限入れて改善している
• 接続先をノード距離でガウス関数などで確率的に決め...
リファレンス
• BinaryConnect: Training Deep Neural Networks with binary weights during propagations
https://arxiv.org/pdf/1511.0...
自己紹介
• 学生時代からいろいろなオープンソース公開している趣味の人
• 1976年生まれ, 福岡在住
• 1998~ HOS (Real-Time OS [uITRON]) 公開
• https://ja.osdn.net/projects...
著者連絡先
• Ryuji Fuchikami (渕上 竜司)
• e-mail : ryuji.fuchikami@nifty.com
• Web-Site : http://ryuz.my.coocan.jp/
• Blog. : http...
Prochain SlideShare
Chargement dans…5
×

LUT-Network Revision2

590 vues

Publié le

2019年4月現在の最新状況を踏まえた資料更新です。
確率的LUTモデルの追加とBinaryBrain version3 の公開が主な内容です。

English Version
https://www.slideshare.net/ryuz88/lutnetwork-revision2-english-version

BinaryBrain
https://github.com/ryuz/BinaryBrain

Publié dans : Données & analyses
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici

LUT-Network Revision2

  1. 1. LUT-Network ~ 新のリアルタイムコンピューティングを目指して~ REVISION2 Ryuji Fuchikami 渕上 竜司
  2. 2. 本資料について • 前回資料「fpgax 2019/02/02発表資料 (Web公開版) 」から のアップデートです。 • https://www.slideshare.net/ryuz88/lut-network- fpgx201902 • BinaryBrain Version3 の公開と、確率的LUTモデルの追加で 劇的に学習効率が上がっております。 2
  3. 3. LUT-Network公開の履歴 • BinaryBrain Version 1 (2018/8/1 ~) • 「LUT-Network」 と名づけました。 • 原理検証用のベタ書きプログラムのgithubへの公開でした • バイナリLUTをSIMD(AVX2)で記述して256並列で計算しました(メモリ配置 CHWN) • 学習モデルは力技での総当りに近いものでした • この時点でバイナリ変調の概念を取り込んでいました • BinaryBrain Version 2 (2018/9/2~) • レイヤー構造を有したプログラム構造に移行しました • 誤差逆伝播による学習を可能としました • 最初は単純な疎行列のモデルでした • 途中からmicro-MLPモデルとして、内部に隠れ層を素子を基本としたモデルに移行しました • 畳み込み(CNN)をサポートしました • Verilog-RTLの出力機能をつけました。同時にFPGAデモも公開しました • BinaryBrain Version 3 (March 19, 2019 ~) • フレームバッファ/テンソルバッファを導入し、GPGPU(CUDA)対応を行いました • 確率的LUTのモデルを考案し、forward演算もFP32となり高速/高精度になりました • バイナリ変調による回帰分析への適用を実験し、sampleを追加しました 3 https://github.com/ryuz/BinaryBrain
  4. 4. リアルタイムコンピューティングとは? • 計算を現実世界のダイナミクスに適合させ、生活空間に計算機を入れ込むこと • 意識的にPCにアクセスするのではなく、今ある現実世界のスペックでエッジコン ピューティングが必要。 Human thing thing 電脳鏡 どこでも窓 遅延なき 遠隔制御 宇宙探査ロボ 介護ロボ 電脳メガネ 4 HPC 自立制御 YouTube動画 : https://www.youtube.com/watch?v=wGRhw9bbiik&t=2s offline Human 現実空間
  5. 5. Real-Time Binary-DNN architecture for FPGA memory processor input device output device fpsは基本的にベストエフォート 対メモリでの計算 性能は出ても遅延が大きい ノイマン型アーキテクチャ リアルタイムプロセッシング(データフロー型プログラム) memory processor input device output device オンザフライ演算で低遅延 ハードリアルタイム保証可能 メモリは過去の情報を使うためのもの 5 このアーキテクチャに合うAI計算機としてLUT-Networkを考案
  6. 6. LUT-Network の概要 • 通常のDNN 1. ニューロ素子を配置して結線を定義 2. 学習を実施 3. 各ニューロ素子の重み係数が得られる • LUT-Network 1. LUT素子を配置して結線を定義 2. 学習を実施 3. 各LUTのテーブルが得られる θ x1 x2 x3 xn ・・・ w1 w2 w3 wn y 6
  7. 7. LUT-Network の性能紹介 7 xc7z020clg400-1 微小リソースで実装可能 超低遅延でリアルタイム認識 MNIST MLP 分類はコア単独なら318,877fpsで動作 1ミリ秒遅延, 1000fps スループット
  8. 8. Network Design Learning (e.g. Tensor Flow) Convert to C++ network parameter C++ source code High Level Synthesis (e.g. Vivado HLS) RTL(behavior) Synthesis (e.g. Vivado) Complete (many LUTs, 100~200MHz) Network Circuit Design network (FPGA Circuit) Learning (BinaryBrain) RTL(net-list) Complete (few LUTs, 300~400MHz) Synthesis (e.g. Vivado) LUT-Networkのデザインフロー 【Conventional】 【LUT-Network】 8 学習結果がそのままFPGAに
  9. 9. LUT-Networkの特徴 • 基本的にはエッジでのPredictionの効率化技術 • バイナリ・ニューラル・ネットワークの一種である • BDNNで可能なものは(原理的には)学習可能(な筈) • LUT単位の学習なので高密度&高速(300~400MHz) • ネットワーク定義時に回路規模が決まる • FPGA内のリソースを決めてから、その範囲での最大の認識率が 探れる • つまりリアルタイム保証を先に行える 通常DNNのFPGA適用 LUT Network 認識率 学習時に決定 出来高払い (ベストエフォート) 性能 合成結果で出来高払い (ベストエフォート) 学習に先立って決定 9
  10. 10. どうやってLUTを学習させるのか? 1. 力技総当り学習 • Trainデータに対して、損失関数が最小化するように直接LUTテーブルを最適化 • 学習可能な構成に制約 • MLPのみ学習可能 • 単独で大きなネットの直接学習は困難(別のBDNNから層単位で模倣学習は可能) • 勾配を用いないので非Trainデータに対する特性が従来DNNと異なる可能性がある (Adversarial Examplesなどに効果ないか?) 2. micro-MLPモデル • 従来のバイナリDNNの技法の応用 • 順伝播(Forward)はBinaryで実施し、誤差逆伝播(backward)のみ実数型(FP32)で行う • 学習はGPU上で可能だが、確率的試行が必要で較的遅い。 FPGAでの推論は高速. 3. learning with Stochastic-LUT model • 順伝播も誤差逆伝播実数型(FP32)で行う • 学習はGPU上で可能で、高速且つ高精度。FPGAでの推論はもちろん同様に高速. 3つのアイデア 10
  11. 11. 力技総当り学習 入力値 発生回数 0出力時の損失 1出力時の損失 0 37932 47813.7 48233.9 1 39482 50001.3 49692.9 2 37028 44698.9 44845.7 3 40640 49257.1 49331.0 4 27156 33998.4 33891.0 5 23930 29538.6 29495.2 6 29002 35197.3 35451.4 7 27786 33390.9 33466.9 8 43532 52741.1 52993.5 9 41628 49985.9 50388.5 10 49176 56521.4 56026.1 11 46542 54215.4 54284.9 ・・・・ ・・・・ ・・・・ ・・・・ 59 34268 41152.9 41215.8 60 22872 28852.4 29000.0 61 17930 22068.9 22112.9 62 24156 28213.2 28227.1 63 24194 28367.0 28450.4 新しいテーブル値 0 1 0 0 1 1 0 0 0 0 1 0 ・・・・ 0 0 0 0 0 1. LUTテーブルを一旦乱数で埋める 2. ある1個のLUTの出力を0と1それぞれに固定して学習データ全部流す 3. LUTの入力値毎に損失関数の総和を取っておき、損失が減る方向にテーブルを 更新 11 このやり方でちゃんと未知データの推論が可能でmicro-MLPより高精度
  12. 12.                 yxwvu tsrqp onmlk jihgf edcba                 000 000 000 000 000 wv ts ok gf db Dense-Affine (Fully Connection) Sparse-Affine (my 1st idea) ・ ・ ・ synthesis LUT LUT LUT LUT LUT LUT LUTmapping BatchNormalization Binary-Activation BatchNormalization Binary-Activation Deep Logic XORは学習できない 素子1つで速い(300MHz~400MHz) XORが学習できないのは 従来のパーセプトロンモデル同様 多段なので遅い(100MHz~200MHz) micro-MLP stack(my 2nd idea) LUTmapping BatchNormalization Binary-Activation 単独素子モデルでXORが解ける → 演算密度が高い 素子1つで速い(300MHz~400MHz) ・ ・ ・ Simple Logic LUT includes BN LUT includes hidden layer This unit is “micro-MLP” Micro-MLPモデル 12 Simple Logic
  13. 13. Micro-MLPモデルのActivation • forward • Sign() • 𝑦 = 1 𝑖𝑓 𝑥 ≥ 0, 0 𝑜𝑡ℎ𝑒𝑟𝑤𝑖𝑠𝑒, • backward • hard-tanh() • 𝑔 𝑥 = 1 𝑥 ≤1 Binary Connect と同じもの Batch Normalization は従来と同じものが利用できる 13 BatchNormalization Binary-Activation ・ ・ ・ mapping LUT
  14. 14. 確率的LUTモデルによる学習 [new] 14 - * - 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化できます。 これだけでLUTを完全モデル化 Batch-Normalization不要 Activationも不要
  15. 15. 確率的LUTモデル 15 input[n-1:0] output LUTテーブルは入力数nに対してn次元を持ち、その中で連続体として振舞います。 上記は2入力LUTにXORを学習させた場合の模式図です。 内部の状態テーブルを参照する形式を取るために、パーセプトロン素子と違って XOR問題を解くことができます
  16. 16. 学習 推論 行列 Matrix 重み Weight 活性化 Activation 畳み込み Convolution Deep Network CPUs/GPUs FPGA Binary Connect 密行列 (Dense) 2値 (Binary) 実数 (FP32) OK Binarized Neural Network 密行列 (Dense) 2値 (Binary) 2値 (Binary) OK XNOR- Network 密行列 (Dense) 2値 (Binary) 2値 (Binary) OK LUT- Network 疎行列 (Sparse) 実数 (FP32) 不要 OK good excellent 1 node → many adders 1 node → many XNOR 1 node → many XNOR 1 node → 1 LUT excellent 他のBinary Networkとの比較 16 good 確率的LUTモデルの登場で、学習時のデメリットが大きく解消しました またLUTテーブルの整数型へのパッキングでCPU/GPUでの推論可能性も出てきました
  17. 17. 動作事例1 [MNIST MLP 1000fps]) DNN (LUT-Net) MIPI-CSI RX Raspberry Pi Camera V2 (Sony IMX219) SERDE S TX PS (Linux) SERDES RX FIN1216 DMA OLED UG-9664HDDAG01 DDR3 SDRA M I2C MIPI-CSI Original Board PCX-Window 1000fps 640x132 1000fps control PL (Jelly) BinaryBrain Ether RTL offline learning (PC) ZYBO Z7-20 debug view 17 YouTube動画: https://www.youtube.com/watch?v=NJa77PZlQMI
  18. 18. MNIST MLP 1000fps LUT: 1182 input:784 layer0: 256 layer1: 256 layer2: 128 layer3: 128 layer4: 128 layer5: 128 layer6: 128 layer7: 30 Total Utilization(include Camera/OLED control)Utilization of DNN part 250MHz / (28x28) = 318,877fps
  19. 19. DNN (LUT-Net) MIPI-CSI RX Raspberry Pi Camera V2 (Sony IMX219) SERDE S TX PS (Linux) SERDES RX FIN1216 DMA OLED UG-9664HDDAG01 DDR3 SDRA M I2C MIPI-CSI Original Board PCX-Window 1000fps 640x132 1000fps control PL (Jelly) BinaryBrain Ether RTL offline learning (PC) ZYBO Z7-20 debug view OSD (frame-mem) 19 動作事例2 [MNIST CNN 1000fp] YouTube movie : https://www.youtube.com/watch?v=aYuYrYxztBU
  20. 20. MNIST CNN (DNN部分) CNV3x3 CNV3x3 MaxPol Affine CNV3x3 CNV3x3 MaxPol Affine // sub-networks for convolution(3x3) bb::NeuralNetSparseMicroMlp<6, 16>sub0_smm0(1 * 3 * 3, 192); bb::NeuralNetSparseMicroMlp<6, 16>sub0_smm1(192, 32); bb::NeuralNetGroup<>sub0_net; sub0_net.AddLayer(&sub0_smm0); sub0_net.AddLayer(&sub0_smm1); // sub-networks for convolution(3x3) bb::NeuralNetSparseMicroMlp<6, 16>sub1_smm0(32 * 3 * 3, 192); bb::NeuralNetSparseMicroMlp<6, 16>sub1_smm1(192, 32); bb::NeuralNetGroup<>sub1_net; sub1_net.AddLayer(&sub1_smm0); sub1_net.AddLayer(&sub1_smm1); // sub-networks for convolution(3x3) bb::NeuralNetSparseMicroMlp<6, 16>sub3_smm0(32 * 3 * 3, 192); bb::NeuralNetSparseMicroMlp<6, 16>sub3_smm1(192, 32); bb::NeuralNetGroup<>sub3_net; sub3_net.AddLayer(&sub3_smm0); sub3_net.AddLayer(&sub3_smm1); // sub-networks for convolution(3x3) bb::NeuralNetSparseMicroMlp<6, 16>sub4_smm0(32 * 3 * 3, 192); bb::NeuralNetSparseMicroMlp<6, 16>sub4_smm1(192, 32); bb::NeuralNetGroup<>sub4_net; sub4_net.AddLayer(&sub4_smm0); sub4_net.AddLayer(&sub4_smm1); // main-networks bb::NeuralNetRealToBinary<float>input_real2bin(28 * 28, 28 * 28); bb::NeuralNetLoweringConvolution<>layer0_conv(&sub0_net, 1, 28, 28, 32, 3, 3); bb::NeuralNetLoweringConvolution<>layer1_conv(&sub1_net, 32, 26, 26, 32, 3, 3); bb::NeuralNetMaxPooling<>layer2_maxpol(32, 24, 24, 2, 2); bb::NeuralNetLoweringConvolution<>layer3_conv(&sub3_net, 32, 12, 12, 32, 3, 3); bb::NeuralNetLoweringConvolution<>layer4_conv(&sub4_net, 32, 10, 10, 32, 3, 3); bb::NeuralNetMaxPooling<>layer5_maxpol(32, 8, 8, 2, 2); bb::NeuralNetSparseMicroMlp<6, 16>layer6_smm(32 * 4 * 4, 480); bb::NeuralNetSparseMicroMlp<6, 16>layer7_smm(480, 80); bb::NeuralNetBinaryToReal<float>output_bin2real(80, 10); xc7z020clg400-1 20
  21. 21. MNIST CNN (システム全体) include Camera and OLED control 21 result of: RTL-simulation
  22. 22. MNIST CNN 学習ログ [micro-MLP] fitting start : MnistCnnBin initial test_accuracy : 0.1518 [save] MnistCnnBin_net_1.json [load] MnistCnnBin_net.json fitting start : MnistCnnBin [initial] test_accuracy : 0.6778 train_accuracy : 0.6694 695.31s epoch[ 2] test_accuracy : 0.7661 train_accuracy : 0.7473 1464.13s epoch[ 3] test_accuracy : 0.8042 train_accuracy : 0.7914 2206.67s epoch[ 4] test_accuracy : 0.8445 train_accuracy : 0.8213 2913.12s epoch[ 5] test_accuracy : 0.8511 train_accuracy : 0.8460 3621.61s epoch[ 6] test_accuracy : 0.8755 train_accuracy : 0.8616 4325.83s epoch[ 7] test_accuracy : 0.8713 train_accuracy : 0.8730 5022.86s epoch[ 8] test_accuracy : 0.9086 train_accuracy : 0.8863 5724.22s epoch[ 9] test_accuracy : 0.9126 train_accuracy : 0.8930 6436.04s epoch[ 10] test_accuracy : 0.9213 train_accuracy : 0.8986 7128.01s epoch[ 11] test_accuracy : 0.9115 train_accuracy : 0.9034 7814.35s epoch[ 12] test_accuracy : 0.9078 train_accuracy : 0.9061 8531.97s epoch[ 13] test_accuracy : 0.9089 train_accuracy : 0.9082 9229.73s epoch[ 14] test_accuracy : 0.9276 train_accuracy : 0.9098 9950.20s epoch[ 15] test_accuracy : 0.9161 train_accuracy : 0.9105 10663.83s epoch[ 16] test_accuracy : 0.9243 train_accuracy : 0.9146 11337.86s epoch[ 17] test_accuracy : 0.9280 train_accuracy : 0.9121 fitting end 22micro MLP-model on BinaryBrain version2
  23. 23. MNIST CNN 学習ログ [確率的LUT] fitting start : MnistStochasticLut6Cnn 72.35s epoch[ 1] test accuracy : 0.9508 train accuracy : 0.9529 153.70s epoch[ 2] test accuracy : 0.9581 train accuracy : 0.9638 235.33s epoch[ 3] test accuracy : 0.9615 train accuracy : 0.9676 316.71s epoch[ 4] test accuracy : 0.9647 train accuracy : 0.9701 398.33s epoch[ 5] test accuracy : 0.9642 train accuracy : 0.9718 479.71s epoch[ 6] test accuracy : 0.9676 train accuracy : 0.9731 ・ ・ ・ 2111.04s epoch[ 26] test accuracy : 0.9699 train accuracy : 0.9786 2192.82s epoch[ 27] test accuracy : 0.9701 train accuracy : 0.9788 2274.26s epoch[ 28] test accuracy : 0.9699 train accuracy : 0.9789 2355.97s epoch[ 29] test accuracy : 0.9699 train accuracy : 0.9789 2437.39s epoch[ 30] test accuracy : 0.9696 train accuracy : 0.9791 2519.13s epoch[ 31] test accuracy : 0.9698 train accuracy : 0.9793 2600.71s epoch[ 32] test accuracy : 0.9695 train accuracy : 0.9792 fitting end parameter copy to LUT-Network lut_accuracy : 0.9641 export : verilog/MnistStochasticLut6Cnn.v 23 Stochastic-LUT model on BinaryBrain version3
  24. 24. 線形回帰計算ログ [確率的LUT] (scikit-learnのdiabetesデータを利用) fitting start : DiabetesRegressionStochasticLut6 [initial] test MSE : 0.0571 train MSE : 0.0581 0.97s epoch[ 1] test MSE : 0.0307 train MSE : 0.0344 1.42s epoch[ 2] test MSE : 0.0209 train MSE : 0.0284 1.87s epoch[ 3] test MSE : 0.0162 train MSE : 0.0270 2.32s epoch[ 4] test MSE : 0.0160 train MSE : 0.0261 ・ ・ ・ 27.11s epoch[ 59] test MSE : 0.0146 train MSE : 0.0245 27.55s epoch[ 60] test MSE : 0.0195 train MSE : 0.0256 27.99s epoch[ 61] test MSE : 0.0145 train MSE : 0.0231 28.43s epoch[ 62] test MSE : 0.0133 train MSE : 0.0232 28.87s epoch[ 63] test MSE : 0.0940 train MSE : 0.0903 29.30s epoch[ 64] test MSE : 0.0146 train MSE : 0.0233 fitting end parameter copy to LUT-Network LUT-Network accuracy : 0.0340518 export : DiabetesRegressionBinaryLut.v 24Stochastic-LUT model on BinaryBrain version3
  25. 25. Learning prediction operator CPU 1Core operator CPU 1Core (1 weight calculate instructions) FPGA (XILIN 7-Series) ASIC multi-cycle pipeline multi-cycle pipeline Affine (Float) Multiplier + adder 0.25 cycle Multiplier + adder 0.125 cycle (8 parallel [FMA]) [MUL] DSP:2 LUT:133 [ADD] LUT:413 左×node数 gate : over 10k gate : over 10M Affine (INT16) Multiplier + adder 0.125 cycle Multiplier + adder 0.0625 cycle (16 parallel) [MAC] DSP:1 左×node数 gate : 0.5k~1k gate : over 1M Binary Connect Multiplier + adder 0.25 cycle adder +adder 0.125 cycle (8 parallel) [MAC] DSP:1 左×node数 gate : 100~200 左×node数 BNN/ XNOR-Net Multiplier + adder 0.25 cycle XNOR +popcnt 0.0039+0.0156 cycle (256 parallel) LUT:6~12 LUT:400~10000 (接続数次第) gate : 20~60 左×node数 6-LUT-Net Multiplier + adder 23.8 cycle LUT 1.16 cycle (6 input load + 1 table load) / 6 (256 parallel) LUT : 1 (over spec) LUT : 1 (fit) gate : 10~30 (over spec) gate : 10~30 2-LUT-Net Multiplier + adder 1.37 cycle logic-gate 1.5 cycle (2 input load + 1 table load) / 2 LUT : 1 (over spec) LUT : 1 (over spec) gate : 1 (over spec) gate : 1 (fit) 他方式との比較(リソース見積り) 25 確率的LUTモデルの登場で、主に学習時の計算量が改善しています
  26. 26. オーバーサンプリングによるバイナリ変調モデル • オーバーサンプリングと量子化による変調 • PWM(Pulse Width Modulation)変調 • ⊿Σ変調 • ディザ, etc • 例えば高速度カメラはそれ自身がノイズを多く含むのでディザかけたのと同じ → LPF掛けると元の露光時間の長い綺麗な画像に戻る • 計算はバイナリだが、LPFでノイズは取り除かれ階調が回復する • 階調が回復するので回帰分析にフィッティングができる • LPFは無くてもよいし、IIR/FIRフィルタや、カルマンフィルタなどいろいろ考えられる 変調 量子化された DNN ノイズや 局部発振器 LPF 26 人間で代替も可能 (人の感覚自体がLPFとしても機能する)
  27. 27. Real-timeの為のアーキテクチャ案 27 DNN Video-In ME MC Video-Out フレームメモリ IIRフィルタに似たアーキテクチャ メモリは過去のものの参照にしか使わない 常に最新情報で最善の結果を出力し続ける
  28. 28. 次のステップに向けて • 疎結合の接続ルールの改善 • 現在基本的にランダム結線 • CNNがそうであるように、データには局所性がある • 実は今も少しチャンネル方向に制限入れて改善している • 接続先をノード距離でガウス関数などで確率的に決める手はある • ピラミッド構造的に積層化接続したい • 自動的な枝狩りも候補 • 全線結合からスタートしないといけないのでいろいろ難しい • 過去に試したが極端に接続が減ってくると効果が微妙になってくる模様 • DNNプラットフォームとしての進化 • TFとかChainerとかを追いかける気は無いけど、もう少しマシにはしたい。 • とりあえずSequential以外のモデルも必要 • 今の延長で通用するのはVGG16ぐらいまでかな? 28
  29. 29. リファレンス • BinaryConnect: Training Deep Neural Networks with binary weights during propagations https://arxiv.org/pdf/1511.00363.pdf • Binarized Neural Networks https://arxiv.org/abs/1602.02505 • Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1 https://arxiv.org/abs/1602.02830 • XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks https://arxiv.org/abs/1603.05279 • Xilinx UltraScale Architecture Configurable Logic Block User Guide https://japan.xilinx.com/support/documentation/user_guides/ug574-ultrascale-clb.pdf 29
  30. 30. 自己紹介 • 学生時代からいろいろなオープンソース公開している趣味の人 • 1976年生まれ, 福岡在住 • 1998~ HOS (Real-Time OS [uITRON]) 公開 • https://ja.osdn.net/projects/hos/ (ARM,H8,SH,MIPS,x86,Z80,AM,V850,MicroBlaze, etc.) • 2008~ Jell (FPGA用MIPS互換ソフトコアCPU) 公開 • https://github.com/ryuz/jelly • http://ryuz.my.coocan.jp/jelly/toppage.html • 2018~ LUT-Network 公開 • https://github.com/ryuz/BinaryBrain • 電脳メガネ計画実施中(今の取り組み) • Real-Time glasses (camera [IMX219] & OLED 1000fps) https://www.youtube.com/watch?v=wGRhw9bbiik • Real-Time GPU (no frame buffer architecture) https://www.youtube.com/watch?v=vl-lhSOOlSk • Real-Time DNN (LUT-Network) https://www.youtube.com/watch?v=aYuYrYxztBU 30 娘に描いてもらいました ※ これらはすべてサンデープログラミング(趣味)で開発しています
  31. 31. 著者連絡先 • 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 31

×