Azure Machine Learningをわかった気になるために細かいことは気にせずに機械学習のことをまとめてみる - ディープラーニングの手前まで

  • 116
    いいね
  • 0
    コメント

機械学習とは

wikipediaによると

機械学習(きかいがくしゅう、英: machine learning)とは、人工知能における研究課題の一つで、人間が自然に行っている学習能力と同様の機能をコンピュータで実現しようとする技術・手法のことである。

コンピュータに大量のデータを放り込んで自動的に特徴を発見させ、未知のデータに対してもその特徴から何に該当するかを推測させる手法……だと思う。
大量のデータがなくても学習させる方法も研究されているみたいだけど、タイトルにもある通り細かいことは気にしない。

独断と偏見による他のバズワードとの関係

あくまで機械学習との関係でという話で、個々の文脈において機械学習が大きな割合を占めているとは限らないので悪しからず。

ドローン

姿勢制御とか自動操縦に活用。

ビッグデータ

機械学習のために放り込むデータで、これがないと始められない。

IoT

ビッグデータを集めるための端末。
機械学習による予測データに基づく自動制御。

ブロックチェーン

リアルタイムに送られ続けるビッグデータをうまく処理できそうな仕組み。
あるいは機械学習で生成した予測モデルを利用した自動化に使えそうな仕組み。

人工知能(AI)

強いAIと弱いAIがあり、機械学習は弱いAIを実現するための手法。
機械学習を用いないチェスプログラムなども弱いAIに含まれる(ような含まれないような)ので、弱いAI=機械学習というわけでもない。
何も修飾語をつけずに人工知能とかAIという場合は、ディープラーニングに触発されて強いAIを妄想しているのだと思う。

ディープラーニング

機械学習の精度にブレークスルーをもたらした手法。
(実運用にはGPU必須で学習時間も結構かかるなど)大量のリソースが必要な札束で殴れる人余裕のある人向けのものだが、クラウドとかプロセッサのスペック向上とかで遅くとも数年内にはお手頃に(なってほしい)。

チャットボット

人間の入力を適切なシナリオに振り分けるのに機械学習が使われる。(シナリオ対話型)
あらかじめ決められたシナリオに従うのではなく、入力に対して適切なアクションを実行したり提案したりするのにも機械学習が使われるが、その場合のリアクションはチャットに限らないのでチャットボットより広いボットの文脈だと思う。

VR・AR

直接の関係はなさそうだが、自動運転の訓練とか強化学習を利用した人工生命の開発だとか、ちょっと斜め上な使い方をすることがある。

その他

fMRIの読み取り画像から思い浮かべたものを推定したり、見ている映像を復元したりできてきているし、ヘッドバンド型の脳波計(いわゆるブレイン・マシン・インタフェース)なんかが入力デバイスになると面白いことになるのかもしれない。(fMRIでは脳波は読み取れてないだろうとか細かいことは気にしない)
fMRIの解像度の問題もあるのか、映像の復元なんかは微妙な結果に見えるかもしれないけど、元画像と縮小画像の差を学習させて解像度を上げる手法もあるし、正解データと読み取りデータの組み合わせが増えてくると多少はマシになるんじゃないかと思う。

機械学習への入門方法

正直、まだ入門してないので色々な情報を集めて、良さげなものを選定。

とりあえず何ができるのか試してみる

自分で機械学習をやったとは言えないが、事例他人が機械学習を使って作ったサービスを利用してみると、何ができそうかイメージが湧く。

最初はやるべきでないことを認識する

全体像からすると、最初に押さえるべきことよりも、最初に手を出すべきではないことの方が多いはず。
そこは最初はスルーしていいよってところを確認しておくと、どこまでも手を伸ばして挫折する確率が下がりそう。

機械学習をこれから始める人に押さえておいてほしいこと
機械学習クソ素人の俺がプロダクトをリリースするまでの2ヶ月で覚えたこと

あと、機械学習におけるプログラミングの位置づけって、デザイナーにおけるそれと同じような気がする。
新しい言語やフレームワークを習得するのとは全く違う領域に足を踏み入れようとしているんだという認識が必要かも。

教材を利用する

機械学習の前提知識として必要な数学・統計1

全体的なイメージをつかむ

