機械学習のモデル構築の用語

識別や予測を行う対象の変数:目的変数
識別や予測を行うための変数:説明変数

予想売り上げ = a x 気温 + b x 湿度 + 定数

機械学習アルゴリズムを適用可能な形式にデータ加工する処理:前処理
モデルの確認:検証

行と列を持つ表形式のデータ:構造化データ
画像、テキスト、音声:非構造化データ

構造化データの「行」:事例
構造化データの「列」:特徴量
構造化データ:データフォーマット

データを前処理で加工して、データフォーマットに直して、モデルを構築。識別、予測結果を評価する。

画像データの場合は、ピクセルのRGBデータを全て処理して行く

画像認識のタスク分類
– 画像分類、物体検出、シーン理解 
→自動運転はシーン理解までやってる?

自然言語処理
→ 形態素分析

音声データ
→ フーリエ変換を用いて、周波数ごとの特徴に変換する
→ MFCC

機械学習は前処理の工数がもっともかかることが多い

機械学習の3つの手法

「教師なし学習」「教師あり学習」「強化学習」の3つに分けられる。「教師」とは正解のこと。

教師あり学習
正解のラベルや数値がわかっているデータを元に学習モデルを構築
ラベルや数値が未知のデータに対して予測や識別を行う
正解データがない場合は人がデータに正解をつける
→ 分類や数値予想など。分類だと、computer visonなどもそうか?

教師なし学習
正解のないデータから共通する特徴を持つグループを見つけたり、データを特徴づける情報を抽出する
→ クラスタリング。グルーピングなど。カテゴライズに使う。

強化学習
多数の繰り返しが必要になるタスクに対して、実際に行動しながら最適な戦略を学習する
→ ゲームのアルゴリズムなど。

強化学習ができれば最強だが。
ビジネス上では教師あり学習を当てはめて行くのがスタンダードっぽいですね。教師あり学習から進めて行くのが良さそうか。。

Facebookが取り組む機械学習

Facebookが取り組む機械学習
→ 運営するSNS上のコンテンツを全て理解することを目標
 L 投稿のレコメンデーション
 L 顔や物体の検知
 L 翻訳
 L フェイクニュースの検知

こうやってみると、Facebookは奇抜さはないが、堅実なイメージだ。

Amazonの機械学習

AWSばかり目が行きますが、amazonで使われている機械学習は?
 L 需要予測
 L 商品検索のランクづけ
 L 商品のレコメンデーションや配置
 L 不正取引の検知
 L 翻訳

その他には、自動飛行ドローンが商品を配達するPrime Air
小売店舗のAmazon Goなど

Prime Airとは?
 垂直離着陸と飛行能力を完備したドローン
 飛行体と人、動物、障害物などを把握するアルゴリズム、解析能力を備える

これ、開発するのに5年くらいかかってる?しかも、配達っていっても、洗濯機、テレビなど大型家電も運べるんだろうか?頭上から落ちてきたら敵わんからな。安全上、問題がありそう。

無人店舗 Amazon Go
ローソンやJRなどがやってる無人店舗、店の中でチャージするんだが、
amazon goは棚の上にカメラがあって、棚から人が商品を取ったらチャージされる仕組みのよう。お店から出て10分くらいたってからチャージ。

機械学習の中でも画像認識はコア技術だな〜
ロジスティック回帰、computer vision、アプリってところか。

hunting planet machine learning

Earth to exoplanet: Hunting for planets with machine learning
https://www.blog.google/technology/ai/hunting-planets-machine-learning/

太陽系外の恒星の周りに存在する惑星を発見する為に機械学習を用いている。
惑星が恒星の前を通る時に明るさが落ち込むパターンを学習して、太陽系外惑星の可能性のある候補を精査している

その他googleの機械学習
– 検索エンジン
– 迷惑メール仕分け
– メール返信の文案
– レコメンデーション
– 翻訳
– 画像認識

人間がやってることほぼ全てに応用できるってことか。

Assisting Pathologists in Detecting Cancer with Deep Learning

Googleが取り組む機械学習の中に、ガンの画像診断がある
https://ai.googleblog.com/2017/03/assisting-pathologists-in-detecting.html

マイクロファージではなく腫瘍を正しく検出する

これは腫瘍でやってるけど、人間の目で判断していることを
deep learningでソリューションを提示できればビジネスになるってことかな。

機械学習に必要な数学

回帰モデルでは、予測関数や損失関数に次のような数式が出てくる

– シグモイド関数
– 予測関数
– 損失関数

指数関数、対数関数、微分、偏微分、多変数関数
とりあえず数学的基礎が必要らしいな。amazonで入門本の購入から始める。

機械学習モデル

機械学習モデルを理解することがまず第一

