【全くの初心者が、仕事で「機械学習」を使えるようになるための知識まとめ連載】第1回 機械学習とは何か？

#はじめに

こんにちは、mucunです。

この連載を通して、「機械学習」というものについて、なるべく直感的に分かりやすく伝えていきたいと考えています。
機械学習を今から学ぼうとしている方、なかなか理解が捗らない方などの助けになれば本望です。

私自身は現在、データサイエンティストとして、データ分析や研究開発などに従事している者ですが、機械学習に関わり始めたのは30歳を過ぎた頃でした。
それでも、運良く学びの機会を得られたことで、データサイエンティストとして日々楽しく働けています。
この連載は、私が運良く得られた学びの機会を、皆様にも分配したく始めました。
学びの機会さえあれば羽ばたける方は沢山いらっしゃると思います。
是非、この連載を通して、一緒に学んでいきましょう。

前置きが長くなってしまいました。
今回の記事は初回ということで、そもそも「機械学習」が一体何者なのかについて、説明をしたいと思います。

#「機械学習」とは「機械が人間の代わりに学習をすること」
<img src="https://qiita-image-store.s3.amazonaws.com/0/126499/af87d2cf-90ef-d87a-bef4-5f024f585ccb.jpeg" width=80%>

「機械学習って何ですか？」と聞かれて、一言で説明することは難しいです。
人によって、説明が変わってくるような抽象的な概念かと思います。

私がもし、一言で説明するとしたら、「人間の代わりに機械に学習をさせること」と答えます。
二言の猶予があれば、上記に「それによって高速に知識・経験を得る」と付け加えます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/126499/81a88715-9543-d3ef-5f21-412e233b0acd.jpeg" width=80%>

学習という行為は、これまで動物特有(特に人間)のものとされてきましたが、関連研究やコンピュータ性能の進歩によって、機械でも学習ができるようになってきました。
研究によって紐解かれた人間の学習の仕方を、コンピュータ上にて高速に再現・シミュレーションすることによって、それを実現するのです。

#「学習」とは、知識や経験の習得のこと

ここで、「学習」とは何なのかを改めて考えてみようと思います。
辞書に載っている意味の内、機械学習における「学習」の意味としてあてはまりそうなものとして、以下がありました。
> * まなびおさめること。勉強すること。

>（出典：https://www.weblio.jp/content/学習 ）

更に「勉強」についても調べてみると、機械学習に関連しそうなものとしては、以下の意味が挙げられました。
> * 学問や技芸を学ぶこと。学習。
* ある目的のための修業や経験をすること。

>（出典：https://www.weblio.jp/content/勉強 ）

要するに、「学習＝知識や経験の習得」と言えそうです。
知識や経験は、何か意思決定を行う際に、意識的に、或いは無意識的に参考にする情報です。
例えば、雲行きを見て、今までの知識や経験から、「どうも雨が降る可能性が高そうだなぁ」という予測がなされれば、それが「傘を持っていく」という意思決定に繋がりますよね。

そんな意思決定のための知識や経験の習得を、もし機械によって実現できたら、機械は人間にとって、これまで以上に良き相棒となることでしょう。
機械学習が実現しようとしているのは、正にそういうことです。
<img src="https://qiita-image-store.s3.amazonaws.com/0/126499/b725b1b4-ea13-463f-2fee-27b2bf77c35a.jpeg" width=85%>

#機械に学習を代わってもらうメリットは、「計算が早い・計算が正確・計算結果を忘れない」の３つ

人間はこれまで、生きる上で学習を当たり前に行ってきました。
しかし、なぜ今になって、それを機械に代わってもらおうとしているのでしょうか？
理由は、３つです。

* 人間より計算が早いから（計算が一瞬）
* 人間より計算精度が正確だから（ミスが無い
* 人間より記憶力が凄いから（結果を忘れない）

指示さえ送ってしまえば、機械は何千何万という計算を一瞬で実施してしまいます。
その際、計算を間違えることはないですし、それぞれの計算結果を忘れてしまうこともありません。
<img src="https://qiita-image-store.s3.amazonaws.com/0/126499/ddee39f0-62c9-965e-4d7c-28e5efbd21d5.jpeg" width=95%>

即ち、これは学習のIT化です。
金融や物流等々がIT化によって劇的に効率化したように、人間がこれまで行ってきた学習行為も、IT化によって効率化しようとしている訳です。

#機械は人間が定めた通りにしか動かないので、しっかり学習方針を定めてあげる必要がある

ここまでの話で、「じゃあ、人間はもう学習しなくても良いのか？」という疑問が湧くかもしれません。
しかし、そんなことはありません。
（学習が好きな人は安心してください。学習が嫌いな人は残念でした。笑）

