最近、Web業界やテクノロジー分野で人工知能(AI)やデータマイニング、ディープラーニングなどのキーワードとともによく耳にするようになった言葉の一つに「機械学習(マシーン・ラーニング)」という言葉があります。

機械学習はGoogleの自動運転車をはじめ、AmazonやZOZOTOWNなどのオンラインショップやNetflixやAWAなどの音楽ストリーミング配信サービスで使われるレコメンデーション機能、twitterやインスタグラムで顧客が投稿している内容を分析するマーケティングオートメーションなど、今日の社会でも頻繁に活用されています。

「機械学習」は、今後Web業界で取り残されないためにフォローするべき重要なキーワードの一つであることは間違いありません。
それでは、機械学習とは何であり、なぜこれほど注目されるのでしょうか。

今回は、「機械学習」の概要から、Web業界の関連者が知っておくべき機械学習に関するフレームワーク/ライブラリまで、幅広く解説します。
ほとんどの人が「機械学習」については聞いたことがあっても、「いつか勉強しよう」とブックマークに入れて保存するケースが多いのではないでしょうか。
ぜひこの機会に機械学習の全体像を掴んでみてください。

参考:
人工知能(AI)と人工無脳(チャットボット)、どう使い分ければいい?

機械学習とは?

機械学習(machine learning)とは、人工知能(AI)における研究課題の一つで、人間が自然に行なっている学習能力と同じ機能をコンピューターで実現しようとする一連の手法のことです。
具体的には、複数のデータを用いて反復的に学習し、そこに潜むパターンをコンピューターが帰納法的に見つけ出すことです。
学習した結果をモデル化し、新たなデータにあてはめることで、パターンに従って未来予測を行うこともできるようになります。
最終的には、予測分析を自動化することができ、データサイエンティストの人手不足にも対応できるという点で、大きく期待が寄せられています。

機械学習の歴史自体はそれほど短いものではなく、これまでも科学者たちはパターン認識技術に着目して、自分たちがプログラミングを行わなくても特定のタスクを実行できるようにコンピューターが学習できる方法を見つけようとしてきました。
しかし、最近では人工知能(AI)にスポットライトが当たったことで、機械学習の「反復学習性」に着目して、コンピューターが自律的に学習を行うようなアルゴリズムをこぞって開発するようになりました。
近年のテクノロジーの発展のおかげで、ビッグデータを使った処理も比較的容易になったので、凄まじい勢いで進化を遂げています。

アルゴリズムを活用して学習モデルを構築し、複数のデータ同士のつながりが構築できれば、人間が介入しなくても的確に意思決定の判断を下すことが可能になります。
インターネットの普及率が爆発的に伸び、利用可能なデータが増え続けていて、コンピューターの処理能力も高まり、サーバーやストレージなどの構築コストも下がっているので、大量の複雑なデータをより速やかに処理できる環境が整ったのも、機械学習が一般的になった要因です。

機械学習の4つのアルゴリズム

library.jpeg

機械学習を行うためにベースとなるアルゴリズムは、大きく分けて「教師あり学習」「教師なし学習」「反教師あり学習」「強化学習」の4つです。
それでは、これらの違いは何なのでしょうか。具体例も挙げながら、解説していきましょう。

1. 教師あり学習

教師あり学習(supervised learning)アルゴリズムでは、人間がつけたラベル付きの手本を使ってトレーニングを実行していきます。

digits.png

例えば、0から9までの数字1文字が書かれた画像がたくさんあるとしましょう。
この画像ひとつひとつに、0から9までのどの数字が書かれているのかというラベルを人間がつけることによって、それを学習するのが教師あり学習です。
つまり、アルゴリズムにより、コンピューターが人間の認識を真似るように学習が行われます。
学習が繰り返し行われると、新しい画像入力を行なった際、どの数字が書かれているのかを正しく判断できるようになります。

これを応用したのが、入力フォームなどの際に入力者がコンピューターでないことを確認するために使われるCAPTCHA(キャプチャ)です。
もともとCAPTCHAは、ランダムな文字列を生成して、機械が自動的に読み取るには困難な形で加工していましたが、ある程度アルゴリズムによって推測可能な文字列を問題として入力させることで、その整合性を確認する学習方法を取っているものもあります。

2. 教師なし学習

