機械学習ざっくり基礎

最近とても興味が出てきたので、機械学習について調べ始めました。表面は理解してたんだけど、ちゃんとわかろうと思って…とりあえず目標は、画像の中から空とそれ以外のピクセルを分離するモデルの構築とか、入力されたベクトルから姿勢の類型を推定する、みたいな所です。

機械学習とは

AI がバズワード扱いされた事もありましたが、AI と呼ばれるものの1分野らしいです。

主に、大量のデータからパターンを発見し、これを認識できるようにするものの事を機械学習と言います。これだけ聞くと今まで人間が条件を記述してきたプログラムでも同じことができたように思えますが、とても手で記述しきれないような複雑な条件を、機械が半自動的に発見してくれる、というころがミソです。

わかりやすいのは画像のラベル付けです。今までは、コンピューターに画像を渡しても、そこにパスタが写っているのか、うどんが写っているのか、そうめんなのか、判断することは不可能でした。明るさや色、太さ、付け合せの具材など変化する要素が多すぎて、人間が手で条件を指定する規模の限界を超えているわけです。(そもそもどうやってそれが UDON だと判断するのか? その時点で人の手では無理…)
機械学習では、大量のパスタ、うどん、そうめん画像を読み込ませることで、これらを判断する仕組みを機械が構築してくれます。というのがあらましです。

どこで使われてるのか

未来の技術感がすごいですが、実はスマホ向けサービスなんかで既に生活に入ってきています。例えば iPhone の写真アプリは、文字で画像を検索することができますが、これは機械学習を使った処理によって、画像に写っているものを事前に文字に起こしているのです(たぶん)。ヤバイですね!(ほんまやばいわ…)

あとすぐに思いついたところでは、カメラの顔認識や名刺管理アプリの文字読み取り、より高度な音声合成などがあります。

機械学習の手法

機械学習と一口に言っても、その学習方法は大きく3つに分けられます。

いずれも学習の結果、データの処理・判断機構を出力しますが、これを「モデル」と呼びます。

教師あり学習

教師あり学習とは、学習データと、そのデータがなんであるかの答え(教師データ)をセットにしたものを読み込ませて学習する方法です。これはうどん、これはラーメン、これはそうめん…と画像にあらかじめ名前をつけておき、コンピュータがそれぞれの特徴を学んでゆきます。シンプルなので理解しやすいですが、例えば画像データを10,000枚学習するとなると、10,000枚全てに人間が手作業で正解を記入していく必要があります。この準備がめちゃくちゃ大変です。

教師なし学習

教師なし学習も大量のデータを使って学習を行うものですが、教師あり学習と違って、“答え” の情報(教師データ)を与えません。教師あり学習がラベル付けなどの情報分類や曖昧な条件からの数値の予測に向いていたのとは違い、こちらは雑多な情報の中から学習した規則にマッチするものを取り出す用途に向いていそうです。

こちらも大量のデータを用意する必要がある点は変わりませんが、この問題を解決するために、学習データ自体をコンピューターによって生み出すという方法が取られることがあります。Apple は機械学習ジャーナルというブログをやっていますが、そこに学習用画像そのものをコンピュータで生み出し、その精度を上げた事例が書かれています。面白いですね!

強化学習

強化学習は、上記の教師データに頼った学習とは異なる手法です。強化学習では環境エージェントという2つのプログラムを作成します。エージェントがなんらかの行動を取ると、環境はその行動が OKNG かを評価します。

例えば、エージェントは初め何度かランダムな行動を取り、その中で環境から OK が出た行動へと徐々に収束していく、OK になる条件を学んでいく、という形です。

Unity の機械学習ライブラリは、この強化学習を Unity を使って設計できるので、視覚的に非常に理解しやすいものとなっています。

機械学習の手間

複雑な条件をコンピュータが判断できるようになる機械学習ですが、教師あり・なし学習では、大量のデータを自前に用意して、学習効果が高くなるようにデータを** “洗浄” **し、ラベルをつけたりつけなかったりするという大変な行程が必要になります。教師なし学習の項でも触れましたが、学習データをコンピュータによって大量生成する、ということをセットで行わなければ、まともな学習は現実的ではないこともあります。だから採用事例は資金のある大手中心なのかな?

とはいえ、少ないデータでそこそこの効果が得られる場合もあるという話はちらほら聞きますし、次項で説明するようなサービスで簡単に試す事もできます。

とりあえずやってみたい!

ありがたいことに、複雑な環境構築やプログラミングの学習を行わずとも機械学習を試せるサービスが存在します。それが Microsoft の Custom Vision です。これは画像の教師あり学習に特化したサービスで、適当に画像をアップロードして名前をつければ、学習してモデルを作成してくれます。

ちなみに、私の作った機械学習モデルでは、
松屋は完全に当てられます。
吉野家とすき家の判定があやうい。

(皆も https://t.co/rbnlrmPTzb で学習させてみよう!画像をアップロードして「これは松屋」とタグ付けして「学習」ボタン押すだけ!簡単だよ!)#JXUG pic.twitter.com/3rb320kB5C

— ちょまど (@chomado) August 19, 2017

もっと勉強したい

Aidemy さんが無料から機械学習系のコースを実施されています。非常にわかりやすく、環境構築もしなくていい(ブラウザで開くだけ)のでめっちゃおすすめです。

記事を書き疲れたので今日はここまで

2018年4月20日