こんにちは、AINOWライターのゆかわです。 機械学習、特にディープラーニング(深層学習)のモデルを構築する際に重要となってくるのが、深層学習フレームワークです。 今回は、そもそもフレームワークとは何なのか、有名なディープラーニングフレームワークなどについて特徴を解説していきます。 フレームワークとは?ライブラリとの違い そもそもフレームワークとは? フレームワークとは、プログラムを作る際のひな形のようなものです。 機械学習の分野では、主にディープラーニングモデルを作る際に、TensorFlowやPyTorchなどのフレームワークを用いるのが一般的です。 例として車を作ることを考えると、フレームワークはある程度形になっている車体に、自分の好きなタイヤやハンドルなどをはめていくイメージです。 一から車を作ることもできますが、ある程度形になっている方が、作業は圧倒的に楽です。 また、フレームワークによっては学習済みの有名なディープラーニングモデルを用意しているものなどもあるので、初心者の人でもすぐに利用することができるなど、何かと便利です。 ライブラリとの違い ライブラリとフレームワークはしばしば同じような意味合いで使われますが、厳密には異なります。 フレームワークは上でも述べたように、プログラムを作るひな形だったのに対して、ライブラリはプログラムを作るのに適宜必要とされる道具のようなものです。 上で述べた自動車の例で言うならば、タイヤやハンドルにあたるのがライブラリです。 もちろんこれも一から作ることはできますが、専門店などで買った市販のタイヤを使う方が簡単です。 ディープラーニング(深層学習)フレームワーク7選 ライブラリの場合は、その都度必要なものを追加で使っていきますが、フレームワークの場合は、一つのフレームワークを使ってプロダクトを作ることが多く、どのフレームワークを使うかの選定も重要です。 ここでは、有名なディープラーニングフレームワークについて、それぞれの特徴を簡単にまとめていきます。 TensorFlow TensorFlowはGoogleのGoogle Brainチームによって2015年に開発され、ディープラーニングフレームワークの中で現在最も人気のあるフレームワークと言っても過言ではありません。 Googleが開発したフレームワークなので、GmailやGoogle翻訳などに使われているフレームワークも、もちろんこのTensorFlowです。 主な特徴としては、 C++とPythonで書かれている ドキュメンテーションが充実している iOSやAndroidなどのモバイルのプラットフォームでも利用できる Tensorboardと呼ばれる、訓練過程を観察できる機能がついている PyTorch PyTorchはFacebookの人工知能グループによる開発からスタートし、2016年にリリースされました。上で述べたTensorFlowの人気に最も近いのが、このPyTorchです。 主な特徴としては、 構文がわかりやすい 研究者の間で人気(論文で発表されたモデルの実際のコードは、PyTorchで書かれたものが比較的見つかりやすい) pdbやPyCharmなどのデバッガーが使える 動的な計算グラフ(学習速度は落ちるものの、柔軟なモデルの構築が可能) Keras KerasはFrancois Chollet氏(現在はGoogleのエンジニア)を中心として2015年に開発されました。現在はTensorFlowに取り込まれ、tf.kerasの形で使われるのが一般的です。 ちなみに、開発者のFrancois Chollet氏自身が執筆したKerasの解説本も出版されています。 主な特徴としては、 モデルの構築がとても簡単で、初心者にとってもわかりやすい 素早く実装できるので、プロトタイプの作成時に便利 TensorFlow、CNTK、Theanoという複数のバックエンドをサポート Caffe CaffeはYangqing Jia氏が、カリフォルニア大学バークレー校の博士課程在学中に始めたプロジェクトで、同校のBAIR(Berkeley Artificial Intelligence Research)を中心に開発が行われ、2017年にリリースされました。 主な特徴としては、 画像認識などの処理が得意 開発コミュニティが活発 動作が速い 公式サイト Microsoft Cognitive Toolkit 名前にも入っている通りマイクロソフトによって開発されたこのMicrosoft Cognitive Toolkitは、元々CNTKという名前で2016年にリリースされましたが、同年10月に現在の名前に変わりました。 Skypeなどにも使われています。 主な特徴としては、 ・リソース効率が良い ・ONNXフォーマット(ディープラーニングモデルを異なるフレームワーク間で交換するためのフォーマット)を初めてサポート ・巨大データセット処理時のパフォーマンス低下を最小化するためのアルゴリズムが組み込まれているので、複雑マシンで巨大データセットを扱える ・コミュニティはそこまで発展していない MxNet MxNetは、CMU(カーネギーメロン大学), NYU(ニューヨーク大学), NUS(シンガポール国立大学), MIT(マサチューセッツ工科大学)など、様々な大学からの研究者が協力して開発され、2016年にAWS(Amazon Web Service)によるサポートが発表されました。 主な特徴としては、 高いスケーラビリティ モバイルデバイスも対応可 Python, R, Scala, JavaScript, C++など多くの言語に対応 研究者の間での人気はあまり高くなく、コミュニティもそこまで発達していない 命令的プログラムと宣言的プログラムの併用が可能 Chainer Chainerは日本のベンチャー企業である、PFN(Preferred Networks)によって開発されました。2019年12月にその開発を終了し、PyTorchへ移行されることが発表されましたが、define-by-runというアプローチを他のフレームワークに先駆けて提唱するなど、後に続くフレームワークにも少なからず影響を与えました。 主な特徴としては、 国内での人気が高い TensorFlowのように計算グラフを定義してから計算を実行するのではなく、計算と同時に計算グラフを定義するので、モデルの再構築が楽(これがPyTorchなどの動的計算グラフにつながる) 結論 どのディープラーニングフレームワークを使うのが良いか 上でさまざまなディープラーニングフレームワークについて、その特徴をみてきましたが、実際のところどのフレームワークを使うのが良いのでしょうか。 GitHubのスター数比較 今回、それぞれのフレームワークの人気を測るための一つの指標として、GitHub上でのスター数を比較してみました。 以下はその結果です。 TensorFlow・・・146k PyTorch・・・39.7k Keras・・・48.7k Caffe・・・30.5k Microsoft Cognitive Toolkit(CNTK)・・・16.8k MxNet・・・18.8k Chainer・・・5.4k こうしてみてみると、やはりTensorFlowやPyTorchは他のフレームワークと比べてスター数が多いことがわかります。 あくまで一つの指標に過ぎませんが、スター数が多いほど開発が中止される可能性は低く、より安心です。 TensorFlow? PyTorch? 人気のあるフレームワークのうち、TensorFlowとPyTorchのどちらを使うかというのは意見の分かれるところです。 現段階では、ビジネスでよく使われる傾向にあるのがTensorFlowで、研究によく使われるのがPyTorchであるようです。 上でも紹介したように多少の違いはありますが、どちらかにしか備わっていない機能は少なくなってきています。そのため、どちらのフレームワークの方がより多くの人に使われているか、というのも重要な判断材料になってきます。 今のところはTensorFlowの人気の方が上回っているような状況ですが、今後もPyTorchを用いた研究が進み、その研究成果がビジネスにも応用されるようになってくると、PyTorchの人気がTensorFlowを上回ってくることもあるかもしれません。 PyTorchやTensorFlow以外のフレームワークについても、今後のアップデートなどによって人気を伸ばしてくることは十分にあり得るので、これからの動向にも注目です。 色々なバックグラウンドの人と関わるのが好きで、サークルでは外国人観光客の方をガイドする活動を行っていました。今は新宿のゴールデン街も好きです。