はじめに
前回(Vol2)はディープラーニングの高速処理を支えるハードウェアとしてGPU、FPGA、ASICなどのAIチップとエッジコンピューティングについて説明しました。今回は、ニューラルネットワーク演算のエンジンである機械学習ライブラリについて説明します。
機械学習ライブラリとは
機械学習ライブラリはディープラーニングを行うためのツールで、フレームワークとも呼ばれています。機械学習のためのライブラリは昔からあったのですが、2012年にディープラーニングが脚光を浴びてからはニューラルネットワーク系のライブラリがいっきに増えました。カナダ、アメリカ、イギリス、中国、そして日本でも新しいライブラリが誕生しており、最近人気のあるもの、かつては人気があったが今では廃れたものなど浮き沈みも激しい状況です。この先は新しいライブラリの誕生というよりも、既存ライブラリの改良と淘汰が進んでいくだろうと予想しています。
表1に現在主流のライブラリ一覧を示します。もともと大学で開発されたものが多いのですが、開発者がGoogleやFacebookなどの大手企業に招かれたり、高額のサポートを受けたりして、今ではビッグカンパニーがライブラリ進化の中心的存在になっています。大学発祥ということもあってライブラリーはオープンソースで提供されていて、それが人工知能の発展に大きく役立っています。それぞれチュートリアルも用意されていますので、誰でも(英語さえこなせば)手軽に利用することができます。
[RELATED_POSTS]
|
ライブラリ |
開発・サポート |
ライセンス |
発表 |
1 |
Caffe(カフェ) |
バークレー校 |
BSD |
2013/12 |
2 |
DL4J |
Skymind |
Apache |
2014/4 |
3 |
Keras(ケラス) |
Googleなど |
MIT |
2015/3 |
4 |
Chainer(チェイナー) |
Preferred Networks |
MIT |
2015/6 |
5 |
TensorFlow(テンソーフロー) |
|
Apache |
2015/11 |
6 |
Torch(トーチ) |
Ronan collobert氏 |
BSD |
2002/10 |
7 |
Cognitive Toolkit(コグニティブ) |
Microsoft |
MIT |
2016/1 |
8 |
PaddlePaddle(パドルパドル) |
百度(Baidu) |
Apache |
2016/9 |
9 |
MXNet |
Amazon |
Apache |
2016/11 |
表1:現在主流の機械学習ライブラリ
オープンソースライセンス(OSS)
表1に掲げたAIライブラリは、どれもオープンソースライセンス(OSS)でgithubからソースコードが公開されています。OSSというとGLP(GNU General Public Licence)が有名でしたが、ちょっと利用条件が厳しすぎることもあって最近は表1にある3つのライセンスがよく使われています。
もっとも制約がゆるいのがマサチューセッツ工科大学を起源とするMITライセンスで、使用条件は概ね「著作権者は義務や責任を負わない」「著作権を表示する」の2つです。カリフォルニア大学によって制定されたBSDライセンスもほぼ同程度で、この2つに「利用して作った製品の宣伝に組織や著作権者の名前を使わない」という条件が加わっています。Apacheライセンスは、AFS(アパッチソフトウェア財団)によるライセンス規定で、これに「製品を改変した場合にその変更点を示す」という条件が加わっています。
主な機械学習ライブラリ
表1にピックアップした機械学習ライブラリについて、以下に簡単に紹介しましょう。
(1)CaffeとCaffe2
2012年にトロント大学がディープラーニングを使って画像認識コンテスト(ILSVRC)で圧勝したことにより、世界中の大学がディープラーニングに傾倒しました。そして、2012年11月にモントリオール大学でTeano(テアノ)というライブラリが誕生し、その1年後にカリフォルニア大学のCaffe(カフェ)が発表されました。
Caffeは、同大学バークレー校に在籍中のYangqing博士のプロジェクトで作られたフレームワークで、ILSVRC2012で優勝したCNN(畳み込みニューラルネットワーク)による画像認識を得意とします。その後はBVLC(Berkley Vision and Learning Center)が中心となって開発を続けており、CNNだけでなく最近注目されているRCNN、LSTM、転移学習などのアルゴリズムをサポートしています(アルゴリズムについてはブログ後半で説明します)。
TeanoやCaffe以降さまざまなフレームワークが誕生して、Caffeも古い感じになっていたのですが、2017年4月にFacebookがCaffeをベースにCaffe2をGitHubで公開したことで、再び人気急上昇中です。なお、TeanoはMILAという団体が開発を続けていたのですが、2017年10月に開発を中止すると発表されました。
(2)DL4J
最近のライブラリのインターフェースは、ほとんどがPythonをサポートしていますが、DL4JはDeep Learning kfor Javaという名前の通りJava、Scalaベースのライブラリです。Skymindというスタートアップ企業が開発しており、「私はやっぱりJavaがいい」という人たちに愛用されています。
世界で人気のプログラミング言語 最近人気のプログラミング言語はなんでしょうか。IEEE Spectrumの「The Top Programming Languages 2017」 で見ると、人気No.1にPythonが登場し、C、Javaと続いています。6位にR言語も入っていて、ディープラーニングやIoTでよく使われるプログラミング言語の人気が上がっているのがわかります。日本で人気のRubyも12位に入っています。 |
(3)Keras
Keras(ケラス)のメイン開発者はGoogleのFrançois Chollet(フランソワ ショワレ)氏で、GoogleのフレームワークTensorFlowのラッパーとして人気の高いライブラリです。さまざまな機能が高度にモジュール化されているので、イチからコードをスクラッチで書く必要がありません。層を積み上げ、各層のアルゴリズムやパラメータを指定する形でニューラルネットワークを構成することができますので、記述するコードもかなり少なくなります。また、可視化機能も充実していて、学習状況や作成したネットワークをグラフやフローで表示できます。TensorFlowを使いこなすのは、それなりに難易度が高いのですが、Kerasをラッパーとして使えば、とても簡単にディープラーニング処理ができます。
ラッパーとは ラッパー(Wrapper)と言えば「Hey!」で始まる音楽を連想しますが、ITの世界では「元の機能を包み、覆い隠す別の機能」という意味で使われます。KerasがTensorFlowのラッパーということは、ユーザーはKerasの使いやすさを利用しながら、バックで使われているTensorFlowの機能は意識しないようになっています。 |
(4)Chainer
Chainer(チェイナー)は、日本製のライブラリです。開発元はPreferred Networksというスタートアップ企業で、トヨタを始めとして多くの日本企業から資金調達を得て活動しています。Chainerの特徴も使いやすさで、計算グラフを簡単に構築できます。また、何と言っても日本製なので日本人にとってはとっつきやすいライブラリだと言えます。
(5)TensorFlow
数あるAIライブラリの中で現在最も人気の高いのがGoogle TensorFlow(テンソーフロー)で、当社のデザイン認識AIツール「AISIA DesignRecognition」でも利用しています。もともとはGoogle内部で使われていましたが、2015年11月にオープンソースとして公開されました。TensorFlowの特徴は、汎用性が高く細かな調整が可能なフレームワークだということです。
C++で実装されているので処理速度も速く、ニューラルネットワーク処理のための関数も豊富に用意されています。モジュール化されていないので、プログラミングしだいでなんでもできます。ただし、汎用的な分、これを使いこなしてデイープラーニングのモデルを作成するためには、相応の学習時間と数学や統計学の知識が必要となります。そのとっつきにくさを補うのが、上記で紹介したKerasというラッパーなのです。
(6)TorchとPytorch
Torchは古くからある機械学習ライブラリでLuaというスクリプト言語で書かれていました。これをベースにPythonで書いて2017年1月にFacebookが公開したライブラリがPytorchです。Facebookは同時期にCaffe2も公開しているので、2つのフレームワークをサポートしていることになります。
Facebookには、FAIR(Facebook AI Research)というAI研究チームとAML(Applied Machine Learning)というAI実装チームがあります。FAIRは以前からPytorchを使っていましたが、Pytorchは高度な研究には適していますがリソースを多く使うライブラリです。研究機関での利用例は多いのですが、あくまでも研究用途であると明記されています。そのため実装チームであるAMLはスマホなどリソースの小さい環境でも利用できるCaffe2を使っているのです。
ONNX FacebookとMicrosoftは、2017年9月にONNX(Open Neural Network Exchange)を発表してGitHubで公開しました。これは、複数のフレームワーク間で学習モデルを簡単にスイッチできる仕組みです。現在のところ、FacebookのCaffe2とPytorch、そしてMicrosoftのCognitive ToolkitもONNXに参加しています。これにより、例えばPytouchで作成した学習モデルをCaffe2で動かすこともできます。ユーザーにメリットが大きいので、今後他のフレームワークも参加することを期待しています |
(7)Cognitive Toolkit
今、AIでGoogleを猛追しているMicrosoftは、Cognitive Toolkitというフレームワークを公開しています。Googleと同じく、もともとは社内で利用していたものを2016年1月にCNTKという名前でGitHubで公開し、同年10月にCognitive Toolkitという名称に改称しました。実は、せっかく名称変更したのに、いまだに通称でCNTKと呼ばれており、あまり改名した意味がないなぁって印象です。
2017年6月に公開されたCognitive Toolkit2.0では、TesolFlowと同じくKerasをラッパーとして利用できるようになりました。また、上記のONNXにも参加しており、マイクロソフト社のオープンなAI戦略が感じられます。
機能の充実ぶりも著しく、これからますます使われそうなフレームワークです。実は、当社でサービス提供している花の名前を教えてくれるAI「AISIA FlowerName(この花な~んだ?)」もはCognitive Toolkitを使っており、当社は当面、Google TensolFlowとMicrosoft Cognitive Toolkitを使い分けていく戦略としています。
CognitiveとTensor IBMはAIをArtificial Intelligence(人工知能)ではなく、Augmented Intelligence(拡張知能)と定義し、AIよりもCognitive Computingという言葉を使うようにしています。Cognitive(コグニティブ)は「認知」という意味です。結構、大真面目にArtificial Intelligenceという言葉との違いを論じている人もいますが、私にはエッジコンピューティングとフォグコンピューティングと同じく言葉遊び(もしくは覇権争い)にしか見えません。でも、Cognitive Computingという言葉自体はアメリカでもよく使われていて、私もアメリカでよく耳にしました。そして、Microsoftのフレームワークもこの言葉を採用しています。 一方、GoogleのライブラリTensorFlowのTensorとは、”多次元配列”のことです。長さや重さなど方向性を持たない数値は0階Tensorで、方向性を持つベクトルは1階Tensor、行と列からなる行列は2階Tensor、行と列と高さを持つ3次元データは3階Tensorとして配列計算できます。実空間に置き換えてイメージできるのはここまでですが、深層学習処理ではさらに上位階まで計算できます(次元についてはブログ後半で説明します)。なお、Tensorは日本ではテンソルと呼ばれていますが、このブログでは英語の発音に近いテンソーを略に当てています。 |
(8)PaddlePadlle
中国のネット産業では、検索サイトの百度(Baidu)、eコマースの阿里巴巴(Alibaba)、SNSの騰訊(Tencent)の3社がしのぎを削っています。それぞれの中核ビジネスは、ちょうどGoogle、Amazon、Facebookに相当するってのが面白いですね。そしてアメリカの3社が人工知能に力を注いでいるように、中国の3社も人工智能(中国語ではこう書きます)に力を入れています。
この中でも百度は一歩先んじており、PaddlePadlle(パドルパドル)というフレームワークも作成しています。上野動物園のパンダの名前が香香(シャンシャン)になったように、2回繰り返すとちょっと可愛いくなるようです。そして、日本でChainerが多くの日本人に使われているように、中国では中国語で理解できるPaddlePadlleが人気があります。
PaddlePadlleの特徴は、クラウドだけでなく、分散コンピューティングのクラスタで高速に稼働することで、エッジコンピューティングの普及が追い風になりそうです。中国では国策として人工智能に力を入れており、新しい技術を取り入れる機運も高いので、これから多くの中国系企業がPaddlePadlleを使ってゆくものと思われます。
(9)MXNet
MXNetは、もともとワシントン大学とカーネギーメロン大学で開発されたライブラリです。2016年にAmazonがサポートを公表して一躍脚光を浴びています。MXNetの特徴はスケーラブルなことで、大規模な学習演算でもGPUの数を増やすことにより高速に処理することができます。
また、学習済モデルは軽量で、スマートフォンやノートPCなど比較的処理能力の低いデバイスでも利用することができます。なお、AmazonはもともとDSSTNE(デスティニー)というライブラリを公開していたのですが、今後はMXNetを中心にやってゆくようです。やはり、Amazonにとってスケーラブルという特徴は魅力あるのでしょうね。
まとめ
Vol.3では、現在、よく使われているライブラリをさっと紹介しました。ライブラリの多くがビッグカンパニーのサポートを受けて、さらなる開発競争を繰り広げています。この先も人気のないものは淘汰されてゆくでしょうが、戦場は次第に上位層のAIプラットフォームやAIアプリケーションに移っています。
梅田弘之 株式会社システムインテグレータ :Twitter @umedano
- カテゴリ: