【勉強会】「機械学習入門CloudVisionAPI & TensorFlow」 の参加レポート

# 今日の内容
### 概要リンク
http://nsstudy.connpass.com/event/31010/
機械学習および深層学習の分析／開発環境について、Googleが最先端で提供しているサービスは何か。「Tensor Flow」「Cloud Machine Learning」「Machine Learning APIs」の3点なのですが、それらについてのお話です。

```
　<3者の関係>
（研究・分析向き）TF　⇔　Cloud MachineLearning　⇔　Machine Learning APIs（アプリ開発向き）
```

### プレゼンター：佐藤一憲氏
Google Cloud PlatformチームのDeveloper Advocateを務めています。Google内でAdvocate（アドボケート）という場合、紹介・講演者のような役割を指すそうです。Evangelistに近いかと思います。

# LT: Build2016で注目した３つの技術
### プレゼンター：松永聡氏
ネクストスケープ（勉強会の主催企業）の方
会社のツイッターはこちら → <https://twitter.com/nextscape>

### ①Coginitive service　&　Bot
【Cognitive service】
Microsoft Rest API経由して利用できるサービス。感情や雰囲気をつかむことができるそうです。
https://www.microsoft.com/cognitive-services/en-us/apis
【Bot Framework】
Bot開発の手助けになるパッケージを提供しています。チャット上の自動応答プログラムという利用法が去年盛り上がりました。
・**Bot Connector Service**　SkypeやSlackと提携できる
・**Bot Builder SDK**　C#とNode.jsで開発
・**Bot Directory** Bot検索サービス

### ②Xamarinが無料になった
Xamarinにはこれまで年間約30万のコストがかかりました。それが無料になりました。
Xamarinでは、**C#**で、iOS、Android、Windows Phoneの各種Webアプリコードを書くことができます。	７〜９割という割合でコードが共有されています。

### ③Hololens
ホログラム的に３D表示するガジェット。VRに所属するのかな？メガネをつけながら、装着できるらしいですｗ
対応ソフトの開発環境は、unittyとVisual Studioが開発環境です。全て**C#**で書くことができます。
### まとめると
**C#**を習得すると、実装できる最新技術の幅が広がる！！

# 【Machine Intelligence Made Easy】（佐藤氏パート）での学び
### Neural Network (NN) とDeep Learning (DL) を支えるGoogleのインフラ
　【NNとDLの仕組み】
①脳の神経回路をモチーフにしている
②中身は関数の集合体で、ほとんどが線形演算で終わる（世間のイメージほど難しくない）
③DLはNNの層を深くしたもの
Google内で、NNの学習を体験できるデモが公開されています（下リンク）
http://goo.gl/ibQkpG