一方、教師なし学習(unsupervised learning)アルゴリズムでは、履歴ラベルが存在しないデータに対してコンピューターが学習を実行します。

先ほどの例でいえば、コンピューターは0から9の書かれた大量の画像を読み取り、そのデータのパターンだけを見てデータの類似点を探ることになります。
あらかじめ「何を出力すべきか」が与えられていないという点で教師なし学習とは大きく異なり、データの本質的な構造を抽出するのに用いられます。

教師なし学習を使ってマーケティングに活用する例も多く見受けられます。
例えば、年齢や性別、居住地など、よく似た属性の組み合わせを持つカスタマーをセグメント化して、コンピューターに教師なし学習アルゴリズムで購入情報や閲覧情報を学習させることで、カスタマーの嗜好性を分析して「あなたへのオススメ」としてリコメンデーション機能を実装することができます。

amazon.png

これをうまく活用したのが、Amazonで表示される「チェックした商品の関連商品」などのレコメンデーションです。
Amazonは、商品をチェックした履歴をさまざまな属性と紐づけているので、まさに今関心があるであろう商品をピックアップしてカスタマーに推薦することができるのです。

3. 反教師あり学習

反教師あり学習(semi-supervised learning)では、ラベル付きデータとラベルなしデータの両方を使って学習を行なってトレーニングを行います。
教師あり学習のように大量の教材にラベルをつけるとコストがかかってしまうものでも、半分だけにラベルをつけて残りはラベルなしで学習させることで、人間による費用や労力を減らす効果が期待できます。

facerecognition.jpg

反教師あり学習を応用したものとして、Facebookにアップロードされた写真の顔認識システムが挙げられます。
ユーザーが自分の写真がはっきりと映った写真をアイコンとしてアップロードすれば、それがラベルとなります。
そして、他のユーザーによって自分がタグ付けされることでFacebookの顔認識アルゴリズムが学習し、繰り返し学習がなされると、タグ付けされなくても特定の人物の顔写真から人物名を推測することができるようになります。

4. 強化学習

強化学習(reinforcement learning)とは、ロボット工学やゲーミングなどでよく使われる機械学習の方法で、どの行動が最大の成果(報酬)をもたらすかを、アルゴリズムを通して試行錯誤して突き止めていく手法です。

この学習モデルでは、「エージェント」と呼ばれる意思決定者、エージェントとアクションを結びつける「環境」、エージェントが行うことのできる行動である*「アクション」の3つの構成要素が必要です。
強化学習は教師あり学習にも似ていますが、教師による明確な答えは提示されず、行動の選択肢である「アクション」と成果である「報酬」だけが提示されるという点で異なります。
つまり、「答え」よりも行動による
「期待値」*を出していくのが強化学習と言い換えることもできます。

go.jpg

強化学習の応用例が、GoogleのAI部門であるDeepMindによって開発されたコンピューター囲碁プログラム*「AlphaGo(アルファ碁)」です。
囲碁や将棋といった複雑なゲームの場合、どの場面でどのような手を打てば最善を尽くすことができるかは、「答え」ではなく
「期待値」*です。
強化学習では、「Aの場所に手を打った場合、報酬はB」であるというように、最善の期待値(戦略、ポリシー)を求めていきますが、報酬の設定が困難な場合には「報酬B」もまた推測の対象にするという点で、教師あり学習よりも複雑な問題を扱うことができるようになります。

データマイニングやディープラーニングとの違い

「機械学習」とよく混同される言葉として、「データマイニング」「ディープラーニング」というものがあります。
これらの3つの手法は、意思決定に役立つパターンを見つけるという点では同じですが、そのアプローチ方法はそれぞれに異なります。
それでは、一体機械学習とどういう点が同じで、どこが異なっているのでしょうか。

データマイニング

データマイニング(data mining)とは、パターン認識や人工知能の解析データ、統計データなどの大量のデータにアルゴリズムを適用することで、必要な知識を取り出す手法です。
マイニングという言葉は「発掘」を意味する言葉で、その中でもテキストをマイニングするものを「テキストマイニング」、Webページをスキャンしてマイニングを行うものを「Webマイニング」と呼ぶことがあります。
大量のデータ(ビッグデータ)から共通解を見つけ出すという点では「機械学習」の上位構造と捉えることができます。