実は、機械学習は、かなりガチガチに学習方針を定めてあげる必要があります。
厳密に、１から１０までです。
機械は行間を読めませんし、空気も読めません。
人間が定めた学習方針に忠実に従います。
その為、人間が間違った学習方針を設定してしまうと、機械は上手に知識や経験を習得できません。
人間ほど融通が利かないのです。
<img src="https://qiita-image-store.s3.amazonaws.com/0/126499/b89824d2-8232-9811-e2e4-e14e162e3550.jpeg" width=90%>

その為、人間が学習すべきことは、機械に上手く学習させるノウハウです。
それは、学習の学習という、１段上のレイヤーからの俯瞰的なものです。
学習のための知識があれば、人間は自分で解くと一生終わらないであろう課題を、機械の計算力を借りて現実時間内に終わらせることができます。

#機械学習の説明は、「what／how／why」のどの切り口で説明するかによって切り替わる

機械に学習させるために、ガチガチに学習方針を定める必要がある一方で、色々な問題に適用することができる汎用性の高い「一連の学習手順」というものも存在します。
この「一連の学習手順」を見つけ出すことこそが、機械学習の研究にて行われていることです。
機械に学習させるコツのようなものです。
<img src="https://qiita-image-store.s3.amazonaws.com/0/126499/3f9b870a-5777-b96f-e940-77418ff298a2.jpeg" width=100%>

wikiの説明では、そのコツそのものを機械学習と定義しているようです。
> 機械学習（きかいがくしゅう、英: machine learning）とは、人工知能における研究課題の一つで、人間が自然に行っている学習能力と同様の機能をコンピュータで実現しようとする技術・手法のことである。
>（出典：https://ja.wikipedia.org/wiki/機械学習 ）

名だたる研究者が「どう学習させると、人間のようにうまく学習できるのか？」という課題に対して、研究を重ねてきた結果、見つけた技術・手法こそが機械学習という訳です。

冒頭に私がした説明「機械学習とは、人間の代わりに機械に学習をさせること」とは切り口が違いますが、図にまとめると以下のような感じです。

<img src="https://qiita-image-store.s3.amazonaws.com/0/126499/a82e61da-3611-4124-719f-fbc06fb03d5c.jpeg" width=100%>

この辺りは話す相手や目的に合わせて、説明や理解を切り替えれば良いかと思います。

#「愚者は経験に学び、賢者は歴史に学び、機械は数値データに学ぶ」

「愚者は経験に学び、賢者は歴史に学ぶ」という格言があります。
ちなみに、正確には、

>「愚者だけが自分の経験から学ぶと信じている。私はむしろ、最初から自分の誤りを避けるため、他人の経験から学ぶのを好む。」
（出展：https://ja.m.wikiquote.org/wiki/オットー・フォン・ビスマルク ）

という言葉だったそうです。
要するに、人の話や、書籍の内容、新聞のニュースなどからの未然に知識を得ておいて、誤った意思決定を未然に防ぐ方がスマートだという話です。
逆に、先人が育んだノウハウの価値を軽んじ、不必要なトライアル&エラーを繰り返すのは愚かだという訳です。
確かにそうですね。
<img src="https://qiita-image-store.s3.amazonaws.com/0/126499/8c804307-1901-3c90-4c13-7f0b8569b742.jpeg" width=95%>

機械学習で実現しようとしていることも、正に「歴史に学ぶ」ということです。
しかし、実は機械は人の話を聞けませんし、書籍や新聞を読むこともできません。
機械は唯一、数値データだけを読むことができます。
そのため、「他人の経験」と呼ばれるものを、全て数値に変換してあげる必要があります。

昨今、画像解析や自然言語解析などが、機械学習によって積極的に取り組まれていますが、画像情報や言語情報についても、機械学習を実施する前に数値化がされています。
音声情報や、心拍などの生体情報なども全てそうです。
機械学習を実施するためには、数値化を行う必要があります。
<img src="https://qiita-image-store.s3.amazonaws.com/0/126499/4452bd7f-e471-bba7-c794-d6ed3ab1d986.jpeg" width=95%>

#数値データの準備が、機械学習の精度の８割を決める

この数値化は、もちろん闇雲に行ってはダメです。
例えば、本来の意味合いを失わないように数値化したり、データの特徴だけを切り出して数値化したりする必要があります。
具体的なやり方については、別の連載回にて説明しようと思いますが、とかく数値化については非常に沢山のノウハウがあり、この準備作業が、機械学習の精度の８割を決めると言います。
それだけ大事な作業です。
私の経験上も、精度寄与８割という数字は、強く頷ける数字です。

