文献紹介:An Image is Worth 16x16 Words: Transformers for Image Recognition at ScaleToru Tamaki
Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, Georg Heigold, Sylvain Gelly, Jakob Uszkoreit, Neil Houlsby, An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale, ICLR2021.
https://openreview.net/forum?id=YicbFdNTTy
24. 記号型(Symbolic)と命令型(Imperative)
記号型
記号に対して計算指示を行うこ
とで計算グラフを構築
Theano, TensorFlow
設定ファイル型:Caffe, cxxnet
命令型
データに対して直接計算を指示
Chainer
Torch(本体), Minerva
#記号型
A = Variable('A')
B = Variable('B')
C = B * A
D = C + Constant(1)
# compiles the function
f = compile(D)
d = f(A=numpy.ones(10),
B=numpy.ones(10) * 2)
#命令型
a = numpy.ones(10)
b = numpy.ones(10) * 2
c = b * a
d = c + 1
24/50
25. 記号型が有利:最適化しやすい
学習ではコンパイル1回に対して実行は複数回
依存関係解析に長い時間を書けることが可能
メモリ使用量やマルチGPU、マルチノード最適がしやすい
不要な値、一時的な値を探しやすい
例えばTensorFlow では各シンボルは型とサイズを持つ
#記号型
A = Variable('A')
B = Variable('B')
C = B * A
D = C + Constant(1)
A
D
B
B * A + 1
A
B
DC
B * A C + 1
最適化
25/50
29. 現在のChainerの仕組み
Define by Run
基本的には命令型
変数に対してbackwardが呼べるように拡張
つまり、順方向の計算と同時に計算グラフを作る
Define and Run(対立概念)
基本的には記号型
TensorFlow, Theano, Torch nn
a = numpy.ones(10)
b = numpy.ones(10) * 2
c = b * a
d = c + 1
a
b
dc
b * a c + 1
Define by Runで作られる計算グラフ
29/50