ロジスティック回帰
– 線形回帰式をシグモイド関数にかけて確率値と解釈
ニューラルネットワーク
– ロジスティック回帰の仕組みに隠れ層ノードを追加
サポートベクターマシン
– 2クラスの標本値と境界線の距離を基準に最適化
単純ベイズ
– ベイズの公式を用いて観測値から確率を更新
決定木
– 特定の項目の閾値を基準に分類
ランダムフォレスト
– 複数の決定木の多数決で分類を実施

ロジスティック回帰、ニューラルネットワーク、ディープラーニングは、
予測モデルの構造は事前に決まっていて、パラメータ値にだけ自由度
モデルの構造
(1)個々の入力値にパラメーター値をかける
(2)かけた結果の和をとる
(3)結果にある関数を作用させ、その関数の出力を最終的な予測値(yp)とする

パラメータ値の最適化が学習
モデルが正解値をどの程度正しく予想できるかを評価するための損失関数を定める

つまり、ディープラーニングは線形回帰モデルの発展型といっても過言ではない。
最初に「線形回帰モデル」を学び、そこから、分類モデルのロジスティック回帰、ニューラルネットワーク、ディープラーニングを理解するのが良い。なるほど。

WAYMO Open Dataset

流石に翻訳はないか。
https://waymo.com/open/

>The Dataset is about 1TB after compression for 1000 segments. Segments have been packaged into multiple files of about 25GB each.

>All segments contain 3D labels. The 100 segments that also contain 2D labels have been packaged into the first three files under ‘Training’ and the first file under ‘Validation’.

何これ?git hubもありますね。pythonです。
https://github.com/waymo-research/waymo-open-dataset/blob/master/tutorial/tutorial.ipynb

google colab
https://colab.research.google.com/notebooks/welcome.ipynb#recent=true

[vagrant@localhost local]$ python -V
Python 3.5.2

system requirement
– g++ 6 or higher.
– Python 3.
– TensorFlow 1.14.0 or higher.

g++って、c++じゃん。使わんなー

とりあえずgit clone
[vagrant@localhost waymo]$ git clone https://github.com/waymo-research/waymo-open-dataset.git waymo-od
Initialized empty Git repository in /home/vagrant/local/waymo/waymo-od/.git/
remote: Enumerating objects: 50, done.
remote: Counting objects: 100% (50/50), done.
remote: Compressing objects: 100% (38/38), done.
remote: Total 174 (delta 17), reused 35 (delta 12), pack-reused 124
Receiving objects: 100% (174/174), 14.00 MiB | 2.93 MiB/s, done.
Resolving deltas: 100% (45/45), done.

[vagrant@localhost waymo-od]$ git checkout remotes/origin/r1.0
Note: checking out ‘remotes/origin/r1.0’.

You are in ‘detached HEAD’ state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b new_branch_name

HEAD is now at 2f30db6… Merge branch ‘master’ into r1.0
[vagrant@localhost waymo-od]$ git branch
* (no branch)
master

あれ?

sudo apt-get install --assume-yes pkg-config zip g++ zlib1g-dev unzip python3 python3-pip
BAZEL_VERSION=0.28.0
wget https://github.com/bazelbuild/bazel/releases/download/0.28.0/bazel-${BAZEL_VERSION}-installer-linux-x86_64.sh
sudo bash bazel-${BAZEL_VERSION}-installer-linux-x86_64.sh
sudo apt install build-essential

これ、debian向けに書かれてる?

そして、bazelってビルドツール?makeでないんかい。

Googleが取り組む機械学習

Google, Amazon, Facebook, Apple, Microsoftはどのように機械学習に取り組んでいるのか?まずそれを知ることが大事。

■Google
自動運転への取り組みとしてWaymo
https://waymo.com/

続いて、Waymoのsoftware engineeringの採用情報を見てみましょう。

Data scientistの条件。phDか。。まじかー。
We’d like you to have:
PhD in statistics, math, or other quantitative area
Progressive statistics background either in academia or industry
Data science and system evaluation experience
Willingness to understand a complex system and its various components
Experience with tools for manipulating big data
Experience with R/Python and statistical libraries

続いてDeep Leaningのsoftware engineer
PhD in Computer Science, Machine Learning, Robotics, similar technical field of study, or equivalent practical experience
Experience in applied Machine Learning including data collection, analysis and feature engineering
Experience in Deep Learning research
Experience with TensorFlow
Experience programming in Python/C++

そうか、computer scienceはOKとして、Machine Learning, Roboticsは必須だな。

スタートアップとしては、プロトタイプを作りながら、ブラッシュアップが定説。
Hardwareの知識と組み合わせると、難易度が一気に上がる。つまりそこか。

まずはmachine learningとアプリケーションからか。