次のサービスや製品はどれも身近にありますが、これらに共通していることはなんでしょう。
買い物履歴、ユーザが書いたコメントやタグ、Webに無数にあるページ、メール、画像や動画と対象はそれぞれ異なっていますが、どれも「データから有益な情報を取り出す」ということを行っています。
これらは「機械学習」という技術を使って実現されているのです。
機械学習の応用範囲
機械学習は冒頭で挙げた以外にも、様々な分野で使われています。
例えば、ノイズ除去や特徴の抽出を目的とした利用パターンがあります。音声認識や画像認識、文字認識(OCR)などはその代表格です。それらも含めた「外部からの情報を読み取るセンサー」(カメラ、マイク、接触、温度、加速度など)のあるところには必ずと言っていいほど機械学習が使われているか、使われる余地があります。
また、隠れたルールや法則を見つけ出すのにも機械学習は有効です。データマイニング(大量のデータから知識を取り出す)はその最たるものの一つです。商品購入情報を分析して「ビールを購入した人は紙おむつもあわせて購入することが多い」という傾向を発見した、的なお話は耳にしたことがある人も多いのではないでしょうか。遺伝子(DNA)の解析でも、機械学習(自然言語処理)の手法が応用されています。
なんらかの予測を必要とする領域では、もはや機械学習はなくてはならないものとなっています。保険や証券取引、地震予測や天気予報、鉄道ダイヤのスケジューリング、渋滞予測、機器の故障予測、病気予防のための予測診断、漢字変換の入力予測……などなど、枚挙にいとまがありません。
もともと機械学習は、人工知能の要素技術として今の形に体系化されてきたこともあり、コンピュータに「人間の代わり」をさせるために利用されることも多いです。世界コンピュータ将棋選手権に出場する将棋プログラムのほとんどは機械学習の手法を採用していますし、囲碁もここ数年で有効な機械学習の手法が見つかり、どちらも今ではアマチュアのトップレベルと互角に戦うほどになっています。
その他にも、機械学習が使われている例は数多くあります。
- 物理、化学、生物、医学など様々な科学観測全般。センサーが拾えない情報の再現、解像度の向上。
- ロボット。センサー読み取り、バランスを保つための予測等々、ロボットのソフトウェアは機械学習の固まり。
- ゲーム制作や3D映画の撮影に使われているモーションキャプチャー。見えない場所にあるマーカーの位置の推測。
- エレベータの動きの制御。混雑を可能な限り少なく、かつ省エネとなるように最適化。
- 未知のコンピュータウイルスの検出。ウイルスかどうかの閾値の推論。
- 検索結果のランキング。クエリーやコンテキストから求められている情報の推測。
- コンテンツに合わせた広告の表示。
ここで、実はこれら応用例の大半について、機械学習が使われ始めたのは最近5年10年の話、というと意外に感じるのではないでしょうか?
冒頭で例としてあげた、ユーザの動向から商品をおすすめする機能(協調フィルタリング)は、10年前は精度的にも処理速度的にも非現実的と言われていました。素人目にはいかにも機械学習を活用してそうなコンピュータ将棋。実はつい5年前までは、機械学習で強いプログラムは作れない、人間の経験を使って調整するしかない、と言われていたのです。
不可能だと言われてきたことが、10年も経たないうちに当たり前のことになっています。インターネットに関わる仕事や研究をされている方にとっては、それはむしろ馴染みのある光景かもしれませんね。
あなたの今やっている仕事も、機械学習を使うなんて夢にも考えていなかったとしても、10年後、5年後、1年後にはどうなっているかは分からないのです。
どんなときに機械学習は役にたつ?
機械学習がどういう問題を解決してくれるのでしょうか。ここでは、「この商品を買った人はこんな商品も買っています」機能をあなたのサイトで実現する、というケースで確認してみましょう。
まず、指定された商品Xと一緒に買われたことのある商品を抽出します。これはデータベースを普通に検索すれば良さそうです。例えば商品A、商品B、商品Cの3種類だったとします。
次に、その3商品の中で、どれが最もお勧めするのに適しているか順位付けをしなくてはいけません。
- 商品Xを買った人の多くは商品Aも買っているが、そもそも商品Aはものすごく売れている
- 商品Bを買った人はほぼ必ず商品Xも買っているが、そもそも商品Bを買った人がとても少ない
- 商品Xと商品Cを一緒に買った人は1人しかいないが、Xとよく似た商品Yと商品Cはとても多くの人が一緒に買っている
実際の売れ方を見るとC、B、Aの順に並べたいところですが、単純に「2つの商品を一緒に買った人数」で並べればA、B、Cの順に、「その商品を買った人のうち、Xも買った人の率」であればB、A、Cの順になってしまいます。どうすれば望ましい結果に一番近付けることができるでしょう?
次なる難問は、すべての商品の組み合わせに対してこうした判断を行う必要があるということです。商品が1万点あれば、組み合わせは約5,000万通りにもなります。10万点あれば、約50億通り。一緒に売れたことのある組み合わせのみ考えたとしても、膨大な件数になるでしょう。
サービスとして実現するには、これらを「現実的な時間で計算」できなければなりません。機械学習はこれらを、具体的には以下のような問題を解決します。
- 一つ一つは人間には簡単。コンピュータには難しい
- 複雑すぎて、隠された規則性を見出せない
- データが多すぎて、処理が終わらない
逆に言えば、このような問題を持っている領域は機械学習が有効な可能性があるということです。
連載の構成
ここまでは、機械学習を知らない人にはじめてみたいと思ってもらう話でした。この連載では次回以降、機械学習とはどんなものかを「理論編」と「実践編」に分けて紹介していきます。
「理論編」は本稿の著者である中谷が担当します。なぜそういう概念を考えるか、それを使って何ができるか、という動機につながる部分に重きをおいて、機械学習の様々な技術を紹介します。筆者自身も機械学習を学び始めてまだ日が浅いので、一緒に学んでいく部分も多いのですが、その分、初学者が引っかかりやすいところなどを伝えていけると思っています。
「実践編」は本連載もう一人の著者である恩田さんの担当です。サンプルデータにしたがって計算したり、実際に機械学習を行うコードを実装したりします。交互に掲載される「理論編」の内容について、手を動かすことでより理解してもらうのが狙いです。
機械学習をしっかり紹介するには数学の知識や数式を避けては通れません。どうしても必要とする前提知識は多くなってしまいます。
中でも線形代数(行列)と解析(微積分) は必須です。これらは本連載では説明しませんので、必要に応じて書籍などで別途勉強してください。参考になりそうなページを紹介します。
数学の書籍も数多くありますが、読みやすいものが良ければ以下の2冊がよいかもしれません。
- 『プログラミングのための線形代数』(オーム社)
- 『プログラミングのための確率統計』(オーム社)
線形代数は行列式、固有値まで知っていればひとまず安心です。解析は偏微分が分かれば大丈夫でしょう。
そして確率統計をとてもよく使います。こちらは連載の第2回で必要な範囲のおさらいをしますので、高校2年生レベルの確率(期待値、分散、標準偏差など)が分かっていればOKです。
機械学習の流れ
今回は連載の第1回なので、もう少し機械学習の全体的なお話、機械学習はどのような流れで行われるのか、という基本的な構成について紹介します。次回から始める具体的な内容も、この基本構成の中に位置づけて考えると、その役割が分かりやすくなるでしょう。
機械学習でもっとも重要なことは、「解決したい問題を数値化する方法」です。これを「モデル」と言います。「モデル」があって初めてコンピュータが問題を解く(判断する)ことができる状態になります。そして、問題を解く精度や性能は、この「モデル」の良し悪しで大部分決まってしまいます。
「問題を数値化する方法なんていくらでもありそうだけど?」という疑問を持たれるかもしれません。実際、自然言語処理・パターン認識・人工知能などの分野ごとに、問題を解くのにより適した「モデル」やその派生が毎年提案されて続けていて、「モデル」の流行り廃りもあったりします。毎年新しい携帯電話のモデルが出るような感じでしょうか。
機械学習を研究するのではなく、使いたい私達は、そういった「モデル」の中で評価の定まったものを利用させてもらうことにしましょう(新しい「モデル」に飛び付くのもかまいませんが、最新「モデル」はとても難しいです……)。
さて、これらの「モデル」はみなパラメータを持っていて、パラメータを決めることで適切な判断ができるようになります。このパラメータをデータから決める処理を「学習」や「推論」と言います。
パラメータの数や種類は「モデル」によって様々です。パラメータが多い「モデル」は表現力が高い(≒問題をより精密に数値化できる)ので、新しい「モデル」ほどパラメータが多い傾向にあります。
もちろん、パラメータが多いほど「学習」は難しくなりますので、多ければいいというわけでもありません。「学習」ではデータから効率よくパラメータを決める必要があります。そのパラメータを決めるなどの具体的な処理の手順が「アルゴリズム」です。
ちなみに、特にこのパラメータを決める「アルゴリズム」や処理の一部を指して「最適化」と呼ぶこともあります(プログラミングの「最適化」とは違います)。
「モデル」「学習」「アルゴリズム」を、それぞれのものとして紹介しましたが、実際には「モデル」を決めた時点で「アルゴリズム」なども使えるものが決まってしまい、それらは不可分なことが多いです。
そのため、よい「モデル」の一番の条件は、よい「アルゴリズム」があることになります。この「モデル」は人間の判断力に匹敵する精度を誇りますが、パラメータの学習に10年かかります、では意味がないですからね。
機械学習をはじめよう!
今回は概説的なお話でしたが、次回はいよいよ具体的な内容、機械学習に必要な確率の解説をします。
AI(人工知能)という言葉が生まれて、まだ50年と少し。機械学習はその人工知能の関連分野として体系化が始まった、若くて熱い分野です。しかしながら、機械学習はまだまだマイナーな技術です。
ここ5年10年の間に幅広い分野で適応が始まったという話をしました。これはコンピュータの処理能力の向上に負う部分も多いですが、実は「今まで知らなかった」「誰も使えるとは考えてなかった」という単純極まりない理由も少なくありません。
特にデータが増えるほど、コンピュータが速くなるほど、機械学習に有利な状況になっていきます。それでもまだ「知らなかった」「考えてなかった」と言っていて大丈夫でしょうか。
機械学習とインターネットとの距離はとても近いのです。この連載で、広く機械学習を知ってもらい、本格的に学ぼうと思うきっかけになれば幸いです。あなたも機械学習をはじめまてみませんか?