21. Artificial Neuron (AN)
+
x0=1
x1
x2
xN
... w0 (Bias)
w1
w2
wN
f(u)
u y
xi: Input signal
wi: Weight
u: Internal state
f(u): Activation function
(Sigmoid, ReLU, etc.)
y: Output signal
y f (u)
u wi xi
i0
N
21
23. LeNet-5
• CNNのベース (1980年に福島先⽣がネオコグニトロ
ンをすでに発表済み!!)
• 畳込み(特徴抽出)→フル結合(分類)
• 5層
Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning applied to
document recognition. Proceedings of the IEEE, 86(11):2278–2324, 1998. 23
29. AlexNet
• ディープラーニングブームに⽕をつけた記念的CNN
• ILSVRCʼ12優勝 (誤認識率16%)
• ⽔増し(Augmentation)による学習データ増加
• 8層, Dropout, アンサンブルCNN, ReLU活性化関数
A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification with deep convolutional neural
networks. In Advances in Neural Information Processing Systems 25, pages 1106–1114, 2012. 29
32. GoogLeNet
• Network-in-network
• ILSVRCʼ14で優勝 (誤認識率6.7%)
• 22層, Inception演算, フル結合層なし
Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott E.
Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke,
Andrew Rabinovich: Going deeper with convolutions. CVPR 2015: 1-9
32
36. どこまでも深くできるのか︖
• 答えはNO→勾配消失/発散問題
• 活性化関数の微分(誤差)を更新するため
逆伝搬: (0.1)100→0, 順伝搬: (1.1)100→∞
Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun, “Deep Residual Learning for Image
Recognition,” IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016
レイヤを増やす
(=深くする)
と認識率悪化
36
37. ResNet
• ILSVRCʼ15優勝 (誤認識率3.57%)
• 152層︕︕, Batch Normalization
Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun, “Deep Residual Learning for Image
Recognition,” IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016
⼊⼒xと出⼒H(x)を⼀致させたい
→残差(Residual)F(x)をCNNで学習
37
38. BatchNormalization
• 正規化を⾏った後, スケーリングとシフトを⾏う
• 学習による発散を抑える
Sergey Ioffe and Christian Szegedy, “Batch Normalization: Accelerating Deep Network Training
by Reducing Internal Covariate Shift,” ICML2015. 38
54. 2値化/3値化 on FPGAがトレンド
• FPT2016 (12⽉開催)
• E. Nurvitadhi (Intel) et al., “Accelerating Binarized Neural
Networks: Comparison of FPGA, CPU, GPU, and ASIC”
• H. Nakahara (東⼯⼤), “A Memory-Based Realization of a
Binarized Deep Convolutional Neural Network”
• ISFPGA2017 (先週開催)
• Ritchie Zhao et al., “Accelerating Binarized Convolutional Neural
Networks with Software-Programmable FPGAs”
• Y. Umuroglu (Xilinx) et al., FINN: A Framework for Fast,
Scalable Binarized Neural Network Inference
• H. Nakahara, H. Yonekawa (東⼯⼤), et al. “A Batch
Normalization Free Binarized Convolutional Deep Neural
Network on an FPGA”
• Y. Li et al., “A 7.663-TOPS 8.2-W Energy-efficient FPGA
Accelerator for Binary Convolutional Neural Networks,”
• G. Lemieux, “TinBiNN: Tiny Binarized Neural Network Overlay
in Less Than 5,000 4-LUTs,”
54
55. (余談)PYNQの開発状況
• 新しいライブラリ(Arduino, PMOD,)を開発中
• 相変わらずお⼿軽(Pythonで叩く+Jupyter)・⾼性能
55
from pynq.iop import Pmod_PWM
from pynq.iop import PMODA, PMODB
from pynq.iop import Adafruit_LCD18_DDR
from pynq.iop import ARDUINO
lcd = Adafruit_LCD18_DDR(ARDUINO)
pwm_A = Pmod_PWM(PMODA, 0)
69. 指⽰⼦による性能向上(1)
• オリジナルのループ→逐次実⾏
• #pragma HLS unroll → 演算器展開
• #pragma HLS pipeline → パイプライン化
for ( int i = 0; i < N; i++){
op_Read;
op_MAC;
op_Write;
}
for ( int i = 0; i < N; i++){
#pragma HLS pipeline
op_Read;
op_MAC;
op_Write;
}
for ( int i = 0; i < N; i++){
#pragma HLS unroll 3
op_Read;
op_MAC;
op_Write;
}
RD MAC WR RD MAC WR
RD MAC WR
RD MAC WR
RD MAC WR
RD MAC WR
RD MAC WR
RD MAC WR
スループット: 3サイクル
レイテンシ: 3サイクル
演算量: 1/3 データ/サイクル
スループット: 3サイクル
レイテンシ: 3サイクル
演算量: 1 データ/サイクル
スループット: 1サイクル
レイテンシ: 3サイクル
演算量: 1 データ/サイクル
69
70. 指⽰⼦による性能向上(2)
• #pragma HLS unroll → 演算器展開
• #pragma HLS pipeline → パイプライン化
Int X[100];
#pragma HLS array partition
for ( int i = 0; i < N; i++){
#pragma HLS pipeline
op_Read;
op_MAC;
op_Write;
}
Int X[100];
#pragma HLS array partition
for ( int i = 0; i < N; i++){
#pragma HLS unroll 3
op_Read;
op_MAC;
op_Write;
}
RD MAC WR
RD MAC WR
RD MAC WR
RD MAC WR
RD MAC WR
RD MAC WR
スループット: 3サイクル
レイテンシ: 3サイクル
演算量: 1 データ/サイクル
スループット: 1サイクル
レイテンシ: 3サイクル
演算量: 1 データ/サイクル
70
Mem
Mem
Mem
Mem
Mem
Mem
RD MAC WR
Mem
Mem
Mem
Mem