IoT NEWS

『DeepLearning BOX』ではじめるディープラーニング①Windows 10で「TensorFlow」と「CNTK」を使ってみる

最近、いろいろなことろで注目を集めている「AI」「機械学習」「ディープラーニング」。
これらの技術は、画像認識・自然言語処理・音声処理などの分野で幅広く利用されはじめており、専門性をもつ研究者だけが利用するものではなく、ECサイトのおすすめ広告やSNSにおける顔認識、その他Amazon AlexaやGoogle Home, Siriなど、身近な技術に活用されるようになった。

そんな、「AI」「機械学習」「ディープラーニング」に最適化されたマシンとして、NVIDIA社から「ELITE SOLUTION PROVIDER」※として表彰された、GDEP アドバンスの「DeepLearning BOX」がある。これから2回にわたって、このマシンのもつポテンシャルを探っていきたい。

※製品に関する深い知識と販売実績を誇るパートナーに与えられる賞

まず、一回目はマシンにプレインストールされているWindows 10環境を使って、「TensorFlow」と「Cognitive Toolkit(CNTK)」の2つのフレームワークを試してみることにする。

目次
ディープラーニング用にチューニングされた高性能マシン
多くの対応フレームワーク
MNISTを使ったディープラーニング
機械学習における文字認識とは
TensorFlowによる深層学習を試す
Cognitive Toolkit (CNTK)による深層学習を試す
「DLスタートアップサポート」もあり

ディープラーニング用にチューニングされた高性能マシン

今回のマシンのスペックは以下のとおり。