そして、想像がつくと思いますが、この準備には時間もすごくかかります。
分析精度を引き出すためには、データの意味理解も必要で、概ね分析全体の８割の時間を要します。
精度の８割を決めますし、時間も８割を占めるのがデータ準備です。
<img src="https://qiita-image-store.s3.amazonaws.com/0/126499/fc6ba972-fcc2-393c-8982-7652ccb36491.jpeg" width=100%>

#機械学習は、ちっともラクチンポンじゃない

機械学習というと、機械に任せればラクチンポンで分析してくれると思っている方がいますが、実際にはそんなことはありません。
分析をしようとすれば、上記で紹介したように、学習方針をガチガチに設定しなくてはいけませんし、データの準備に多くの時間を要しますし、結構な重労働です。

最近は、機械学習を簡単に実施するためのプラットフォーム(機械学習自動化ツール)などが各社からリリースされたり、研究者が論文と共にアップロードした無償のコード(研究者が学習方針を書き記したプログラム)がＷＥＢ上にあったりと、機械学習がどんどん扱いやすくなっていますが、それらも分析全体の２割の分析工程を助けるためのものです。
データの準備までに要する８割の分析工程は、依然として作業負荷が高いですし、そこを助けるツールはまだ現れていません。
もし、機械学習はラクチンポンだと言っている人がいるとしたら、それは天才か嘘つきのどちらかではないかと思います。笑

#実際に、機械学習が簡単にできる、とツールを売り込まれた話

実際に、「機械学習が簡単にできますよ！」と売り込まれてツールを購入しかけた話を、聞いたことがあります。
販売側が無償のプレトライアル分析まで行って、それなりの結果も出してくれたので、「それじゃあ」という形で購入を進めていたのですが、よくよく確認すると数値化などのデータ準備はツールで実施できないことが分かりました。
そのことについて問い合わせてみると、「そこは機械学習に含まれていないが、弊社の専任に依頼してもらえれば、有料で対応します」と言われたそうです。
更に詳しく聞くと、無償のプレトライアル分析の際も、事前作業についてはその専任がデータの準備を行ったとのことだったのですが、こちらが聞くまでその事実は伝えられなかったそうです。
嘘をついてる訳ではないですが、あまりにも不親切ですよね。
<img src="https://qiita-image-store.s3.amazonaws.com/0/126499/0fc0345e-6ddf-7319-845e-33dd8815f578.jpeg" width=90%>

発展途上の技術とはいえ、ちょっと酷いだろう、と思った話です。
機械学習に関する知識を押さえておけば、回避できるリスクだと思います。

#データ分析全体の流れ

ここで、ここまで話をした機械学習の手順についてまとめたいと思います。
機械学習を行うためには、以下のプロセスが必要となります。
<img src="https://qiita-image-store.s3.amazonaws.com/0/126499/52457d99-1ecc-55d6-966a-e1a455d7d0c7.jpeg" width=90%>

各プロセスについての詳細は、改めて説明をします。
ここでは先ず、全体の雰囲気だけ掴んでもらえればと思います。

「精度測定」にて、測定した精度が満足のいくものであった場合が分析のＧＯＡＬとなり、満足いかなかった場合には、何れかのプロセスに戻ってやり直します。
満足がいくというのは、その結果によって何らかの意思決定が簡単になったり、何らかの課題が解決することです。
尚、満足のいかない結果から、あまりにも目的の筋が悪いと判断される場合には、分析を中断するという選択肢もあります。

大まかに分類して、機械学習を実施する手前の序盤プロセスは、データの準備に関するプロセスが多く、一般的にデータや目的に対する専門的な知識を必要とします。
機械学習以降の終盤プロセスについては、データ分析を実施するための統計や手法に関する知識を必要とします。

そして、先程も説明したように、序盤プロセスのデータ準備こそが、精度に対する寄与が大きく、実施に時間もかかります。
分析結果の成否を握っているのが序盤プロセスといって過言ではありません。

終盤プロセスについては、一口に言ってしまえば分析をするだけのプロセスなのですが、様々なノウハウがあり技術力を必要とするプロセスになります。
また、終盤プロセスが上手く行えないと、序盤プロセスをいくら頑張ったところで、精度が全く出なかったり、何のアウトプットすら出てこないということもあり得ます。

これはサーフィンに例えると、序盤プロセスが良い波を作り、終盤プロセスで上手く波に乗る、という感じです。
そもそも波がないと波に乗れず、波乗りの技術もないと波に乗れず、両方が噛み合って初めて波に乗れて、分析全体が成功に終わる、という訳です。

#最も難しいのは、分析の目的を決めるプロセス