動画学習

  • Machine Learning(スタンフォード大学のオンライン講座で内容は英語だけど日本語字幕あり)(アーカイブ補足資料
  • Intro to Machine Learning(ディープラーニングではない機械学習のオンライン講座でアルゴリズムの中身よりは実際に機械学習を適用するのに必要な知識・技術が中心。日本語字幕は用意されていないが、Youtubeの自動翻訳は使える)
  • Deep Learning - Take machine learning to the next level(Googleの寄付講座でDeep Learningの概要紹介。初学者で内容を理解するのは難しいので勉強すべき分野の用語を知ったり、ある程度ディープラーニングの勉強が進んでから見ると良さそう)(日本語字幕動画(最初のほうだけ))

その他参考になりそうな書籍(初心者向けではないものもあり)

参考にしたのは以下の記事

他人の遊びを真似てみる

再現するのは難しいけど、専門家になるとこういう遊び研究もできるという例

機械学習の実践方法

ライブラリを利用する

機械学習一般ならscikit-learn、ディープラーニングならTensorFlowかChainerなのかな。

  • scikit-learn(Python向け機械学習用オープンソースライブラリ)
  • Torch(機械学習用フレームワーク)
  • TensorFlow(Google製のディープラーニング用オープンソースフレームワーク)
  • SkFlow(TensorFlowをscikit-learnのように使えるインターフェース)
  • SyntaxNet(TensorFlow用のオープンソース自然言語解析モデル)
  • Parsey McParseface(SyntaxNetに含まれる英語用の構文解析ツール)
  • Chainer(ディープラーニング用フレームワーク)
  • Keras(Python向けディープラーニング用ライブラリで裏側にTheanoやTensorFlowを利用)
  • Caffe(ディープラーニング用フレームワーク)
  • theano(Python向けディープラーニング用ライブラリ)
  • DSSTNE(Amazon製のディープラーニング用オープンソースライブラリ)
  • CNTK(Microsoft製のディープラーニング用ツールキットで、Network Description Language (NDL)というものを使用)

チュートリアル

どうしても慣れ親しんだ言語を離れたくない人のために

クラウドサービスを利用する

補足

オープンデータ(ライセンスは確認してください)

画像加工

自然言語

で、結局どこから入門するの?

今回は、Azure Machine Learningを使って入門。
理由は、学習コストが一番低そうだから。一番やりたいディープラーニングを試してみるまでに数学だの統計だの他の機械学習手法だの色々やるとかひたすら面倒くさい他の入り口だと挫折しそうな予感がするので。
あと、GUIで機械学習の流れが直感的に把握できそうなのも理由の一つ。
DataRobotが実運用レベルになったらもっと楽できるかもしれないが、一切機械学習の勉強にはならなさそうな気もする。

機械学習入門

機械学習における"Hello World"的な位置づけのMNISTまでは既にまとめているので、そちらを参照。

Azure Machine LearningでMNIST入門

その後は、Sample1から自分に必要ないところは飛ばしながら順に進めていき、Neural Networkの手前まで進めば、基本的な機械学習の手法は押さえられるはず。

アルゴリズムチートシート2

image
Microsoft Azure Machine Learning のアルゴリズムの選択方法

とりあえず、一番大きい分類のどこに該当するかわかれば、少ないサンプルで試して精度と学習時間から適したアルゴリズムを選んで、実際の学習データでパラメータを調整すればいいと思う。

2クラス分類(TWO-CLASS CLASSIFICATION)

教師データから学習し、与えられたデータを2つの項目に振り分けるモデルを作成

特徴量 線形性 学習時間 精度 メモリ使用量 アルゴリズム
100より多い 線形モデル Two-class SVM
線形モデル Two-class averaged perceptron
線形モデル 短い Two-class logistic regression
線形モデル 短い Two-class Bayes point machine
短い 高い Two-class decision forest
短い 高い 多い Two-class boosted decision tree
高い 少ない Two-class decision jungle
100より多い Two-class locally deep SVM
長い 高い Two-class neural network

多クラス分類(MULTI-CLASS CLASSIFICATION)

教師データから学習し、与えられたデータを任意の3つ以上の項目に振り分けるモデルを作成

線形性 学習時間 精度 メモリ使用量 アルゴリズム
線形モデル 短い Multiclass logistic regression
長い 高い Multiclass neural network
短い 高い Multiclass decision forest
高い 少ない Multiclass decision jungle
* * * * One-v-all multiclass

* One-v-all multiclassの特徴は、選択された2クラス分類のアルゴリズムに依存

回帰(REGRESSION)

教師データから学習し、与えられたデータから数値を推測するモデルを作成

線形性 学習時間 精度 メモリ使用量 その他 アルゴリズム
ランク順序予測 Ordinal regression
カウント予測 Poisson regression
分布予測 Fast forest quantile regression
線形モデル 短い Linear regression
線形モデル データ量少 Bayesian linear regression
長い 高い Neural network regression
短い 高い Decision forest regression
短い 高い 多い Boosted decision tree regression

クラスタリング(CLUSTERING)

データの類似度を元に、与えられたデータを任意の複数個の項目に振り分けるモデルを作成

アルゴリズム
K-means

異常検出(ANOMALY DETECTION)

多数の正常データと少数の異常データから正常な行為がどのようなものか学習し、そこから異常に外れたものを検出するモデルを作成

特徴量 学習時間 アルゴリズム
100より多い One-class SVM
短い PCA-based anomaly detection

  1. 動画学習のところで紹介しているスタンフォード大学の講座も、最低限必要な数学に関する知識は解説があり、高校文系数学までの知識でも乗り越えられたので、最初は数学やらなくてもいいかもしれない 

  2. 参考までに、scikit-learn algorithm cheat-sheet