AIを支えるハードウェアとライブラリ
はじめに
前回はBirds-EyeでAIの全体像を眺め、2012年のAIビッグバン以降の急速な発展について解説しました。今回は、ディープラーニングを支えるハードウェアとライブラリの現状について解説します。
これらは、実際にAIアプリケーションを作成する際に適したものを選択して利用するものです。日々進化し続けているため仕様や性能は実際に利用する際に個別に調査するものとして、ここではどのようなものがあるのかを抑えておきましょう。
ハードウェア
みなさんは、ムーアの法則をご存知ですか。これはインテル創立者の1人であるゴードン・ムーア氏が提唱したもので「半導体の集積率は18か月で2倍になる」という法則です。実に長い年月、この法則に則ってCPUの集積率は高まってきたのですが、最近になってさすがに「限界が来た」と言われ、実際に集積率も鈍化しています。
一方で、クラウドやAI、仮想通貨、ブロックチェーンなど大規模な処理能力を必要とするニーズが急速に広がっています。そのため、CPUの性能向上に依存するだけではなく、GPUやFGPA、ASICなどの新しいチップをうまく使い分けて対応する時代になりました。
(1)GPU
GPU(Graphics Proceesing Unit)は、3Dのコンピュータグラフィックに必要な演算処理を行うためのビデオチップです。CPU(Central Processing Unit)が何でも処理する汎用チップなのに対し、GPUはもともと画像処理専用のチップで、CPUの命令を受けて画像処理を高速に行います。
一般にCPUのコア数が数個なのに対し、GPUはコア数が数十のものから数千のものまであります。画像処理のようなシンプルな行列演算処理を大量のコアによって並列演算処理するのに向いている専用チップなのです。
GPUは動画編集やCADなどのほか3Dゲームの世界的な普及とともに発達してきましたが、AIの爆発的な広がりによりその使われ方も加速度を付けて増えています。なぜ、AIがグラフィックチップのGPUと関係するのでしょうか。
2012年にGoogleが猫を認識したときは(詳細は前回の解説を参照)、インターネット上の画像やYouTubeから取り出した1000万枚の画像をAIに学習させ、1000台のコンピュータ(2000個のCPU)を3日間使いました。
これだけ大量のコンピュータはGoogleのような巨大企業でなければ用意できません。そこでGPUのトップ企業であるNVDIA社がディープラーニングにGPUを適用する実験を行い、12個のGPUが2000個のCPUに匹敵するという大きな成果が得られたのです。これで一気に「ディープラーニングにはGPU」となり、NVIDIAのGPUはAmazon、IBM、Microsoftなどほとんどのクラウドに採用されています。AMDやIntelなどもこの市場を追っていますが、現在のところNVDIA社がダントツな状況なのです。
(2)FGPA
最近脚光を浴びているのがFPGA(Field-Programmable Gate Array)です。これは汎用処理が得意なCPUと単純処理を高速で行えるGPUの中間で、Field-Programmable(購入者が構成を設定できる)チップです。2015年6月にIntelがFPGA大手のAltera(アルテラ)社を2兆円で買収したニュースが話題になりましたが、MicrosoftのBing検索やAzure翻訳サービスにもFPGAが使われています。
FGPAの特徴はGPUに比べて処理能力は劣るものの省電力なことです。この利点はデータセンターのサーバーにもってこいで、最近ではMicrosoftの他にもAmazon AWS、IBMクラウド、中国百度(Baidu)などでも次々に採用されています。「2020年までにクラウドサーバーの1/3はFGPAになる」という予想もあります。
(3)ASIC(エーシック)
FGPAとよく比較されるのがASIC(Application specific integrated circuit:特定用途向け集積回路)です。FPGAと違い中身を書き換えることはできませんが、特定用途向けにデバイスが製造されるため、量産することで単価を下げられます。ただし、ASICは専用ロジックを作り込むカスタム品であり初期開発コストがかるため、用途に応じてASICとFGPAをうまく使い分ける必要があります。
(4)TPU
Googleは2017年に自社のオリジナルプロセッサ(TPU:Tensor Processing Unit)の性能がGPUより15〜30倍高速だと発表しました。TPUはASICで構成されており、AlphaGoやGoogle画像検索、Googleフォト、Google翻訳、Google Cloud Vision APIなどでも使われています。
ライブラリ/フレームワーク
この数年で、さまざまなディープラーニング関連のライブラリが産まれています。古くからある(と言っても2011年頃ですが)ライブラリもあれば、最近急速に頭角を現しているライブラリもあり、その浮き沈みも激しい状況です。そのため、AIアプリケーションを作成する際は、ライブラリの良し悪しだけでなく「この先も生き残りそうか」を見極めて選ぶ必要があります。
これまでAIを使った各種アプリケーション・サービスは、これらのライブラリを直接利用して作成していましたが、最近はライブラリを組み込んだAIプラットフォームを利用するシーンも増えてきました。AIプラットフォームでは、大量データを管理するデータベースやインターネットを通して利用できるインターフェースなどAIを利用できる環境がオール・インワンで提供され、複数のAI要素を組み合わせたアプリケーションを簡単に構築できる利点があります。
一方、ライブラリの大きな利点は無償で提供されていることです。また、自社のデータを使ってビジネスに活用するAIを作るには音声認識や画像解析のような出来合いのサービスでは歯が立ちません。今後、AIプラットフォームでもエンタープライズ向けのサービスが続々と提供されそうですが、現時点では自社のビジネスにAIを利用するためには用途に適したライブラリを使いこなす必要があります。
現在よく使われているライブラリを表にまとめました。どれも無料で使用でき、またチュートリアルも用意されているので、興味がある方はぜひ触ってみてください。ディープラーニングの世界は深く広いため、理論から入ろうとすると膨大な時間を要します。“習うより慣れろ”という姿勢でチュートリアルやネットで報告されている実施レポートをもとにやってみるのが一番理解が早いと思います。
ただし、ディープラーニングの学習には膨大な処理能力と消費電力を必要とします。私の会社のAIチームでもいろいろなライブラリを使って学習モデルを作成していますが、CPUで実行すると数時間かかるような処理もGPUを使えば数十分で終わります。現在、主流のライブラリはCPUでもGPUでも動作するようになっていますが、まだGPUの利用料金は高くコストを気にしながら使い分けるようにしています。なお、学習済みモデルを本番で使う場合の負荷は低いためCPUで十分です。
# | ライブラリ | 開発・サポート | ライセンス | 発表 |
---|---|---|---|---|
1 | Teano(テアノ) | モントリオール大学 | BSD | 2012/11 |
2 | Caffe Caffe2(カフェ) |
バークレー校 |
BSD | 2013/12 2017/1 |
3 | DL4J | Skymind | Apache | 2014/4 |
4 | Keras(ケラス) | Googleなど | MIT | 2015/3 |
5 | Chainer(チェイナー) | Preferred Networks | MIT | 2015/6 |
6 | Torch(トーチ) Pytorch(パイトーチ) |
Ronan collobert氏 |
BSD | 2002/10 2017/1 |
7 | TensorFlow(テンソルフロー) | Apache | 2016/11 | |
8 | PaddlePaddle(パドルパドル) | 百度(Baidu) | Apache | 2016/9 |
9 | Cognitive Toolkit(コグニティブ) | Microsoft | MIT | 2016/10 |
10 | mxnet | Amazon | Apache | 2016/11 |
(1)Teano(テアノ)
モントリオール大学のBengio教授の研究室で開発されたPython用数値計算ライブラリです。生い立ちは古く、2012年のビッグバン以前から同大学で使われていましたが、AIブームとともに一躍脚光を浴びています。
(2)Caffe/Caffe2(カフェ)
Caffeはカリフォルニア大学バークレー校に在籍中のYangqing Jia氏が開発し、その後は同校のBerkeley Vision and Learning Center(BVLC)が中心となって開発を継続しています。畳み込みニューラルネットワーク(CNN:Convolution Neural Network)という技術に最適化されている画像認識用ライブラリです。ヤフージャパンが2014年6月から同センターのスポンサーとなってCaffe開発の支援を行っています。Caffeをベースに作られたのがCaffe2で、2017年4月にFacebookがCaffe2をオープンソースにして公開して人気を博しています。
CNN(畳み込みニューラルネットワーク)は画像処理でよく使われるアルゴリズムです。画像を細かなピースに分解してピースごとに類似性を比較し、それらのピースを組み合わせてより大きな類似性のあるピースにするという処理を繰り返して、比較対象画像(学習データ)との類似性を判断する技術です。
一方、RNN(リカレントニューラルネットワーク)は自然言語処理分野で注目されているアルゴリズムです。機械翻訳や文書認識、音声認識などは画像認識のようにある瞬間のスナップショットだけで判断するのではなく、前のセンテンスやストーリーを踏まえて(持続して)適切な判断をする必要があります。RNNは再帰(Reccurent)計算を使ってこうした連続的な情報を処理するのに適しています。
この2つを組み合わせたものが、畳み込みリカレントニューラルネットワーク(CRNN)です。例えばCNNで画像からオブジェクト(構成要素)を認識し、RNNでそれが人だとか車だとかの注釈をつけたり、概要説明文をつけたり(Image to Text)するのに適しています。
もう1つ、LSTM(Long short-term memory)という言葉も覚えておいてください。これはRNNの拡張として1995年に登場したアルゴリズムです。古くからあるモデルなのですが、ここに来てRNNが注目されるにつれて急上昇したものです。RNNはちょっと前の出来事には利用できますが、それ以前の出来事には利用できないという問題がありました。LSTMは、この課題を解決して”長期の依存情報”を利用可能なアーキテクチャになっています。
(3)DL4J
Deep Learning for Javaを略してDL4Jと呼ばれているJava、Scalaベースのライブラリです。他のライブラリが大学発だったり大手に買収されたりしたものが多い中、これはSkymindというベンチャー会社が商業サポートしています。
フリーソフトウェアやオープンソースソフトウェアのライセンス規定は、古くはGNU General Public License(GPL)が有名ですが、実はそれ以外にもたくさんあります。表に掲げたライブラリはどれもオープンソースで提供されていますが、Apache、MIT、BSDのいずれかを利用していることがわかります。
Apacheライセンスは、オープンソースのソフトウェアプロダクトを支援するASF(Apache Software Foundation:アパッチソフトウェア財団)によるライセンス規定です。Apache License 2.0とGPL v3は互換性があり広く普及しています。
一方、BSDライセンスはカリフォルニア大学によって策定されたもので、同校が開発したCaffeなどで使われています。そして、MITライセンスはマサチューセッツ工科大学を起源とするもので、他のライセンスに比べて制限が緩いのが特徴です。
(4)Keras(ケラス)
Pythonベースのディープラーニングライブラリで、メイン開発者はGoogleのFrancois Chollet氏です。人間向けに設計されており、初心者でも簡単に扱えるユーザビリティを特徴としています。バックエンドとしてTensorFlowやTheano、Cognitive toolkit上で実行可能です。
ライブラリを使って学習モデルを作る作業はとても手間がかかります。学習モデルを設計し、大量の訓練データを用意して学習させ、精度を測定してパラメータをチューニングして再実行することを繰り返すのには膨大な時間と労力が必要です。
そのため、いろいろな学習済みモデル(Pre-Trained Model)というものが公開されており、それらを使ってすぐに性能や使い方を試してみることができます。例えば、画像認識系のモデルとしてはAlexNetやVGG-16、ResNet-50、Inception-v3、Xceptionなどがあります。
(5)Chainer(チェイナー)
Pythonベースのディープラーニングライブラリです。Preferred Networksという日本企業が開発・サポートしています。
(6)Torch(トーチ)/Pytorch(パイトーチ)
Torchは初回リリースが2002年と古くからある機械学習ライブラリで、Luaというスクリプト言語で書かれていました。これをベースに作られたディープラーニングライブラリがPytorchで、Pythonベースで書かれているためPytorchと名付けられています。Facebookが開発・サポートしていることもあり、2017年の年初に公開されて以降、急速に人気を博しています。
(7)TensorFlow(テンソルフロー)
TensorFlowは、Google Brainチームにより開発されたディープラーニングのための計算ライブラリです。もともとはGoogle内部で使用されたものですが、2015年9月にApache 2.0ライセンスで公開されています。
上記で紹介したようなライブラリがフリーで提供されているため対抗上公開したのでしょうか。これを撒き餌としてGoogleの有償AIサービス(Google Cloud Machine Learning)を利用するユーザーを拡大しようという作戦が見て取れます。
TensorFlowは汎用的な計算ライブラリです。中間層の数や結合方法などのパラメータを指定することで、さまざまな算術演算を柔軟に実装できます。ただし、汎用的な分、これを使って機械学習アルゴリズムを作成するためには、Pythonのプログラミング技術の他にも微分積分や線形代数、統計などに関する最低限の知識が必要となります。
ダウンロードするとMNSTというチュートリアルが用意されており、RosorBoardというWebボードで学習状態を確認できます。興味のある方は試してみてください。次のようなアルゴリズムに応じた関数が用意されており、幅広い用途で使えます。
MNIST:手書き数字を判別するためのデータセット(初心者の勉強向き)
CNN:畳み込みニューラルネットワーク(画像認識向き)
RNN:再帰型ニューラルネットワーク(言語処理向き)
R-CNN:物体検出アルゴリズム
Word2Vec:単語と単語の関係をベクトルで示す(テキスト処理向き)
Seq2Seq Model:RNNを用いた機械翻訳モデル(文の生成、翻訳向き)
なお、2017年6月、TensorFlow上にObject Detection API(オブジェクト検出API)が公開されました。これは画像から人や車などのオブジェクトをピックアップしてくれるAPIで、画像検索の際に特定のオブジェクトを検出したり、ストリートビューから番地を検索したりなどGoogle製品に使われているものをオープンソース化したものです。また、2017年8月にはTensorFlowで訓練したモデルのライフサイクルを管理する「TensorFlow Serving」が公開されました。
(8)PaddlePaddle
中国トップの検索サイトを擁する百度はAIに注力しており、2016年にPaddlePaddleという機械学習プラットフォームを発表しています。中国語に強く、クラウドではなくクラスタ(分散コンピュータ)での利用を重視しているため、自前のサーバーでAI構築をする際には検討しても良いかと思います。
(9)Cognitive Toolkit(コグニティブ・ツールキット)
Cognitive Toolkit(CNTK)は、マイクロソフトのディープラーニングの基盤となっているフレームワークです。もともとはMicrosoft Reserchが社内で利用していたものですが、2016年1月にCNTKとしてMITライセンスで公開されています。2016年10月にはCNTKからCognitive Toolkitに改称しましたが、今でもCNTKが略称として使われています。
Cognitive Toolkitは、コードサンプルやチュートリアル、学習モデルなどを集めた「モデルギャラリー」ページが用意されているので、興味のある方はチェックしてみてください。
(10)mxnet
2016年11月にAmazonがサポートを公表して、一躍注目されるようになったライブラリです。もともとはワシントン大学とカーネギーメロン大学で開発されたもので、PythonやR、C++など多くの言語に対応しています。
機械学習には大量データが欠かせません。Facebookは顔と名前、投稿内容など、Googleは画像、動画、検索キーワードなどを大量に保有しています。このような各社が持つ大量データに応じて微妙に得意技も異なります。アマゾンの場合は大量のユーザーデータと商品データを持っていますが、ユーザーと商品を紐つける購買データは値がまばらにしか存在しない疎行列(Sparse matrix)デーです。こうした特徴に合ったディープラーニングがDSSTNEです。
Amazonは、それまでDSSTNE(デステニー)というライブラリをApache 2.0で公開していました。これはDeep Scalable Sparse Tensor Network Engineという英語から作られた造語でdestiny(運命)と同音ということを意識しているようです。DSSTNEは他のライブラリとは一線を画しており、疎行列データをターゲットとしています。ECサイトのユーザーと商品を紐つける購買情報は値がまばらにしか存在しない疎行列(Sparse matrix)データになります。こうした特徴に適したライブラリという触れ込みだったのですが、mxnetのサポートを公表した今、今後のDSSTNEのdestinyはどうなるのでしょうか。
Neural network(ニューラルネットワーク)が神経回路網という意味であることは知られていますが、TensorFlowのTensorやCognitive ToolkitのCognitiveはどのような意味でしょうか。
Tensorとは、一言で言えば多次元配列のことです。次元を階とすると、長さや重さなどの数値は0階テンソル、方向性を持つベクトルは1階テンソル、行と列からなる行列は2階テンソル、そして行と列と高さの3次元のデータが3階テンソルとして配列計算できます。実空間の概念ではここまでですが、テンソル計算ではさらに上位階まで計算できます。
一方、Cognitiveは”認知”という意味です。MicrosoftのCognitive Servicesは画像認識や音声認識、感情認識、自然言語理解など、人が認知する系のサービスのツール群を提供しています。また、IBM Watosonは、AIという言葉の代わりにCognitive Computing(コグニティブ・コンピューティング)という言い方を使うようにしていますが、これも「自然言語を理解し、学習して予測するコンピュータシステム」という意味で使われています。
なお、アマゾンのDSSTNEで出てくるSparse(スパース)も統計学や機械学習の言葉で、”疎”とか”スカスカ”という意味です。
今回は、現在注目を浴びているニューラルネットワークのライブラリをざっと紹介しました。次回からは、もう1階層上位に位置する各社のAIプラットフォームについて紹介していきます。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- ニューラルネットワークのモデルのバリエーション
- GoogleとMicrosoftのAIプラットフォーム【前編】
- そもそもディープラーニングとは何か?
- Microsoftのデータサイエンティストが解説するモバイル向けCNNとは?
- FacebookとApple、NVIDIAのAIプラットフォーム
- 大規模言語モデルの自然言語処理「Transformer」モデルの仕組み
- ハイプサイクルに登場する技術②ー エッジAIや組み込みAI、AIチップ
- de:code 2017セッションレポート:CNTKでディープラーニングを始めるには
- 機械学習とアルゴリズム
- ハイプサイクルに登場する技術①ー エッジと組み込み型AI