NNとDL、TensorFlowとCaffe、何がどう違う?組み込みAIに登場する用語を学んでみよう

前回では、AIとは何か、を紹介しました。今回の初心者講座では、組み込みAIにまつわる用語を紹介します。TensorFlowやGPGPUなど、組み込みAIを設計する上で見逃せないキーワードが登場します。用語を通して、AIを構成する要素技術に迫りましょう。

組み込みAI開発にはチームワークが欠かせない

組み込みAIは、蓄積された膨大なデータを解析して、識別・検知・予測などを実現するシステムです。こうした組み込みAIの開発では、次に挙げる大きな2つの課題を解決するため、チームワークが欠かせません。

1つ目の課題は、これまで人間が無意識的に脳内で行っていた処理を、アルゴリズムとして、どのようにコンピュータ上に実現するのか、ということです。この解決には、学術的なアルゴリズム研究者やデータサイエンティスト、工学的なシステムエンジニアが必要となります。

2つ目の課題は、大規模データの解析や活用を、いかに高速に、リアルタイムに実行するには、どのように実装すれば良いのか、ということです。この解決には、アプリケーションエンジニアだけでなく、ハードウェアに精通したエンジニアも必要となります。

つまり、「いかにチームとして課題を解決するか」が組み込みAI開発を成功させる鍵となります。そのため今回紹介する用語の多くは、作業分担を効率的に行う、抽象化の発想から生まれています。

開発を効率化する例として、組み込みAI用開発プラットフォームを紹介します。VIA SOM-9X20はSystem-On-Module(SOM)という概念を取り入れた組み込みAI用開発プラットフォームです。ハードウェアはもちろん、OS、開発環境、ライブラリなどをワンストップで入手できるため、自社のリソースを浪費することなく、組み込みAIの開発基盤を簡単に入手できます。
VIA SOM-9X20 SOMモジュール

ニューラルネットワークとしてアプリケーションを考えていこう。

まず、組み込みAI設計に共通する「考え方」のプラットフォームとして、ニューラルネットワークを紹介します。

ニューラルネットワーク

ニューラルネットワーク(Neural-Network)とは、人間の脳組織であるニューロンの結びつきを参考にシステムを設計する手法です。複雑な機能を大きな処理として表現せず、小さく単純な処理の重ね合わせとして表現し、高度なシステムを実現します。処理と処理をどのように重ね合わせるか、については、アプリケーションエンジニアが人力で検討するのではなく、過去に蓄えた知見(ビッグデータ)に基づいてコンピュータが絞り込み、最適な組み合わせを選出します。コンピュータを活用することにより、人間には到底処理できない膨大なデータの中からも、ルールを抽出。高度な組み込みAIを実現することができます。

図

ディープラーニング(深層学習)

ニューラルネットワークに含まれるニューロン列(並列に処理できる機能列)のことを、層と呼びます。ディープラーニング(Deep-Learning、深層学習)は、多層構造のニューラルネットワークを利用した問題解決手法です。

ディープラーニングを利用したアプリケーションは2つのフェーズ、ニューロン間の構造を選出する学習フェーズと、構築したネットワークを利用する活用フェーズを持ちます。学習フェーズでは、蓄積したデータに基づき層と層を繋ぐ結合係数を調整し評価、最適な構造を選出します。活用フェーズでは、結合係数を利用して入力を処理し、答え(推論結果)を導出します。

学習に利用するデータが、模範解答つまり教師となるため、こうした学習方式を「教師あり学習」と呼びます。

ディープラーニングを組み込みAI上でコンパクトに実現する

ディープラーニングでは、ネットワークが多層であるほど全体として複雑な機能を表現することができます。しかし、層が増えるほど重ね合わせの候補数も爆発的に増加するため、学習にはハイエンドなコンピュータが必要となります。組み込みAIでは、高いコストパフォーマンス、低消費電力、高い応答性のシステムを実現するため、学習フェーズを高性能なワークステーションにより事前に処理しておき、活用フェーズのみを組み込みシステム(エッジデバイス)上で実行するハイブリッドな方式も採用されています。

AIに活用できるハードウェアプラットフォーム

ニューラルネットワークは小さな処理の集合体であるため、実行環境として、大量のデータを並列処理できる能力を持つハードウェアが最適です。また、ニューロン同士が絡み合うことにより表現されているシステムであるため、大量の入力値から1つの出力値を算出する、集約演算に特化したハードウェアも高い人気を誇ります。組み込みAIで活躍しているハードウェアを、一部紹介します。

図

GPU

GPU(Graphic Processing Unit)は超並列演算を得意とする演算ユニットです。グラフィクス処理用ASICとして開発された演算ユニットであることから、色の重ね合わせや拡大・縮小・回転に必要な複数画素の集約演算や、並列処理を得意としています。

GPUをグラフィクス以外の汎用計算にも活用するGPGPU(General Purpose-GPU)技術を利用することにより、AIを構成する個々の処理をGPUにより高速に解決。優れたレスポンス性や、リアルタイム性を備えたアプリケーションを実現できます。

