GTC 2015 - Deep Learning用のCUDAライブラリ「cuDNN」
Convolutionの計算が主要な処理であるが、その計算にはいろいろなパラメータがある。学習には何万枚かそれ以上の画像が使われるが、ミニバッチとよぶ数10枚から1024枚程度の画像を一まとめにして処理するのが一般的である。これがMinibatch Sizeである。そして入力となる(直前の層の出力である)Feature Mapが何枚あるのか? (入力画像の場合はRGBで計3枚)画像全体の縦横のサイズ、何種類のフィルタを使って何枚のFeature Mapを出力するのか、フィルタカーネルの縦横サイズ、ゼロを詰め込む半端部分のサイズ、フィルタの縦横のずらし量の指定が必要である。
さらにデータがどのように格納されているかのバリエーションがあるので、全てのケースに対応し、性能が出るようにライブラリを作るのはかなり大変である。
Convolution(畳み込み)の計算はデータを行列の形に格納しなおして、行列積として計算する、FFTを使って周波数領域のデータに変換して計算する、元のデータ格納形式のまま、畳み込みを計算するなどの方法が考えられる。
行列積として計算する方法(GEMM)は安定して高性能が得られるが、並べ替えた行列を格納するため多くのメモリを必要とするという問題がある。