SNSの普及によって膨大なデータが蓄積し始めると、ビジネスにおいても顧客情報の分析方法としてデータマイニングが注目されるようになり、データサイエンティストという職業が生まれました。
ビッグデータをデータマイニングするためのサービスが一般向けに提供されはじめ、IBMのWatsonをはじめとするコグニティブ・コンピューティングサービス(自然言語を学習し予測する機械学習サービス)も広まっていきました。

ディープラーニング

ディープラーニング(deep learning、深層学習)とは、多層構造のニューラルネットワークを用いた機械学習のことです。
ニューラルネットワークとは、脳機能に見られるいくつかの特性を計算機上のシミュレーションによって表現することを目指した数学モデルで、必要とされる機能を、提示されるサンプルに基づき自動形成することができます。
文字認識や、音声認識など、本来コンピューターが苦手とされている処理に対して有効で、「機械学習」の下位概念と捉えることができます。

ディープラーニングは現時点で最先端の技法で、Googleによる自動翻訳機能や、AppleのSiriやAmazonのAlexaといった音声認識など、より複雑なタスクに適用されています。

機械学習に関するフレームワークやライブラリ

機械学習についての概要が理解できたところで、Webの業界人として知っておきたい、機械学習やディープラーニングに関するフレームワークを覗いてみることにしましょう。

1. TensorFlow

tensorflow.jpeg

TensorFlow(テンソルフロー)は、Googleが2015年11月に発表した機械学習ライブラリです。
実際にGoogleの各種サービスでも使われており、音声認識や翻訳だけでなく、Googleフォトの被写体認識やGmailのメール分別、Inboxの自動返信文作成やYouTube広告の最適化から配信まで、さまざまなプロダクトを支えています。

TensorFlowは環境を構築するだけであれば10分程度で完了します。
Linux・Mac・Windowsの各種OSにインストールすることができ、コマンドプロンプトやターミナルを通してインストールすることができます。

TensorFlowのオフィシャルページには「MNIST For ML Beginners」という、手書き文字を利用したチュートリアルがあります。
GitHubにあるソースコードを引っぱってくるだけで簡単に試すことができます。

ソースコードを以下のようにcloneします。

$ git clone --recurse-submodules https://github.com/tensorflow/tensorflow

fully_connected_feed.py の30行目・31行目を下記のように修正します。

import input_data
import mnist

ターミナル上でfully_connected_feed.pyを実行します。

$ cd tensorflow/
$ python tensorflow/examples/tutorials/mnist/fully_connected_feed.py

そうすると、スクリプトによってデータセットの取得からモデルの学習までを行なって、実行結果を表示してくれます。

Num examples: 10000 Num correct: 9028 Precision @ 1: 0.9019

精度は約90%。なかなかです。

参考:
TensorFlowとTensorBoardでニューラルネットワークを可視化 - Qiita

2. Chainer

chainer.jpeg

Chainer(チェイナー)は、2015年6月にPreferred Networksによって公開されたニューラルネットワークのライブラリです。
Pythonのライブラリとして提供されており、UbuntuやCentOSのほか、Macでも下記のコマンドを実行するだけでインストールできます。

$ pip install chainer

先ほどのTensorFlowと同じくGitHubの公式リポジトリに手書き数字を使ったサンプルが公開されています。
下記のコマンドを入力して実行してみましょう。

$ git clone https://github.com/pfnet/chainer.git
$ python chainer/examples/mnist/train_mnist.py

そうすると、下記の実行結果が返ってきました。

epoch 20
train mean loss=0.0104963570454, accuracy=0.996967369459
test mean loss=0.102703116325, accuracy=0.971902006481

最終的な識別精度は98%となりました。

まとめ

今や、大量のデータを扱う業種のほとんどで、機械学習のテクノロジーを用いたデータサイエンスが行われています。
金融におけるフィンテックや医療業界におけるデータ分析、UberやGoogleマップによる交通情報分析やEコマースにおけるマーケティングオートメーションなど、私たちの生活において見えないところで密接に関わっています

Web担当者がそのまま機械学習を取り入れるのは難しいかもしれませんが、正しい知識として学んでおくだけでも価値があります。
ぜひこの流れに遅れをとらないように、キャッチアップしていきましょう。