DNNでは、ネットワークに適切な学習データを与えて学習させれば、そのうちに良い認識ができるようになる訳ではない。DNNの処理には、次のスライドに示すように、ロスを与える項と正規化を行う項が色々とあり、これらのさじ加減をうまく行わないと学習はうまく行かない。このプロセスは試行錯誤で、経験が必要であるという。このあたりの話は、非常に専門的であり、また、発表でも細かく説明されていないので、筆者も十分に理解しているわけでない。ここでは、DNNの学習はそれほど簡単ではないという感触を掴んでいただければよいと思う。

Hertaの経験では、SoftMax処理は、マルチクラスのバイナリの分類には効果がある。Information Gainの調整は、バランスの悪い入力データの場合に効果がある。ContrastiveとInformation Gainの調整はシャム双生児型のネットワークの場合には有効である。Euclidian処理をリグレッションに使う場合は、チューニング後に行うのが効果が高いという。

正規化処理では、過学習を避けるDropoutは小さな入力データセットをより一般的にするのに効果が高い。Batch normalizeは、Hertaの経験ではPReLU+dropout処理の後に適用するのが良い。Stochastic poolingは、Hertaの経験では良い場合も悪い場合もあった。Multi-net averagingは一般化には良いが、コストが高いという。

さらに、DNNのウエイトの初期化やアクチベーション関数にも色々なやり方があり、評価を行ってどれが良いかを決める必要がある。

畳み込みオートエンコーダは初期化の段階だけで使うのが良く、ネットワークの構造は共通部の後に、この例では、人種の判定と性別の判定のネットワークを付けているが、このような形より、完全に独立のネットワークを作る方が良いという。

しかし、これはHertaの経験であり、他のDNNの場合も同じことが成り立つとは限らない。

HertaはTegra TX1を使い、ビデオのデコードはNVIDIAのGstreamプラグインで処理を行い、顔の検出と前処理は独自開発のCUDAカーネルで処理している。そして、畳み込み、Maxpool、SoftMaxはcuDNNを使い、cuDNNに入っていないHe、PReLU、MaxOutなどは独自にCUDAカーネルを開発している。

HDビデオを入力とした性別+人種+年齢の推定は、Intelのi7-4770を使った場合は60msかかり、これを基準にすると、Tegra X1では2倍、GTX770-Tiを使えば20倍の性能が得られた。処理ごとの所要時間を示したのが右のパイチャートで、全対全接続を行っているfc層の処理時間が全体の処理時間の44%を占め、畳み込み層の計算が42%を占めている。

今後の課題は、ボトルネックとなっている畳み込み層の処理の高速化で、16bitの半精度演算の利用、カーネルの改善などを考えているとのことである。