あのラーメン、メンマ多過ぎ。

適当に…趣味の創作活動、面白いコンテンツやガジェット、美味しい菓子、など。ブログタイトルはあまり関係ありません。

5分で分かる(気になれる)機械学習

はじめに

こんにちわ。最近は趣味で機械学習に手を出しています。
出来れば今年中に、何か活用した物を作る予定です。

 

その前に自分の整理も兼ねて、概要や便利情報を書いてみます。
前半は、機械学習ディープラーニングの概要で、
後半は、とりあえず開発着手したい方向けの情報を少々です。

 

機械学習(マシンラーニング)とは

まず機械学習(マシンラーニング)について、機械学習 - Wikipediaを引用すると、
「人間が持つ学習にあたる仕組みを機械(特にコンピュータ)で実現する技術・手法の総称」との事。

 

代表的な手法(アルゴリズム)としては、
・回帰分析(教師あり学習
・K-means(教師なし学習
モンテカルロ法強化学習
などがあります。

 

各詳細は省きますが、ザックリ書くと、
与えられたデータや試行錯誤を元にして、
明日の天気を予想したり、
「これを買う人はこれも買います」を提示したり、
ボードゲームで好手を模索したり、
などを可能にします。

f:id:ryota3da:20190616111415p:plain

機械学習(マシンラーニング Machine Learning)のイメージ

 

深層学習(ディープラーニング)について

続いて、深層学習(ディープラーニング)について。
これも機械学習の一種で、人間の神経回路を模倣したアルゴリズムです。

 

これを使えば、(幾らか語弊はありますが、)
データを特徴量に変換して扱わなくても対応可能です。
例えば、「リンゴ/ミカン/バナナなどの画像」を覚えさせた上で、
「ある画像はどれに該当するか」判別させようとした場合で考えてみます。

 

従来だと、画像を「代表色」や「形状」などの特徴量に変換して扱うことが多いです。
各画像の特徴を学習させた上で、判別したい画像に対しても特徴を元に
学習内容から近しい結果を提示します。「赤くて丸いならリンゴ」など。
言い換えると「この特徴に注目して判別すると良いよ」と人間がヒントを与えてます。

 

ディープラーニングだと、与えられたデータの何を重視して判別すべきか、
その判断自体も機械へ任せることが可能となります。
なので「どこに注目して判断したら良いか見当がつかない」場合でも有効
に働くことがあります。

f:id:ryota3da:20190616114623p:plain

従来の判別と深層学習(ディープラーニング Deep Learning)を使った場合の比較

それだけ聞くと「ただただ便利で凄そう!」ですが、欠点もあります。

 

やること次第ではあるものの、一般的に精度を出そうとすると、
学習にデータが大量に必要&その処理時間も相応に掛かります。

 

また、何を基準に判別してるのか人間にとって実質的にブラックボックスなので、
問題が起こった際の原因究明や改善対応は、困難な場合も多いです。

 

なので、やりたいことや準備できる環境などに合わせて、やり方は適宜検討で。

 

もっと良い資料の紹介

ここではザックリしか触れてませんが、
しっかり把握したい方は、書籍や他サイトを読まれることをお勧めします。

 

ちなみに以下資料は、無料公開されながらも丁寧にまとめられてます。
(今回の件だと3-5あたり)

 

とりあえず開発したい人向け

特にこだわりがなければ、Pythonプログラミング言語)で作るのが良さそうです。
無料で導入できる&簡素で分かりやすい記述が可能と言われてますし、何よりも
Python機械学習に関する情報が多いし、便利なライブラリ群も充実しているので。
特にscikit-learnが、Pyhonの機械学習ライブラリとして有名なようです。

 

※色々書きつつ実のところ、僕はPythonをあまり触ってないです。ごめんなさい。
 C++JavaScriptを扱うことが多いですし、ちょっとした機械学習なら、
 それらでやりたいことに合わせて、適宜自前実装して良いやと思ってます。

 

ちなみにディープラーニングにおいては、TensorFlowが有名です。
Googleが開発したライブラリであり、Pythonの他、JavaScriptC++等でも扱えます。
これがデファクトスタンダードになりそうな感じもしますが、
他にも便利な環境や情報があるので、適宜調べてみると良いかもしれません。