NVIDIAは15日、都内でNVIDIA Deep Learning Day 2016を開催した。同イベントは、深層学習(Deep Learning)をテーマに、NVIDAが同社製GPUの活用や深層学習分野での戦略を語るほか、パートナー企業などの紹介を行うもので、各企業のソリューションを解説するセッションや展示からなる。
注目を集める「深層学習」
午前中の講演を行ったエヌビディア プラットフォームビジネス本部 ディープラーニングソリューションアーキテクト 兼 CUDAエンジニア 村上真奈氏 |
同日の午前中には、「いまさら聞けない!? ディープラーニング入門」として、深層学習の導入的なセッションが行われ、午後には、「エヌビディアのディープラーニング戦略」として同社の方向性が語られた。なお、午前中のセッションと午後のセッションでは、話者は別になるものの、内容に重複があるので、ここでは、午前中のセッションをベースに、深層学習の概要やNVIDAの取り組みなどについて解説する。
午前中のセッションを行ったのは、エヌビディア プラットフォームビジネス本部 ディープラーニングソリューションアーキテクト 兼 CUDAエンジニア 村上真奈氏。
ディープラーニングとは、コンピューターによる「機械学習」の1種だ。人間の脳をモデルに考えられた「ニューラルネットワーク」を改良し、画像や音声などの認識や、自動運転などの複雑な判断を可能にするシステム構築することを可能とする。
一般に機械学習とは、コンピュータの人間がプログラムコードをすべて書くのではなく、学習するシステム(ここではニューラルネットワーク)を作り、それにさまざまな情報を与えて認識などの処理を行うシステムを構築することだ。
なお、ニューラルネットワークに関しては、1980年台に一旦ブームがあった。ただ、現在のシステムと原理は同等だが、仕組みや規模がかなり違っているため、2012年以降のものを「Deep Neural Network(DNN)」や「Deep Learning」と呼んで区別している。「深層」学習と呼ばれるのは、ニューラルネットワークを複数重ねてシステムを構成するためだ。
2012年にコンピュータの画像認識を行うコンテスト(ILSVRC Image Net)で、深層学習を使うものが、それまでのプログラムコードで特徴量抽出を行うシステムを凌駕した。プログラムコードで特徴量抽出では、30%を切る程度の誤差率たったが、深層学習ではそれを一気に15%まで縮めた。その後も深層学習を使う認識システムは順調に誤差率を小さくしていき、2015年のコンテストでは5%を切っている。
ILSVRC(Large Scale Visual Recognition Challenge)による画像認識の誤差率は、2011年ぐらいまで停滞していたが、深層学習が使われ始めた2012年以降急速に低下して、現在では、人間の画像認識誤差率(およそ5%だと言われている)よりも小さくなった |
写真左のグラフは、ILSVRCの参加チームの正答率をプロットしたもの。青が従来型の画像認識で、緑が深層学習を使うもの。このように2012年以降、深層学習を使うチームが増え、正答率が上がり、しかも上位に集中し始めている。これを受け、IBM、Google、Microsoftといった企業が深層学習に投資を開始している |
また、深層学習を積極的に導入しているGoogleは、音声認識に深層学習を使い、1年で音声認識の誤認識率を23%から8%にまで下げたという。このほかにも、画像認識や言語翻訳、自然言語処理といった多くのサービスで深層学習を使ったシステムを採用している。
もちろん、Google以外にも深層学習に注目している企業は多数で、競争は激化。Microsoft、IBM、Facebook、Baiduなどが、深層学習の研究に多額の投資を行っている。また、大学などでも研究のために作られた深層学習用のフレームワークやツールキットが提供されており、研究者は、ネットワークの構造など、深層学習の本質的な部分の開発に専念できるようになってきた。
「深層学習」で存在感を増すGPU
ここで注目されているのがGPUによる演算だ。1980年台にブームとなったときには、学習のための計算量が膨大で、当時のコンピューター(RISCプロセッサなど)では、学習に長時間かかってしまうという問題があった。
その後、プロセッサ性能は進歩し、アルゴリズムなどが改良されたため、深層学習が実用的になってきた。また、深層学習では、膨大な「行列計算」が必要になるのだが、GPUによる汎用演算は、この用途でみると、計算性能が高く、汎用CPUで同等の計算性能を実現した場合に比べてコストも低くなる。つまりGPUを使うことで、学習時間を短縮でき、開発サイクルを短縮できるわけだ。
深層学習の処理の流れ。画像をデータとして入力して、ニューラルネットワークの各ノードに重み付けを行うフォワードプロパゲーションを行い、その結果が正しくなるように逆向きに重み付けを計算するバックワードプロパゲーションを行う。これを大量の画像について繰り返す。このために膨大な計算量が必要になる |
もう1つ、深層学習が過去と違うのは、インターネットを介して膨大なデータ(ビックデータ)が入手可能になった点だ。例えば、画像を認識する場合、多くの画像を学習させるほど、認識能力が高くなっていく。しかし、インターネット普及前には、デジタル化された画像データは、研究者がすべて用意する必要があった。
現在では、インターネット検索をするだけで大量の画像が入手可能だ。また、さまざまなデジタルアルバムサービスやSNSなどがあり、世界中からデジタル画像を入手できる。
こうして2013年ごろからGPUが深層学習で使われるようになってきた。そしてNVIDIAも、この流れに乗る形で積極的に同社製GPUと「深層学習」をアピールする。2015年に行われた同社のカンファレンス「GPU Technology Conference」では、深層演算がメインテーマとなるほどになってきた。
こうした状況に向けて、NVIDIAは、「ディープラーニングSDK」と呼ばれるものを提供している。これは、深層学習で必要となる各種の計算ライブラリや、実行、評価のための簡易な実行環境などからなる。
GPUを汎用演算で利用する場合、いわゆるシェーダー機能を利用するが、NVIDIAの場合には、CUDAを使う。ライブラリには、密行列や粗行列用の計算ルーチン、畳み込み演算などが用意されている。
密行列とは、行列(配列)データの構造のことで、すべての要素を省略なく持つものが密行列で、一方の疎行列とは、大半の要素がゼロなどの場合に非ゼロ値を持つ要素のみを保持するようなデータ構造をさす。このようにすることで巨大な行列でも理論的な要素数に比べて、データサイズが小さくなり、密行列ではメモリに入りきれないような巨大な行列を保持することが可能になる。
ディープラーニングSDKには、cuSPARSEと呼ばれる、粗行列演算ライブラリが用意されている。最新のアップデートでは、テキスト内の単語の出現頻度などの巨大なベクトルデータ(これが疎行列となる)と密行列との演算機能が追加された。こうした処理は、自然言語処理などで利用されることが多いという。
密行列ライブラリcuBLASでは、新たに16ビット半精度浮動小数点形式(FP16)に対応した。深層学習では、浮動小数点演算を使うが、科学技術演算などに比べると高い精度は必要ない。このため、FP16形式を使えば、GPUメモリへ2倍のデータを読み込み可能となり、同じ要素数であれば、FP32よりもデータ量が半分で済むためより高速にデータを読み込むことが可能になる。なお、cuBLASではFP16形式のデータでも、内部演算は32bit精度で行っている。
cuDNNは、ディープニューラルネットワーク用のプリミティブ演算ライブラリ。主要な深層学習フレームワークがこのcuDNNに対応しており、畳み込み演算などの深層学習で利用される演算処理をGPUを使って高速化する。
cuDNNは、GPUを使うニューラルネットワーク用基本計算ライブラリ。NVIDIAのGPUに合わせて最適化され、さらにプログラムコードの改良などで、性能を向上させている。左のグラフは、GPUアーキテクチャとcuDNNのバージョンの違いによる深層学習時の演算性能 |
NVIDIAの調査によれば、GPUを使うことで、汎用CPUにくらべ学習処理の効率を8~9倍にすることが可能だという。これは学習時間にすれば、1カ月(30日)かかってしまうような学習が3.3日で終了するということを意味する。
また、NVIDAは、深層学習の学習処理やテストを簡単に行うためのユーザーインターフェース部として「DIGITS」と呼ばれるWebベースのシステムを提供している。これは、Caffe(カルフォルニア大学バークレー校が中心となって開発)と呼ばれる深層学習フレームワークを使い学習用のデータセットや学習モデルの作成を容易に行うことができ、学習過程やレイヤーの可視化機能などを持つ。
現状は、オープンソースであるCaffeをNVIDIAがカスタマイズして組み込んでいるが、Torch(ニューヨーク大学、Facebookが開発)、Theano(モントリオール大学が開発)、Chainer(Preferred Networksが開発)などにも対応する予定だとしている。もちろん演算には、NVIDIAのGPUを利用できるようにしてあり、深層学習システムを簡単に構築可能だという。