例えば、2018年現在2万円強で購入可能なNVidia GeForce 1050Tiは、1個のGPU内に768個のCUDAコアを搭載しており、1秒間に単精度浮動小数点(32bit 浮動小数点の計算)基準で1981GFLOPS(約2.0×10の12乗回の計算)の処理が可能です。
NVIDIA 発ディープラーニングおよび人工知能関連の最新情報

FPGA、NPU

FPGA

FPGA(Field-Programmable Gate Array)は、処理に最適な演算器を、動的に生成できるハードウェアです。ニューラルネットワークに求められる集約演算をはじめ、ニューロンとして表現された小さな機能を、専用ハードウェアを生成して高速に処理できます。

例えば、FPGAは、定形処理の多い画像解析アプリケーションなどに効果的です。防犯や見守りサービスとして利用されている人物認識アプリケーションの一部には、Xilinx Zynq UltraScale+ MPSoCを採用しているシステムもあります。
Zynq UltraScale+ MPSoCで、AI搭載インテリジェントカメラを実現

NPU

コストパフォーマンスや最高性能をFPGA以上に突き詰めるため、ニューラルネットワーク処理に最適化されたASICも登場しています。NPU(Neural network Processing Unit)はニューラルネットワーク専用の演算ユニットです。固定的なハードウェアですが、フィットするアプリケーションの性能を劇的に向上させることができます。

例えば、Nvidia JetsonのVOLTAアーキテクチャに含まれるTensorコアは、ディープラーニング用に設計されたNPUです。2018年最新モデルとなるJetson Xavierは、512個のTensorコアが搭載。小型で低消費電力でありながら、超並列な処理を実現することができます。
NVIDIA Jetson

組み込みAIを支えるソフトウェアフレームワーク

多くの組み込みAIは、TensorFlowやCaffeといった、ソフトウェアフレームワークを利用して実装されています。ここでは、ソフトウェアフレームワークと、その効果について紹介します。

ソフトウェアフレームワークで、世界中の開発資産を取り込もう

ソフトウェアフレームワークは、ハードウェアの差異を吸収する抽象化ソフトウェア層です。ソフトウェアフレームワークを利用することにより、高い移植性を備えたアプリケーションを開発できます。TensorFlowやKeras 、Caffeなどが有名なソフトウェアフレームワークであり、ディープラーニングに必要な機能部品を提供しています。アプリケーション開発者はこれらの機能部品を繋ぎ合わせるだけで、高い移植性を備えたアプリケーションを、簡単に実装できます。

各ハードウェア上のソフトウェアフレームワークは、ハードウェアベンダーが主にメンテナンスしています。そのため、アプリケーション開発者は、他社との差別化であるアルゴリズム開発などに注力できます。また、ハードウェアベンダーも、アプリケーションの互換性を、対応ソフトウェアフレームワークとして表現できるため、サポート工数を削減することができます。

ハイエンドなハードウェアも活用できるソフトウェアフレームワーク

また、ハードウェアベンダーは、ソフトウェアフレームワークを自社のボードへ移植する際、ソフトウェアフレームワークの各機能部品を、ハードウェアに最適化しています。これにより、アプリケーション開発者は、ソフトウェアフレームワークを利用するだけで、最新ハードウェア性能の恩恵を受けることができます。

例えば、ソフトウェアフレームワークとして人気の高いTensorFlowは、Nvidiaのハードウェアを活用できるCUDAや、様々なベンダーのハードウェアを活用できるOpenCL、並列計算機に対応できるOpenMPなどに対応しています。設定を変更するだけで、手元のハードウェアに最適なソフトウェアフレームワークを入手できます。

マイクロコントローラにも対応できるソフトウェアフレームワーク

TensorFlowやCaffeを利用したアプリケーションには、Pythonスクリプトとして実装されているものが多くを占めています。電力削減やコスト削減を目的としてArm Cortex-M4Fなどのハードウェアを選択した場合、スクリプト実行環境が無いことから、大きな移植工数が懸念されます。これを解消する方法として、次の2つの手法を紹介します。

アプリケーショントランスレータ

一部のハードウェアベンダーは、Pythonスクリプトで実装されたAIアプリケーションを、OSレス環境でも実行可能なC言語に変換するアプリケーショントランスレータを提供しています。トランスレータにより、簡単に、スクリプトベースで実装されたアプリケーションを、小さなエッジノードで実行することができます。

CMSIS-NN

Arm Cortex-M向けライブラリであるCMSISにも、ニューラルネットワークのフレームワーク「CMSIS-NN」が追加されました。CMSIS-NNはAIアプリケーションに必要な機能部品を提供するC言語用のライブラリです。単純ではありませんが、TensorFlowやCaffeに準拠したアプリケーションを、マイクロコントローラ上に移植しやすくなりました。
Machine Learning | Arm NN SDK – Arm Developer

まとめ

今回は、組み込みAI開発に登場する用語を紹介しました。今後も、初心者講座の中で様々な技術が登場します。次回は、実際のデバイスを使った「触って学べる」初心者講座となります。お楽しみに!