【Googleでのビジネス応用例】
**1500**ものプログラムに、NNが搭載されているそうです。
・[Inceptionism](http://goo.gl/yk4Jbh): 去年発表した画像認識プログラム。積み上がった隠れ層は40段！
・alpha Go (from DeepMind): 探索アルゴリズムとNNを組み合わせた点が画期的でした。囲碁プログラム。
・OCR: OCRとは、画像の中の文字を文字データに変換する技術です。
・自然言語処理、翻訳、Robotics Research

【DLを支えるハード技術】
Googleでは多数のハードエンジニアを抱え、DL／クラウドに特化したオリジナルのハードを製作しています。

「**The Datacenter as a Computer**」
Googleのクラウドインフラ開発に対するコンセプト。データセンター内の全てのマシンが一つのコンピュータになるようにという思想が込められています。

・**Jupiter Network**
１Pbps（Pはペタ）という驚異的なネットワークスピードを実現する。並列環境においては、個々のプロセスユニットの性能より、ネットワークスピードの方がボトルネックになりやすいです。Jupiter Networkでは、ユニット間の通信時間がTCP/IPの1/50程になり、計算スピードが1桁上がります。
・**Borg**
Google独自のコンテナ技術です。昔から存在していたそうなのですが、Dockerの盛り上がりを受けて、慌てて発信するようにしたらしいですｗ
Cellを一つの単位として、Borgmasterという中心のマシンが、10000 ~ 20000のサブマシンを管理しています。
・**BigQuery**
100億のレコードを、インデックスなしフルスキャンにてわずか9.2秒で取ってくることができます。

DLのモデル構築には、細かなパラメータ調整が必要です。それには多大なプログラムの試行が伴います。計算時間が開発時間のボトルネックになりやすく、それがGoogleの強力な開発インフラ構築の背景になったそうです。

### Machine Learning APIs
#### [Cloud Vision API](https://cloud.google.com/vision/)
既に学習済みの画像認識モデルをサービスとして提供します。結果をJSONで返してくれます。

【6つの機能】
①Label Detection
②顔認識
③OCR　（日本語の印字とかも取ってこれる、英語は手書きも取ってこれる）
④Explict Content Detection（エログロ画像検知）
←SNSサービス法人かのら引き合いが多いとのこと（Safe Searchと同じエンジン。下着と水着も見分けられるらしいです。）
⑤Landmark Detection
⑥Logo Detection

【デモ1】
"What is Cloud vision API"
<a href="https://www.youtube.com/watch?v=eve8DkkVdhI">https://www.youtube.com/watch?v=eve8DkkVdhI</a>
動画中のロボットは佐藤さんが作成されました。Pythonでコードを書き、200行ほどで簡単に作成できるとのことです。

【デモ2】
[Cloud vision Explorer](http://vision-explorer.reactive.ai/#/galaxy?_k=3t534r)
Reactiveさんと協力して、10日ほどで完成させたとのことです。
画像がカテゴリ別にクラスタリングされていて、拡大すると個々の画像が見られます。


佐藤さん曰く、Cloud Vision APIのスゴイところは、「なんとなく画像の雰囲気をつかむ」ことができる点らしいです。
例として、ガリガリ君祭り（渋谷）の画像が上げられていました。
![ダウンロード.jpeg](https://qiita-image-store.s3.amazonaws.com/0/127228/15b100c4-083c-b544-a27f-24d571d516fe.jpeg)
特徴を表す明確な文字列がない中で、「Fair/ Festival/ Stall/ Hot dog stand」といった概略を表すラベルを返していました。

#### [Cloud Speech API](https://cloud.google.com/speech/)
【要点】
・80カ国以上対応（まだ未公開、申込制）
・音声の認識だけでなく、応答もする！
・デモ動画↓
https://www.google.com/intl/ja/chrome/demos/speech.html

### Tensor Flow
昨年11月にオープンソース化された機械学習ライブラリ。言語はPythonでLinuxおよびMacで動かすことができます。
他のライブラリと違って、**簡単に書ける**のが、TensorFlowの魅力です！実際に、DeepLearningを実装するユーザ層が広がり、Deep Learningの世界が民主化してきています。
プログラミングにおけるTensorとは、**N次元配列**を意味します。
この観点から、流体力学の計算のようなプログラムもTFで実装することが可能です。

【特長】
・TensorBoard（学習結果の可視化ツール）
・Portability（組み込み性（すぐAndroidとかOSとかに組み込める）

【面白い実装例】
[TensorFlowでディープラーニングによる『キュウリ』の仕分け](http://goo.gl/p8QFXT)
作成者は専門家ではありません。佐藤さんは、少ない入力データ数で高い精度を出していたことに感心していました。作成者は、これをもとにキュウリ仕分け機作る予定らしいです。

Google内のDeep Learningのプログラムは全てTensor Flowで書かれています。TFの処理スピードを最大化するために、専用チップも開発しました。**Tensor Processing Unit**といいます。ASIC（エイシック）という技術を使っており、Memoryに格納するデータ量を低く押さえ、ボトルネックの解消に成功しました。
原理上、MicrosoftのFPGAよりも早く処理できるそうです。

### Cloud Machine Learning
Tensor Flowに加えて、
TPU、Jupiter NetworkといったGoogleの強力な開発環境をクラウド経由で利用できるサービスです。夏以降に供用開始です。このサービスを利用すると、通常の環境で8時間かかった機械学習の計算がわずか32分で終わったそうです！

# 所感
社内で扱うデータ規模が増すに連れ、強力な機械学習計算環境の構築に課題を感じていました。
（恥ずかしながら、GPU演算環境もまだ導入していません）
社内の深層学習用の分析環境構築について前から議論しているのですが、Cloud Machine Learningの登場で強力な選択肢をいただけた気分です。
さらに、クラウドの場合、可用性が高く、固定費的なハードの維持コストも下げられるので、分析環境には魅力的な点が多いですから。