機械学習、深層学習のプラットフォームの整理


# はじめに
最近、プラットフォームのオープン化が盛んになってきたので、改めて機械学習プラットフォーム、深層学習プラットフォーム(フレームワーク)の整理をしてみる。
※※※ 事実と異なってればご指摘ください。

## 主なプラットフォーム
### PaaSサービス
|名称|URL|
|:--|:--|
|Google Cloud Platform   | https://cloud.google.com/|
|Azure Machine Learning  | https://azure.microsoft.com/ja-jp/services/machine-learning|
|Amazon Machine Learning | https://aws.amazon.com/jp/machine-learning |
|Bluemix IBM Watson      | https://www.ibm.com/watson/

### 学習フレームワーク(Python)
|名称|URL|
|:--|:--|
|Theano|http://deeplearning.net/software/theano/index.html|
|TensorFlow|https://www.tensorflow.org/|
|Caffe|http://caffe.berkeleyvision.org/|
|Chainer|http://chainer.org/|
|Keras|https://keras.io/|



#PaaSサービスの簡単な説明
各ベンダーの提供サービスには予め学習されたモデルの翻訳や画像・動画認識などが用意されています。

## Google Cloud Platform
![Screen Shot 0029-07-04 at 10.53.49 PM.png](https://qiita-image-store.s3.amazonaws.com/0/52867/57236a7f-6bff-a6c2-62ef-5aa68817ccf8.png "Screen Shot 0029-07-04 at 10.53.49 PM.png")

Google社が提供する機械学習プラットフォームになります。
サイズを問わず、あらゆるデータの機械学習モデルを簡単に構築できるマネージド サービスです。
クラウド上に用意されたTensorFlowも使えます。
※サイトより抜粋

### 機械学習の内容
・Cloud Machine Learning Engine
  教師ありの回帰・分類、教師なしのクラスタリングなどさまざまなデータから学習ができます。
  使用アルゴリズムは非公開。
  

## Azure Machine Learning
![Screen Shot 0029-07-04 at 10.56.59 PM.png](https://qiita-image-store.s3.amazonaws.com/0/52867/a725f33f-5a9b-eeee-7d71-900e996a2ad2.png "Screen Shot 0029-07-04 at 10.56.59 PM.png")

Azure Machine Learning は、クラウドの予測分析サービスであり、分析ソリューションとして予測モデルを迅速に作成し、デプロイできるようにします。
そのまま使うことのできるアルゴリズムのライブラリを利用して、インターネットに接続した PC でモデルを作成し、予測ソリューションを迅速にデプロイできます。
※サイトより抜粋

### 機械学習の内容
・Azure ML
  こちらも教師ありの回帰・分類、教師なしのクラスタリングなどさまざまなデータから学習ができます。
  使用アルゴリズムは選択できます。（アルゴリズムが多すぎてオーバスペックとのこと。）

## Amazon Machine Learning 
![amazon_machine_learning.png](https://qiita-image-store.s3.amazonaws.com/0/52867/8d58ff3e-c5fd-95ac-a483-a2b128d2a97e.png "amazon_machine_learning.png")

Amazon Machine Learning は、機械学習モデルを構築し、予測を生成するためのマネージド型サービスであり、堅牢でスケーラブルな高度なアプリケーションを開発できます。Amazon Machine Learning を使用すると、機械学習アルゴリズムおよび手法に関する幅広い背景知識を必要とすることなく、強力な機械学習テクノロジーを使用できます。
※サイトより抜粋

### 機械学習の内容
・Amazon Machine Learning
　こちらも教師ありの回帰・分類、教師なしのクラスタリングなどさまざまなデータから学習ができます。

　[使用アルゴリズム] 
　　回帰 : Linear Regression 
　　分類 2値分類 : Logistic Regression
　　　　 多クラス分類 : Multinomial logistic Regression


## Bluemix IBM Watson
![IBM-Watson-Logo.png](https://qiita-image-store.s3.amazonaws.com/0/52867/5b8521ab-2b44-4d2b-4fca-43d4bf9c6117.png "IBM-Watson-Logo.png")

IBMは、AIを「Artificial Intelligence（人工知能）」ではなく、「Augmented Intelligence （拡張知能）」として人間の知識を拡張し増強するものと定義し、IBM Watsonを中核とするコグニティブ・ソリューションとしてお客様に提供しています。IBM Watson(ワトソン)は、自然言語処理と機械学習を使用して、大量の非構造化データから洞察を明らかにするテクノロジー・プラットフォームです。
※サイトより抜粋

### 機械学習の内容
　こちらも教師ありの回帰・分類、教師なしのクラスタリングなどさまざまなデータから学習ができます。
　また学習済みのAPIが複数用意されているので、新規サービス作るときには便利です。
　
　　[使用アルゴリズム] 
　　　非公開
　　　「複数の利用可能なアルゴリズムを検討し、ニーズに合致するアルゴリズムを選択する」らしいです。
　　　
#学習フレームワークの簡単な説明
OSSで配布されているフレームワークになります。

##Theano
![main-thumb-t-449747-200-vosprwwgrsgxbcuogpvzqfdrnccpscnt.jpeg](https://qiita-image-store.s3.amazonaws.com/0/52867/b43f61ac-c4cf-3143-f78c-0673c8b8b1c4.jpeg "main-thumb-t-449747-200-vosprwwgrsgxbcuogpvzqfdrnccpscnt.jpeg")

http://deeplearning.net/software/theano/index.html

ディープラーニングのフレームワークの祖父と呼ばれ、多くの世界的研究者はPythonによって書かれたTheanoを使っているそうです。

### メリット/デメリット
|メリット|
|:--|
|計算グラフは見やすく抽象化されている|
|再帰型ニューラルネットワークは計算グラフに良く適合する|
|高レベルのラッパー（Keras、Lasagne）により、手間が省ける|

|デメリット|
|:--|
|エラーメッセージが役に立たないことがある|
|大きなモデルの場合、コンパイルの時間が長くなることがある|
|事前トレーニングを受けたモデルにへのサポートが不十分|
|単一GPU|

##TensorFlow
![tensor-flow_opengraph_h.png](https://qiita-image-store.s3.amazonaws.com/0/52867/b3a27024-25d9-3dbe-f2ed-1713bf0a8035.png "tensor-flow_opengraph_h.png")

https://www.tensorflow.org/

TnesorFlowは、Googleが「Google　Brain」というプロジェクトのもとで開発を行っているニューラルネットワークの最新ライブラリです。

ハイレベルな機能を実装することができ、計算をデータフローやグラフで表すことができます。
ライブラリの内部はおよそC++で作られていますが、Pythonも含まれており柔軟に使用できる構造になっています。

### メリット/デメリット
|メリット|
|:--|
|計算グラフの抽象化|
|Theanoよりもコンパイル時間が短い|
|TensorBoardを使用して視覚化が可能|
|データとモデルの並列処理|

|デメリット|
|:--|
|他のフレームワークより遅い|
|事前トレーニングされたモデルがあまりない。|
|計算グラフは単なるPythonなため、遅い。|
|商用サポート無し|
|新しいトレーニングのバッチがあるごとに読み込みをするためにPythonにドロップアウトする|
|大規模なソフトウェアプロジェクトで動的型付けにエラーが発生しやすい|

##Caffe
![caffe-logo.jpg](https://qiita-image-store.s3.amazonaws.com/0/52867/056fdc3a-c759-e3c1-00e4-97f2d27a945e.jpeg "caffe-logo.jpg")

http://caffe.berkeleyvision.org/

Caffeは有名で、広く一般に使用されているマシンビジョンのライブラリで、Matlabのの実装した素早い畳み込みネットワークをC及びC++で移植したもの。
Caffeは、画像処理を主としテキスト、音声、時系列データなど他のディープラーニングを対象としてません。

### メリット/デメリット
|メリット|
|:--|
|フィードフォワードネットワークと画像処理に適している|
|既存のネットワークの微調整に適している|
|コードを書かずにモデルをトレーニングする|
|Pythonのインターフェースが非常に有益である|

|デメリット|
|:--|
|新しいGPU層にC++/CUDAを書く必要がある|
|再帰型ニューラルネットワークには適していない|
|大規模なネットワークには（GoogLeNet, ResNet）使いにくい|
|拡張性がない|
|商業用サポートがない|
|開発に時間が掛かる|



##Chainer
![tensor-flow_opengraph_h.png](https://qiita-image-store.s3.amazonaws.com/0/52867/2f67b158-f335-0a8d-bb0e-3d7ec093cc8f.png "tensor-flow_opengraph_h.png")

http://chainer.org/

Chainerとはオープンソースのニューラルネットワークフレームワークで、Python APIを備えています。中心となる開発チームはPreferred Networksという東京を拠点とする機械学習のスタートアップで活動しており、多くの東京大学のエンジニアが携わっています。
CMUのDyNetやFacebookのPyTorchが登場するまではChainerが動的計算グラフの主要なニューラルネットワークフレームワークであり、様々な長さの入力が可能なネットワークであったため、自然言語処理作業には人気の高い機能です。独自のベンチマークを使い、Chainerは他のPython向けフレームワークよりも素早く、MxNetとCNTKを含めた最も遅いテストグループであるTensorFlowを備えています。

### メリット/デメリット
|メリット|
|:--|
|直感的な計算グラフの構築が可能|
|デバッグが比較的行い易い|

|デメリット|
|:--|
|計算速度が遅くなりがち|
|アップデートについていけるか不安|
|利用人口がまだまだ少ない(日本国外)|

##Keras
![1b042898-d4d8-4a90-b7aa-831eea3a5f83.png](https://qiita-image-store.s3.amazonaws.com/0/52867/a1d040de-f433-a325-8163-558a46e67cb8.png "1b042898-d4d8-4a90-b7aa-831eea3a5f83.png")

https://keras.io/ 

Kerasとは、高速計算ライブラリのディープラーニング用ラッパーとないTheano及びTensorFlowの最上部で使用するライブラリで、直感的なAPIを提供しています。

ディープラーニングを始めようというときにはプログラミングの壁が大きく立ちはだかります。しかし、Kerasの場合はプログラミングが未経験でも、すぐに簡単なネットワークの学習は可能になります。


|メリット|
|:--|
|プログラミング未経験でも恐らく大丈夫|
|フレームワークが急速な成長を続けている|
|利用者も多い|
|最も初心者に優しいのはKerasで間違いない|
 
|デメリット|
|:--|
|処理の中身はコードからは全く分からない|
|オリジナルの処理をさせるのが面倒|
|計算グラフ構築後、変更不可能|


##さいごに
PaaS事業者においては実現できることで各社に差はないので、使いやすなどが勝負になってくるかと思います。

フレームワークについては先日も[SONYさん](https://nnabla.readthedocs.io/en/latest/index.html)が出してましたね！
今後もOSS化は増えそうですね！

やりたいことを実現するのに必要なものを選択するのがベストかと思いますが、絶対に必要なのはアルゴリズムの選択やニューラルの設計等の根本的なところが大事だと感じます。