先程紹介したプロセスの中で、分析の目的を決めるというプロセスが最も難しく、困難を極めます。
詳しくは、別途説明をしますが、ここではザックリ概要だけ説明します。

分析目的はポンと決まる訳ではありません。
先ずは、以下の観点における事実整理と仮説立てを行う必要があります。

* データから、どんな知識や経験が得られるか？
* それら知識や経験の習得することは、どんな嬉しさをもたらすか？どんな課題を解決するか？

例えば、最近のi-phoneに搭載されている顔認証によるロック解除機能は、機械学習によって抽出された知識や経験によって実現されています。
人間が個々人の顔識別を知識や経験から行うように、機械学習にも沢山の顔画像から個々人の顔を識別するための知識や経験を学習してもらい、識別を実施しています。
尚、顔識別は、先行研究から非常に高い精度での実現が可能であることが立証されている研究分野になります。
そして、この顔認証機能には「指紋や顔で認証ができれば、セキュリティ性も向上するし、ログインがスムーズに行える」という嬉しさがあります。
つまり、結果として、分析精度も高く、嬉しさもハッキリしているという良い目的になります。

もし、目的の設定時点で、「この分析は高い精度が出るのではないか？」と考えた仮説が外れていると、どう分析しても高い精度を得ることができません。
とはいえ、明らかに高い精度が出るであろう無難な仮説を立てても、ブレイクスルーにはなりません。
既に人間の直感によって、良い判断基準が設けられているかもしれません。
ある程度チャレンジブルでありながら、専門知識を持つ人が直感的に筋の良さを感じるような仮説に基づく目的くらいが、良いアンバイかと思います。

#機械学習と関わっていく上では、スタンスが重要

今回記事の最後に、機械学習と関わる上で私が最も大事だと思っていることについて、話をします。
それは、機械学習との向き合い方、すなわちスタンスです。
或いは、自分が機械学習とどう付き合っていくかという心算です。

この激しい競争の中で、機械学習ビジネスを成就させるべく、必要な知識や能力を全て１人でキャッチアップすることは難しいです。
機械学習ビジネスを行うに当たって必要な知識や能力とは、例えば以下です。

* 各業種ごとの専門知識
* 統計の知識
* 機械学習の知識
* プログラミングの知識
* ソフトウェア開発の知識
* ハードウェアの知識
* ネットワークの知識
* データベースの知識
* 交渉力
* 折衝力
* 共感力
* キャッチアップ力
* マナー力
* 雑談力
* 質問力
* 説明力
* 調整力
* 統率力
* 発想力
* 応用力
* 販売力
* マーケティング力
* ドキュメント力
* etc…

これらの知識や能力が全て備わっていれば、１人で機械学習ビジネスに取り組んでいくことは可能でしょう。
しかし、そんな神様のような人は、実際には存在しません。
或いは存在したとしても、それぞれの知識を薄く把握しているというレベルでしょう。
今はネットで何でも調べられる時代ですから、そんな人は重宝されません。

求められる人材は、何れかに特別に詳しい人です。
2、3の知識や能力に跨っているのも、それぞれが深く理解できていれば良いでしょう。
ポイントは手を広げすぎず、深く掘り下げることです。

また、その人の職種によっても求められる能力が異なります。
例えば、営業職の人が、機械学習の詳細な理論について詳しかったとしても、ビジネス転用への発想力や、交渉力に欠けていたら、宝の持ち腐れです。
逆に、実際に分析を行う人が、大きな絵ばかりを気にしていて、細部への配慮が疎かであると、誰もそこをフォローできなくなってしまいます。

「餅は餅屋」といいます。
餅屋の中でも、餅を作る人は餅の作り方に詳しくあるべきで、餅を売る人は販売力に長けているべきです。
更には、餅の材料を仕入れる人は、良い原材料とその仕入れ先について精通しているべきです。
新商品を開発する人は、世に出回っている餅の種類についての知識や、デザイン力に長けているべきです。

もし、「機械学習屋」をやるのであれば、そのお店における自分の役割が何なのかを、先ずは考える必要があります。
若しくは、自分が得意な役割が何かを考えるか、自分が好きな役割や「なりたい自分」にマッチする役割を考える必要があります。
これは、何も機械学習に限った話ではありませんね。

#最後に

以上、機械学習が何者かという話を中心に説明をさせてもらいました。
初回ということで、かなり抽象度の高い話が多かったかと思います。
以降の連載記事では、もう少し具体的な内容について掘り下げていきたいと思います。

今回の抽象的な話で、深い理解をすることは難しいかと思います。
先ずは、「何となく分かった気がする」という理解で、全く問題ないかと思います。

読んでくださった方、ありがとうございました。m(_ _)m