DeepLearning BOX
DeepLearning BOX
  • Intel Core i7-6800k CPU @ 3.40GHz
  • DDR4-2400 16GB×8(Total:128MB) Memory
  • GeForce GTX 1080Ti 11GB
  • Intel SSDSC2BB480G7
  • Intel X99 ExpressChipset
  • 1500W 80PLUS
  •  

    このスペックを見ると、非常に高性能なグラフィックボードや潤沢なメモリが搭載されている。これらは、ディープラーニングで行なう演算や並列処理のために必要になるからだ。

    普段、我々が利用するパソコンなどに搭載されているCPUは、OSの処理やアプリケーションでの計算など、あらゆる演算や処理をしている。
    このようなCPUは、あらゆる処理ができるよう汎用的な処理能力をもつ。
    それに対して、グラフィックボードに搭載されるGPUは、「3D」や「コンピューターグラフィックス」に用いられる行列計算などの演算に強いことが特徴である。

    機械学習やディープラーニングにおいて、与えられたデータを使って、「画像」や「音声認識」「未来予測」などを行なうためには、これらの結果もたらすような数式やパラメータを見つけるために、膨大な演算を必要する。

    たとえば、気温の予測を考えてみると、1年分の気温情報から明日の気温を推測するには、過去の気温がどのように上下していたかの情報を基に推測する。
    このとき、推測の方法として、この気温情報を同じに上下を繰り返す関数の数式を想定する。関数は入力値、重み付け※などのパラメーターから数式を作成し、より現実に近い気温情報が算出できるよう調整する。
    そして、実際の気温情報と比較しながら、これらの重み付け部分を調整することで精度を向上させ、その数式が算出する結果が正しいかの検証をする。

    ※重要度の応じて、たとえば5段階で数字をつけて、重要度を数値で表わすこと。

    つまり、ざっくりとまとめると、以下のような手順となる。

    1. 与えられるデータから未来を予測する数式を考える
    2. 指定されたパラメータの善し悪しを判定する判定関数で検証
    3. パラメータの善し悪しの判定を行なう

    これらの手順を繰り返し行なうことで、より現実に近いモデルを探し出すことができる。
    そして、この処理をするため、高い演算能力が重要となる。
    GPUは、画像処理の際の計算に特化しているため、画像処理演算であれば、CPUの数倍から数百倍以上の性能であると言われている。

    GPU 4枚搭載可能

    「DeepLearning BOX」は、高度なGPUをもつグラフィックボードを最大4枚まで同時搭載可能なため、並列演算できるフレームワークを使えれば、GPUの搭載数に応じた演算能力を発揮することができる。
    もちろん、GPUほかにも、CPUにXeonプロセッサーを選択できたり、SSDを増やすなど、細かなカスタマイズも可能だ。
    また、あらかじめ多くの深層学習フレームワークやサンプルのモデルなどがプリインストールされており、すぐに深層学習が始められることも、特徴のひとつである。

    多くの対応フレームワーク

    ディープラーニングをはじめるには、まず基盤となるフレームワークの選択から始まる。
    「DeepLearning BOX」は、主要なフレームワークに対応しているため、さまざまな選択肢から好みのフレームワークを利用することができる。
    また、多くのディープラーニングフレームワークの推奨環境に合わせた機器構成となっているため、ライブラリとの相性も非常にいい。
    初学者にとっては、フレームワークを利用する際のトラブルも少なくなる上、ライブラリの性能を充分に発揮することができる。
    このように、入り口のハードルが大きく下ることは、大きなアドバンテージと言えるだろう。

    DeepLearning BOX 対応フレームワーク

  • Caffe
  • Chainer
  • TensorFlow
  • Cognitive Toolkit(CNTK)
  • Torch
  • Theano
  • BIDMach
  • Cxxnet
  •  

    ここで紹介した以外にも、多くのライブラリが利用できる。

    MNISTを使ったディープラーニング

    ここからはフレームワークを使って、実際にディープラーニングを体験してみることにする。

    今回は、多くのフレームワークのチュートリアルで使われている「MNIST」を使った文字認識を行なう。

    「MNIST」は、手書きの数字画像に正解ラベルが与えられているデータセットで、以下のような60,000枚の手書き数字画像と10,000枚のテスト画像で構成されている。

    MNIST

    各文字の画像は28×28ピクセルで、データサイズもそれほど大きなものではないので、手軽に入手できる。そのため、ディープラーニングのチュートリアルなどでは頻繁に利用されるデータセットだ。

    機械学習における文字認識とは

    今回、「MNIST」のデータセットを使用して文字認識させるディープラーニングを行なうが、機械学習では文字認識どのように進められるか、簡単に説明しておこう。

    機械学習には、気温や株価など時系列に変化するようなデータなどから未来を予測する「回帰」やスパムメール判定や画像認識などの「分類」、画像認識で使用されるようなデータにラベルがついてはいないが「この地域にいる生物はこのような傾向がある」といったデータから傾向や特徴を分類する「クラスタリング」などがある。前者の「回帰」「分類」のように「気温」「この画像は何である」などのラベルが付与されたデータから推論するような学習を「教師あり学習」とよび、「クラスタリング」のようにデータにラベルがついていない学習を「教師なし学習」と呼ぶ。ここで行なうのは「教師あり学習」となる。

    「MNIST」の画像は、それぞれ「この文字は1」「この文字は2」といった「正解ラベル」が与えられているデータであり、これらの情報を「ニューラルネットワークモデル」と呼ばれるアルゴリズム・計算式の階層に入力し、計算式に含まれるの重み付けなどのパラメータによって文字を識別する精度を上げていく。

    つまり、対象が複雑であればあるほど、この計算式やパラメータは複雑なものとなり、これらの精度を上げるためには、何層もの階層をもつニューラルネットワークによって、多数のデータを使ってパラメータ調整を繰り返す必要がある。
    そのため、高度な演算を並列で可能な「DeepLearning BOX」は、手元で手軽に深層学習を試せる環境として、ありがたい存在と言える。

    TensorFlowによる深層学習を試す

    最初は、Googleが中心となって開発し、オープンソースソフトウェアとして公開されている機械学習ライブラリである「TensorFlow」 で「MNIST」の手書き文字認識のサンプルを実行してみよう。

    以下は、実際にDeepLearning BOXを使ってMNIST For ML Beginnersを実行した様子である。

    MNIST For ML Beginners

    「MNIST For ML Beginners」は、Softmax回帰という関数※を用いた手書き文字認識のチュートリアルとなっており、この段階では精度がおよそ89.97%程度となっていることがわかる。

    ※ニューラルネットワークの計算に使われる、あるベクトルの各要素の和が1になる、もしくは全要素の和が0~1になる関数。

    続けて、「Deep MNIST for Experts」を実行した様子は、以下の通りである。

    Deep MNIST for Experts

    トレーニングを重ねる都度、精度が向上しており、平均99.2%まで精度を上げることができるようになった。

    Cognitive Toolkit (CNTK)による深層学習を試す

    次はMicrosoftが開発しているOSSの深層学習フレームワークである「Cognitive Toolkit(CNTK)」で「MNIST」の手書き文字認識のサンプルを実行してみよう。

    CNTKは、GPUを活用した並列処理を得意としているライブラリで、深層学習で多く利用されるプログラミング言語Pythonに加えて、C#, C++, Javaなどからも利用できるところが特徴だ。

    CNTKのチュートリアルはGitHub上に公開されており、チュートリアルのなかの103シリーズからが「MNIST」を用いた内容となっている。

    以下は、CNTKのチュートリアル「畳み込みニューラルネットワークによるMNISTの文字認識」を実行した様子である。

    CNTK 103: Part D – Convolutional Neural Network with MNIST

    「DLスタートアップサポート」もあり

    このように、初学者の筆者であっても、簡単にディープラーニングを試すことができた。

    他にも経験豊富なスタッフによるサポートが受けられる「DLスタートアップサポート」などのサービスも用意されており、これから深層学習を利用したいと考えているのであれば、これらのサービスも心強い味方となってくれるだろう。

                         ***

    次回は、DeepLearning BOXのLinux版を使って、どのように深層学習を行なえるかレビューしたい。

    【関連リンク】
    『DeepLearning BOX』ではじめるディープラーニング② DIGITS + Caffeで画像認識
    株式会社GDEPアドバンス

    モバイルバージョンを終了