晩秋の候、ゆく秋も感慨深く思います。技術顧問の木村です。 今回は、先日リリースされたTesorFlow Liteをご紹介します。また、その他のディープラーニングフレームワークについて簡単に紹介します。
TensorFlow LiteはTensorFlowをモバイル端末で動くように改良したものです。 これは膨大な量のデータを用いるモデルの学習を行うためではなく、すでに訓練済みのモデルを使って、デバイス上で、素早く処理を実行するために作られました。 今までAppleの「Siri」、Googleの「Google Assistant」や、「Amazon Alexa」などはディープラーニングの処理をクラウド上で行なっています。 TensorFlow Liteにより、取得したデータを端末側にとどめておくことでプライバシーの問題を緩和できるというメリットもあります。
TensorFlow Liteの特徴
- 軽い (Lightweight)
処理能力が低いモバイル端末のデバイス上でも起動や初期化が素早く行えるよう設計されています。 - 複数のプラットフォームで動く(Cross-platform)
TensorFlow Liteは様々なプラットフォーム上で動かすことができる。今回のプレビューの初期段階では、AndroidとiOSに対応しています。AndroidではJavaとC++, iOSではC++ の APIが用意されています。 - 早い(Fast)
携帯電話やIoTなどに最適化されていて、モデルの読み込みなどが劇的に改善されました。
最近はエッジコンピューティングが注目されつつあります。
エッジコンピューティングとは 「端末の近くにサーバーを分散配置する」というネットワークコンピューティングの技法のひとつです。「 端末」、つまりスマートフォンなどにネットワーク的に近い場所へ、サーバーと呼ばれるコンピュータを配置するのです。
これは、クラウドコンピューティングとは逆の流れです。背景には計算資源が安価になったことがあります。クラウドコンピューティングでは、データを集約して計算していました。プロセッサなどの計算資源は高価である一方、通信は安価だったからです。昨今ではプロセッサの高速化が進みました。現代のスマートフォンの処理速度は100G Flops程度、一方で、10年ほど前のPC用ハイエンドCPUであったPentium 4 は7.6 GFLOPSしかありません。 TensorFlow Liteはそんなエッジコンピューティングの流れを加速させるかもしれませんね。
ディープラーニングフレームワークとは
TensorFlowはディープラーニングフレームワークの一つです。ディープラーニングモデルを学習するためには、GPUを使ったプログラムが不可欠です。しかし、GPUプログラムを直接書くのはCPUのプログラムになかなか大変です。ディープラーングフレームワークを用いれば、GPU上での演算を簡単に書くことができます。
有名なディープラーニングフレームワークの一覧
参考:マルチGPUでの各ディープラーニングフレームワークの実行速度(小さいほど速い)
出典: Shaohuai Shi, Qiang Wang, Pengfei Xu, Xiaowen Chu, Benchmarking State-of-the-Art Deep Learning Software Tools, arXiv:1608.07249v7 [cs.DC] 17 Feb 2017.
■TensorFlow
Google製のディープラーニングフレームワークです。最もユーザが多く、活発に開発されています。 TensorFlowそのものはテンソル演算を行うもので、低水準な演算をサポートしています。低水準演算でディープラーニングを書くのはやや骨が折れます。そこで、対応する高水準のラッパーライブラリも多いです。
ラッパーとは プログラミングやソフトウェア開発の分野では、ソフトウェアやプログラム部品などが提供するクラスや関数、データ型などを本来とは異なる環境や方法で利用できるようにしたもの
高水準は 記述の抽象度が高い言語を指します。 低水準は 逆にコードがより機械語に近いことを表します。
他のフレームワークと比べ、実行が遅いという弱点があります。
■CNTK
Microsoft製のディープラーニングフレームワークです。Brain scriptという独自の言語で書きます。最近、Pythonにも対応しました。 CPU版の実行速度はほかのフレームワークを圧倒しています。 やや、ユーザが少ないのが欠点です。
■Chainer
日本のディープラーニング企業である Prefferd Networksによって開発されています。国内での人気は高く、日本語の情報が多いです。計算グラフを動的に作成するデファインバイランをいち早く実装しました。 拡張したい場合は、微分方法(バックワード演算)を明示したり、cuDNNライブラリ用のC++コードを書く必要があるという弱点を持ちます。cupyというnumpy互換のライブラリを利用することもできます。
■Torch & PyTorch
Pytorch は Facebook が後援しているディープラーニングフレームワークです。Chainerとよく似た構造をしています。バックワード演算を書く必要はありません。最近は論文の実装が PyTorchで公開されることも多く、じわじわと人気が高まっています。
■MxNet
ワシントン大学とCMUによって開発されているディープラーニングライブラリで、AmazonやBaiduで利用されています。メモリ負荷が低い、実行速度が速いなどの特徴を持ちます。一方で、まだまだドキュメントが不足している印象があります。
■Caffe
バークレイによるディープラーニングライブラリです。高速に動作し、画像処理に強いという特徴をもちます。豊富な学習済みモデルが、Model Zoo · BVLC/caffe Wiki · GitHub で公開されています。あまり触ったことはありませんが、モデル定義ファイルがプログラムと分離していたりして少し特殊なライブラリという印象があります。
■Keras
バックエンドと呼ぶ低水準の下位ライブラリをラップする形の高水準ライブラリです。バックエンドには TensorFlow, CNTK、Theano(今回は紹介しない)が利用できます。非常に簡単にディープラーニングのコードを書くことができます。入門には最適です。一方で、複雑なネットワークを組みたい場合は力不足感が否めません。
ラップするとは そのプログラム特有の型を使わず、Stringとはintとか、javaで共通して使える引数や戻り値でinterfaceをつくり、それを継承したクラスで、実装すること
■Gluon
MxNetをラップする高水準ライブラリです。将来的にCNTKもサポートする予定だそうです。Kerasとくらべて高い拡張性を持っています。一方で公式でサポートするレイヤの数はまだまだ少ないです。
■H2O
HadoopやSpark上で動かすことを想定した機械学習ライブラリです。ドキュメントが少ないのが欠点ですが、分散環境との相性は良いでしょう。
結局、どのフレームワークを使えばよいのか?
あなたがディープラーニングプログラムの初心者なら、Kerasを一番におすすめします。入門者用に思われがちですが、ある程度の汎用性があります。私もKerasでかけるな、と思ったらKerasで書くことが多いです。 ディープラーニングプログラムをプロジェクトでしっかり書きたいと思った時にはどうすればいいのか。これはなかなか難問です。ディープラーニングはまだ発展中の技術です。フレームワークの仕様もどんどん変わります。現状ではフレームワークを使い捨てていく感じが良いのではないかというのが個人的な感想です。独自のラッパーライブラリを書く、などとしていたら、依存ライブラリの仕様が変わって全部書き直し、となってしまいます。
参照 https://www.codexa.net/tensorflow-lite-annoucement/