
最新のテクノロジーの代表として挙げられる人工知能、機械学習。
ですが、文系の方がこれらのテクノロジーとは一体何か、
ちゃんと説明出来る方は少ないのではないでしょうか。
機械学習の仕組みを理解することで、AIを用いたビジネス企画の出発点になると思いますので、
今回は機械学習の仕組みについて記載していきたいと思います。
目次
機械学習とは何か
簡単に言うと、大量のデータをシステムが勉強して、その傾向に沿った処理を返す、
というだけのシステムです。
機械学習は一つのシステムのようになり、
一度勉強して賢くなり、その傾向を覚えると、
それを繰り返し使うことが出来るようになります。
すごくざっくりと機械学習のシステム構築までの流れを記載すると、
以下のようなフローになります。
(2)大量のデータを勉強、傾向を見出す:大量のデータをシステムに投入し、その傾向をシステムに勉強してもらう
(データを学習させる、といった表現がよくなされます。傾向を見出した後は、その賢くなったシステムのことを学習済みモデルと呼んだりします)
(3)学習済みモデルに、新しいデータが投入される:既にシステムは賢くなっているので、その賢さを持って、未知のデータが来ても過去のデータの傾向を応用し、未知のデータに対応をしていきます
(4)学習した傾向に沿って、新しいデータを処理し、その結果を吐き出す
簡単にはこれだけが出来るシステムのことで、これを機械学習と呼んでいるわけです。
よりイメージしやすいように、いくつか例を書いてみます。
コーヒーショップの売上予測に
(1)あるコーヒーショップが売上を予測したいと
(2)日次の売上データとその日の来客者の属性やSNSの発言内容、閲覧している記事のデータをシステムに勉強させてみた
(3)3日後の来客者層のデータが事前に分かったので、それを学習済みモデルに投入してみた
(4)3日後のそのコーヒーショップの売上を学習済みモデルがはじき出した.
自動運転の画像識別に
(1)自動運転の時に画像を認識したい
(2)人、標識、車、自転車等の名前付き画像をシステムに勉強させた
(3)テスト走行して、東京都港区を走ってみた。どんどん人や車の画像データが学習済みモデルに入ってくる。
(4)学習済みモデルが、人の画像を人、車の画像を車、自転車の画像を自転車だとちゃんと分類した。
ニュース記事のカテゴライズに
(1)ニュースの記事を自動でカテゴライズしたい
(2)ニュースの本文と、そのニュースが何のカテゴリに当てはまるかがセットになったデータをシステムに勉強させた
(3)新しいニュース記事を誰かが投稿した
(4)学習済みモデルが、その記事を自動で分類して経済のニュースだと分類した。
こういった流れで機械学習は行われているわけです。
機械学習の仕組み
機械学習とか人工知能とか言われても、多くの文系の方は何がどう動いているのか、
イメージが湧きにくいかと考えています。
中身が分からないので、新聞やニュース記事で出る事例を元に推測をして、
・PCの中に何か知能が出現してそれがすごいことをやってくれるの?
・ゆくゆくはなんでも可能になるんじゃない?
・とにかく大量のデータをPCに入れる必要があるらしいね
みたいな誤解も出てきてしまうのではないかと考えておりますが、
機械学習にもいくらでも限界はあるわけで、何故その限界が生まれるのかも含めて、
具体的にどう実装がされていくのか、ここではすごく簡単に説明していけたらと思います。
機械学習はプログラミング言語を用いて、エクセルで言う関数みたいなものを使って作られている
まず、人工知能/機械学習というのは単なるプログラミングです。
何か知能が突然宿るわけではなく、プログラマーが手を動かして作るものですね。
代表的には、Pythonというプログラミング言語を用いて実装が出来ます。
エクセルでは関数(sumとかvlookupですね)がありますが、
エクセルで、=sum()と書くと勝手に合計がされますね?
これはsumと書いた時にはその範囲の合計を算出せよ、と司令が組み込まれているから機能するわけで、
ユーザーはsumと書くだけで合計が出せてしまうわけです。
実は機械学習もこれと非常に似たようなものを用いて実装をしています。
プログラミングの世界では、このsumのような関数のものを、ライブラリとかフレームワークと表現しますが、
機械学習を行うためのライブラリが世の中には今いっぱい出てるわけなんですね。
それを利用することで、エクセルでsumと書くがごとく、機械学習を使えるようになるわけです。
scikit-learn
http://scikit-learn.org/stable/
TensorFlow
https://www.tensorflow.org/
Chainer
http://chainer.org/
Gluon
https://gluon.mxnet.io/
Caffe
http://caffe.berkeleyvision.org/
Keras
https://keras.io/ja/
Theano
http://deeplearning.net/software/theano/
Torch
http://torch.ch/
PyML
http://pyml.sourceforge.net/
Pylearn2
http://deeplearning.net/software/pylearn2/
Pybrain
http://pybrain.org/pages/home
こういったライブラリをPythonで指定して、呼び出して使うだけで、
エンジニアは複雑な数式を書くことなく、機械学習をプログラミング出来るわけですね。
すごく簡単には、
・システムが勉強するために、どのデータを読み込むかを指定する
Pythonでこれを指示すると、ぐるぐる回って学習をしてくれます。
とても簡単に書いてますが、AIエンジニアは数式をずっとプログラミングしているという誤解があるかもしれませんが、
決してそうではないということですね。
機械学習で使われる方法
これまで述べてきたやり方で、大枠としては、思ったよりもシンプルにエンジニアは動かしているんだ、
ということがお分かりいただけかと思いますが、
その上で、システムが勉強する方法(データから学習していく方法)にもいくつか種類があります。
すごく代表的な2つを以下に紹介します。
教師あり学習
最も代表的な機械学習の方法であり、かつ多くのAIプロジェクトがこの方法論を用いた機能を作っているかと思います。
簡単に言うと、教師あり学習というのは、
方法になります。
例えば、猫の画像を見せて、これが猫だと教える、
犬の画像を見せて、これが犬だと教える、
この猫だと言うこと、犬だと言うことが機械学習の世界だと「教師」という表現になります。
教師がデータ内にあって、それを元にシステムが勉強していく方法を教師あり学習というわけです。
先のニュース記事の分類だとすると、
これは経済の記事だ、政治の記事だ、ゴシップだ、スポーツだ、と教師を示すことで勉強が出来る、
ということになります。
教師あり学習のデータについて
人工知能、機械学習で、文系のよくある議論で、どういうデータがどれくらいあればいいのか?
という話があるのですが、これも文系の方の中でもしっかり理解しておいた方が良い(エンジニアと議論する上でとても有用)知識なので、
ここで書いていきます。
教師あり学習で必要なデータの持ち方というのは、
勉強する材料(猫の画像とか記事)に対して、それに対応する教師が必要であり、
その対応関係があるデータの列がずらーと下に並んでいる、
そういうデータを保有している必要があります。
この素材と教師が対になっているデータ構造を
常に頭の中でイメージする必要があります。
とは言っても全然難しい話ではなく、エクセルをイメージしてもらうと簡単なのですが、
簡単には以下のようなデータのイメージです。
A列:勉強するための素材 | B列:教師 |
今日のサッカーのワールドカップ予選では、日本代表がアメリカ代表に勝ちました | スポーツ |
安倍首相は現在アメリカに訪問しており、明日の午後1時にトランプ大統領との会談が控えています | 政治 |
俳優の石原さとみさんが、IT起業家と沖縄旅行に行ったと週刊誌が報じました | 芸能 |
実際にはこのままのデータの形ではなくあくまでイメージとして認識して欲しいのですが、
機械学習をするライブラリは、B列を教師だと認識し、
そのデータがその教師だと言う(この画像は猫だと言う、この記事はスポーツだと言う)ためには、
どのような素材(A列)であれば良いのかを勉強します。
ああ、政治記事というのは首相とか大統領とかそういう用語がよく出てくるのか、、、とか、
スポーツ記事は、サッカーとか勝ち負けとか試合とかそういう用語が出てくるのか、、、とか、
芸能記事というのは、俳優とか旅行とかそういう単語が多いんだな、、、とか、
猫というのは、こういう色で毛があって目があって鼻があって、、、とか、
そういうことを勝手に勉強してくれるわけですね。
一番最初に書いた、以下の流れで言うと、
(1)目的設定
(2)大量のデータを勉強、傾向を見出す(学習させると表現されます。傾向を見出した後は、学習済みモデルと表現されます)
(3)学習済みモデルに、新しいデータが投入される
(4)学習した傾向に沿って、新しいデータを処理し、その結果を吐き出す
この4つの流れのうちの、
(2)大量のデータを勉強、傾向を見出す(学習させると表現されます。傾向を見出した後は、学習済みモデルと表現されます)
この2の部分をライブラリを用いて、教師を勉強させていると言うことになります。
そして、その勉強がうまくいってシステムが賢くなった後には、
(3)学習済みモデルに、新しいデータが投入される
(4)学習した傾向に沿って、新しいデータを処理し、その結果を吐き出す
このように新しく教師がない素材であるデータを機械学習に放り込むと、
教師を正しく出してくれるようになる、という形です。
賢くなったシステムにデータを投入した時の例
↓
素材が機械学習システムに投入される(でもこれが何の記事なのかの教師データは無い)。
↓
この記事は「芸能」だ!(カテゴリの分類がされる)
芸能人とIT起業家は旬のネタすぎますね。すいません。笑
教師なし学習
さて、教師あり学習のイメージがなんとなくついたところで、
次は教師なし学習です。
こちらも読んで字の通り、教師が「ない」データを用いて何らかのことをするんだろうということは推測できるかと思いますが、
教師が無いデータをシステムに学習させて、
何らかの結果に収斂させるという方法論になります。
教師なし学習の代表例、クラスター分析
教師なし学習の中で、おそらく最もよく使われている方法は、
クラスター分析という分析手法ですが、
何かと何かが近しいもの同士を固めて、グループに分けるという手法になります。
この時にグループの名前のようなものはこちらでは指定しておらず、
つまり教師がない中で、機械学習アルゴリズムに勝手に分類してもらう、という事になります。
例えば、よくクラスター分析の説明をするときに用いられる例ですが、
プロ野球選手のバッターの打率、本塁打数、三振数、盗塁数などのデータをクラスター分析にかけると、
・ホームランバッター
・バント&盗塁バッター
・安打ヒッター
などにグループが分かれたりします。
これは元々、本塁打数が多い人はホームランバッターで、盗塁が多い人は盗塁バッターに分けてね、と教師の情報を元々のデータに付与している訳ではなく、
あくまでアルゴリズムが勝手にグループ分けをしてくれています。
教師がなくても、アルゴリズムがデータの傾向が近しいものをグループ分けしてくれ、
うまく人間として意味あるグループ名を付与することができる、
という分かりやすい事例ですね。
で、ここでも同じように最初の流れに沿って記載していくと、
このようなグループ分けの傾向を学習させることは、
一番最初に書いた、以下の流れの、
(1)目的設定
(2)大量のデータを勉強、傾向を見出す(学習させると表現されます。傾向を見出した後は、学習済みモデルと表現されます)
(3)学習済みモデルに、新しいデータが投入される
(4)学習した傾向に沿って、新しいデータを処理し、その結果を吐き出す
この4つの流れのうちの、
(2)大量のデータを勉強、傾向を見出す(学習させると表現されます。傾向を見出した後は、学習済みモデルと表現されます)
この2の部分で、クラスター分析が使えるライブラリを用いて、大量のデータを用いてグループの分け方を勉強したわけです。
そして、その勉強がうまくいってシステムが賢くなった後に、
(3)学習済みモデルに、新しいデータが投入される
(4)学習した傾向に沿って、新しいデータを処理し、その結果を吐き出す
今回の例で言うと、新しい野球選手のデータをこのシステムに投入すると、
この選手は「ホームランバッターだ」、「安打ヒッターだ」という、グループ分けをしてくれる、
という訳です。
機械学習が出来ること、出来ないこと
ここまで色々説明してきましたが、データを学習させ、賢くしていく上で、
人工知能、機械学習には出来ること出来ないことが現時点の実用ベースでの技術で行くと、
明確にあるわけです。
大量にデータを保有していないとAIを作れない、大量にデータを保有している会社が強い、という誤解
よくある誤解として、機械学習、人工知能はデータを大量に保有していないと出来ない、
といった誤った理解がされていることがありますが、
実は決してそうではありません。
逆にデータの全量がどれだけ多くても、
全く機械学習の役に立たないケースもあったりするわけです。
そのような誤解も含めて、以下で説明していきます。
データについておさらい
先程のニュース記事のデータ例として、以下のようなデータを挙げました。
この教師と素材が対になっているデータ(データセットとか呼ばれます)こそが、
機械学習の限界を規定していることから、
この点についてもう少し説明しておきたいと思います。
A列:勉強するための素材 B列:教師 今日のサッカーのワールドカップ予選では、日本代表がアメリカ代表に勝ちました スポーツ 安倍首相は現在アメリカに訪問しており、明日の午後1時にトランプ大統領との会談が控えています 政治 俳優の石原さとみさんが、IT起業家と沖縄旅行に行ったと週刊誌が報じました 芸能
簡単に、機械学習を行う際に投入するデータのイメージとして、
以下のような図を作ってみました。
横軸が、当該テーマとして、教師として学習させたいパターンの数を表し、
縦軸がそのパターンごとのデータ量になります。
図の中で、教師1、教師2、教師3、、、としていますが、
これを前述のニュースのカテゴリ分類というタスクで例えると、
教師は「経済」だったり、「政治」だったり、「芸能」だったりになるわけで、
どういうカテゴリで、何個くらいに分けたいのか?ということがデータによって規定されるわけです。
その上で、各々の教師ごとに素材となるデータが必要になります。
教師1、例えば経済だとしたら、その経済という教師が付与されているデータのみで、
一定量のデータをシステムに投入出来なければ、
どういった記事(そこに出てくる単語等)であれば、それが経済の記事である、と言えるのか、
その傾向がシステム側では導き出せないわけですね。
従って、この図で表しているように、パターンごと(教師ごと)のデータ量というのは、
非常に重要な要素になります。
先の、「全量としてデータ量が多いことが重要という誤解」に関して言うとまさにこの部分で、
教師ごとのデータを、適切量保有していることが重要であって、
全量として多いか少ないかということのみで、
AIを作れるかどうかやその企業の競争力になるかどうかは、
全く語れないということになるわけです。
機械学習が出来ること
さて、これまでの議論を踏まえて、では機械学習が出来ることというのはどういうものでしょうか?
シンプルには、
(b)パターン(教師)当たりのデータ量が一定数あるテーマ
(c)教師と素材となるデータの関係性が一定程度あるテーマ
※(a)と(b)は相互関係もある
ということになります。
例えば、何度も出てきていますが、ニュース記事のカテゴリ分類のデータのイメージを以下に図示してみました。
図として、機械学習で出来ることの条件を満たしているか考えてみると、
(a)パターン数が多すぎないテーマ →○
(b)パターン(教師)当たりのデータ量が一定数あるテーマ →○
(c)教師と素材となるデータの関係性が一定程度あるテーマ →○
ということになるのですが、
これくらいの教師の分類の仕方であれば、政治でも経済でも芸能でもスポーツでも地域でも、
きっと一定数のデータがあるし、集めやすいですね。
そもそもパターンごとのデータを保有していなければ分類出来ないですが、保有出来うる内容です。
また、直感的に皆さんもお分かりになるかと思いますが、
政治と経済と芸能とスポーツと地域ではきっと用いられる用語、出てくる固有名詞、文脈等、
かなり差があるものであると感じられるのではないでしょうか?
改めて、
(a)パターン数が多すぎないテーマ
(b)パターン(教師)当たりのデータ量が一定数あるテーマ
(c)教師と素材となるデータの関係性が一定程度あるテーマ
※(a)と(b)は相互関係もある
これらを満たすデータが存在するテーマであれば、
機械学習の適用可能性が(現時点では)非常に高いテーマであると言えます。
機械学習が出来ないこと
一方で機械学習で出来ないことは何か?を考えてみます。
まあ出来ることの逆条件になるのですが、
(b)パターン(教師)当たりのデータ量が少ないテーマ
(c)教師と素材となるデータの関係性が認められにくいテーマ(素材の種類が複雑化し、色々ある中で、各々が小さい影響を与えて、結果を得ているテーマ等)
※(a)と(b)は相互関係もある
のいずれか、特に(b)に×がつく場合は、機械学習では対応出来ないテーマとなります。
例えば以下の図を見てみてください。
ニュース記事の中でも芸能に絞り込んで、教師を設定した場合です。
かなり細かく教師を分けていて、お笑いニュースはきっと多いんでしょうけれども、
例えば舞台俳優のことだけ書いてあるニュース記事、ドラマ俳優のことだけ書いてある記事と絞り込んでいくと、
(事実として、少ないかまでははっきり分かりませんが)おそらくデータ数が非常に少なくなってしまうのではないかと予想がされます。
そうなると、(b)の条件がNGとなり、
芸能ニュースについては学習して賢く分類出来るけれども、
舞台俳優についてはデータ量が少なくて精度が悪く、使い物にならない、、、といったことになってしまうわけです。
スマートスピーカーで考える、機械学習で出来ないこと
ついでに、もう1つ事例を出してみました。
Google HomeやAmazon echo等のスマートスピーカー、流行ってますよね。
海外の調査を見てみると、以下のような使い方がされているみたいです。
出所:https://www.voicebot.ai/2017/10/02/25-percent-of-smart-speaker-owners-use-them-for-11-or-more-tasks/
よく、スマートスピーカーには人工知能が入っていて、全てAIが自動で最適化してくれるようになる!という話があるのですが、例えば上記を題材として、求められている機能のうち、どれが人工知能化され、どれがそうでないのか、今回のフレームに当てはめて考えると、より近い未来としてのAIが見えてくるかもしれません。
この項では「出来ないこと」を探しますので、例えば以下のような図を作ってみました。
ちょっとアンケート結果にある機能のどれに当てはまるのか分かりませんが(笑)、
スマートスピーカーで電気をその人に個別最適化された消し方がされるだろう、とかっていう議論を見たことがあったので、
例として作ってみました。
実際には、やり方はなくもない(*)と思うのですが、
本当に1人1人の気分やライフスタイルに「正確に」マッチした電気消灯をAIでやろうとすると、
それはそれはとても非現実的になります。
図はAさんの電気を消すタイミング、Bさんの電気を消すタイミング、Cさんの~と続きますが、
個別最適化をしようとすると、個別具体的な人間の電気を消すタイミングが教師となるわけですね。
で、問題はそのパターンごとのデータ量ってどれくらいあるんですか?と考えてみると、
当然、全然蓄積されないわけです。
なので、人工知能化出来ないわけですね。データが無いので学習出来ないのです。
従って、個人に対して、本当の意味で最適化されたAIというのは、
現時点で実用化されている技術ではなかなか困難であり、
やるとすると、(*)個人と言いつつも、似たライフスタイルの人たちをグループ化(前述のクラスター分析等で)して、
そのグループの電気消すタイミングってだいたいこうだよね、みたいな処理のさせ方をせざるを得ず、
そうなると「正確な」ものではなくなるわけです。
突然電気消されたりして、人によっては、「なんで今消すんだ、ばかやろう」的な話にもなるわけです。
さいごに
さて、文系向けに、文系の人が出来るだけ分かりやすいように、
人工知能、機械学習について説明してみました。
出来るだけ簡便にわかりやすく記載することを心がけてみましたので、深くAIを分かってる方にとっては、それはちょっとおかしい説明じゃないか、みたいなところもあるかもしれませんが、何卒ご容赦ください。
AI×事業開発は、これから最も大きな潮流を迎えると思いますので、
是非そのスキルを獲得してください!
本日は以上です。