越境するコンピューター

読者です 読者をやめる 読者になる 読者になる

越境するコンピューター ~日記~

新しいコンピューターとの付き合い方 〜コンピューターと意思決定と人間〜

機械学習とは何か?

機械学習とは何か? 一言で言うと「今までと少し違うコンピューターの使い方」です。

どこが違うのでしょう?
 
今までのコンピューターの使い方(演繹的)
これまではやりたいことの手順をプログラムに書いてコンピューターに実行させるのが主流でした。
 
手順をプログラムに書く例
三角形の面積を計算したい場合、下記の手順(ロジック)をプログラムに書けば完成
 
  • 面積 = 底辺 x 高さ ÷ 2
 
このプログラム、底辺と高さを入力すれば常に正しい答えを出してくれます。
 
でも世の中には手順をプログラムで書くのが難しいケースが多くあります。例えば下記2つのケース 
  • カードの履歴データから不正使用データを見つけたい
  • たくさんくるメールの中から迷惑メールを判別して削除したい
カード不正、迷惑メールとも色んな手口があり、新たな手口も出てくるのでそれを全部調べてプログラムに入れるのは無理です。どうすればいいでしょう?
 
機械学習の場合のコンピューターの使い方(帰納的)
コンピューターにやらせたいことがあるのだが手順が説明できない (=手順をプログラムに書くのが難しい) 、そんなケースで使われるのが機械学習です。
 
機械学習のアプローチ方法
従来の方法では難しかった下記2つ、機械学習のアプローチをとるとどうなるでしょう?
  • カードの履歴データから不正使用データを見つけたい
  • たくさんくるメールの中から迷惑メールを判別して削除したい
カード不正利用、迷惑メールとも個々の手口すべてを網羅した検出ロジックを作るのは難しいけど、過去のデータ(カード履歴データや過去のメール履歴)を元に「こういう取引データの場合は不正使用の可能性が高い」とか「こういうメールは迷惑メールの可能性が高い」とか傾向を見つけてそれで不正取引、迷惑メールを判別しよう、というのが機械学習のアプローチです。
 
学習
カードの方を例にとると、まず過去の履歴データに不正使用、正常取引の情報(これをラベルと呼ぶことにします)を追加したものを用意します。これを『学習データ』と言います。
コンピューターにこのデータをインプットして、履歴データの情報(取引日時、場所、品目、個数、金額、etc...)から不正使用を判別できる方法が無いかを調べます。この方法にはいろんな種類があります、履歴データの各フィールドに重み付けをして不正利用と高い相関関係を持つ重み付けを発見する方法はその代表的なものです。
この学習データを使って最適な重み付けを決定していく過程を『学習』と呼んでいます。
 
テスト
学習の最に気をつけなければならないのは『オーバーフィッティング』です。これは学習データに特化した形で重み付けを決めてしまったため一般性がなくなってしまって、他のデータでは正しく分類ができなくなる状態を指します。オーバーフィッティングを避けるために学習した重み付けを使って別のデータを分類して、正しく分類できるかを確認します。この過程を『テスト』と呼んでいます。
 
本番
学習、テストを完了した重み付けを本番環境で使います。本番環境でもデータを使って『学習』していくことでさらに最適化された重み付けにして、分類の精度を上げていくことができます。
 
データを使ってコンピューターが『学習』し最適な重み付け(パラメーター)を決定していく、このようなアプローチを機械学習と呼びます。
 
機械学習の特徴
 
(1) 汎用的である
従来型のアプローチではプログラムにロジックが全てつまっていました、なので用途毎に特化したプログラムを作成する必要がありました。
機械学習の場合、何をインプットデータとして使うかはその道の専門家(カード犯罪専門家やメールセキュリティー専門家)が行います、これを『特徴抽出』といいます。一旦特徴抽出が行われたら機械学習専門家はそのデータが何かをあまり意識することなく学習や推定方法を考えることに集中できます。このような仕組みになっているので機械学習のロジックは汎用的に使うことができる部分が多いです。
 
(2) データが無いと価値が無い
従来型のアプローチではプログラムが重要な資産でした、プログラムに知見や技術がつまっていたからです。
一方機械学習ではプログラム自体は汎用的なものでそれだけでは価値を生みません、データを使ってプログラムに学習させて初めて価値を生みます。機械学習アプローチでは質のいい学習データが重要な資産になるのです。
 
(3) おおよそ正しい
従来型のアプローチでは インプットに対して必ず正解を返していました。
機械学習アプローチでは常に正解とは限りません。おおよそ正しい答えを返すのが機械学習です。
おおよそ正しい、というといいかげんそうですがどのくらいの精度で正しいかは統計的アプローチで説明することができます。
 
今回例として紹介したのは機械学習の中で『教師有り学習』というものです。この他に教師無し学習、強化学習などいろいろな学習タイプがありますが、どれもロジックをプログラムするのではなくデータを元に学習するという部分は同じです。
 
機械学習のアプローチでは必ず正しい答えを導くロジックがあるわけではなく、多くのデータから帰納的に「おそらく正しい」答えを導くので「帰納的アプローチ」とよんだりします。
 
 
 
 
 
 
 
 
 

ベイズ的な考え方

ベイズ的な考え方をクイズ番組の最終問題にありそうな設定でお話します。

『さて最終問題です。客席に座っている100名の観客から1名を選んでください。選んだ方が広島出身ならあなたに100万円を差し上げます。選ぶ前に観客のみなさんに一つだけ質問することができます。質問を考える手がかりとして観客の皆様に事前に行ったアンケート結果をお渡しします。さあ強運と頭脳でチャンスをつかんでください。』

 

質問しないで運に任せると (事前確率)

 アンケート情報によれば100名のうち10名が広島出身者、質問しないで運に任せて選ぶと当たる確率は10パーセント、くじ運わるいから厳しいか。。。

 

どんな質問をする? (尤度と事後確率)

質問を考えるためにアンケート情報をみているとこんなのを発見しました

  • 広島出身者の90パーセントが和食派

おー!広島出身者の90パーセントが和食派、ということは「あなたは和食派ですか?」と聞いて手を上げた人から選べば当たる確率あがる! ん、、、、なんか違うか。。

 

これは『広島出身者が和食派である』確率と『和食派が広島出身者である』確率を混同している例ですね。

「広島出身者の90パーセントが和食派」からわかるのは『広島出身者が和食派である』確率が高いということ。

「あなたは和食派ですか?」という質問で当選確率があがるのは『和食派が広島出身者である』確率が高い場合です。

 

「あなたは和食派ですか?」と質問すると当選確率はあがるのか?

「あなたは和食派ですか?」の質問が有効かを判断するためには追加で情報が必要です。アンケートを読んでいるとその情報を発見。

  • 他県出身者の90パーセントが和食派

広島県出身者も他県出身者も90パーセントが和食派、ということはこの質問をして挙手した人から選んでも確率は変わりません。図示するとこうなります。

f:id:kenshi18:20160225092219g:plain

*この質問に挙手する人は広島出身者の9名と他県出身者の81名で合計90名、ここから選んで広島出身者があたる確率は質問前と変わらず10パーセントです。

 

「あなたはカープファンですか?」で当選確率はあがるのか?

 アンケートを調べているともうひとつ情報を発見しました。

  • 広島出身者の70パーセントがカープファン
  • 他県出身者の10パーセントがカープファン

カープファンの確率は広島出身者の方が高い、ということはこの質問は有効です。図示するとこうなります。

f:id:kenshi18:20160225092320g:plain

*この質問に挙手する人は広島出身者の7名と他県出身者の9名で合計16名、ここから選んで広島出身者があたる確率は約 44パーセント、この質問は正解率あげるのに有効です。

 

ベイズ的な考え方

事前確率

質問する前の正解確率10パーセント (100名中10名が広島県人)を事前確率といい、式ではこう表します。

事後確率

質問した後の正解確率を事後確率といい、式ではこう表します。

尤度

広島出身者が和食派である確率、他県出身者が和食派である確率、広島県人カープファンである確率、他県人がカープファンである確率を尤度といい、式ではこう表します。

  1. P(和食派|広島県人) = 90%       広島出身者の90パーセントが和食派
  2. P(和食派|他県人) = 90%           他県出身者の90パーセントが和食派
  1. P(カープファン|広島県人) = 70%   広島出身者の70パーセントがカープファン
  2. P(カープファン|他県人) = 10%     他県出身者の10パーセントがカープファン

質問によって事後確率があがるのは1の確率が2の確率より高い場合です。

 

カープファンが広島県人である事後確率を求める式はこんなかんじ。これがベイズの定理です。

P(広島県人|カープファン) = P(カープファン|広島県人)  x P(広島県人) /P(カープファン) 

越境するITというタイトルについて

 このブログのタイトルは「越境するIT」です。このタイトルにしたのは、ITの適用範囲がここ数年でどんどん拡大してこれまでカバーしていなかった場所に "越境して" 進出している印象を持ったからです。越境後の世界で必要となる新しいITリテラシーをこれから記す3つのエリアで語ってみたい、という思いを込めて「越境するIT」を選びました。

 "越境の様子" を3つのエリアで表したのがこちらの図です。

f:id:kenshi18:20160310084313g:plain

      

 

それぞれ簡単に説明すると

データ ~構造化データから非構造化データへ~

これまでコンピューターは主に「構造化データ」を扱ってきました。ざっくりいうと "Excelのシートでまとめることができる、きちんと形式の決まったデータ" です。

しかし世の中見渡してみると「構造化データ」は全体の20%にすぎません。残りの80%は「非構造化データ」といわれるもの。ざっくりいうと つぶやき,メール内容、 画像、声など形式の決まっていないデータです。これを活用しない手はない、ということで非構造化データをコンピューターが処理できる形式にして活用しようというのが最近の流行です。

 

処理方法  ~演繹から帰納へ~

コンピューターはこれまで「論理的にやり方を説明できる」ものを実行することが得意でした。足し算、掛け算、会計の決算処理、その他色々。これらはそのやり方をプログラムとして作成し、それをコンピューターに実行させればOKです。この場合同じ入力に対して必ず同じ答えを出します。これを演繹的とか確定的とかいいます。

一方世の中を見渡すと私たちがやってる行動には「論理的にやり方を説明できない」けど無難にこなしているものが多くあります。人の顔を見て喜怒哀楽を判断したりするのも"判別の仕方を教えて"といわれても難しいですよね、もっと身近な例でいうと椅子っていろんな形のものがあるのにぱっと見て「あ、これは椅子だ」って判別できるのも"椅子を判別する論理的なロジックを教えて"といわれると言葉につまるのではないでしょうか?人間は「人の喜怒哀楽」、「これは椅子?」を過去の経験から学習して判断していると思われています。同じことをコンピューターにやらせようというのが『機械学習』といわれる分野です。機械学習では判断のロジックを埋め込むのではなく、判断の精度をあげる学習方法をロジックとして組み込んでいます。この方法だと常に正しい一定の答えを得るわけでは無く、人間と同じく間違えることもあります。経験から一般法則を導き出しておおよそ正しい結果を高い確率で出すことができるので帰納的といわれています。

目的 ~生産性から創造性へ~

コンピューターはこれまで主に生産性を上げるために使われてきました。

家計簿つけるのにそろばんと家計簿用のノートでやってると計算に時間かかるし間違いもする、検算してノートに書いて、でもやっぱり間違ってた!となると取消線でノート修正したり。これエクセルでやると段違いに効率が良くなり生産性が上がります。企業の決算にコンピューター使うのも基本的には同じ理由。

やるべき事のスピードを上げて生産性を高める、これまでコンピューターはこの分野で大きな活躍をしてきました。
 
コンピューターの活用範囲を生産性向上だけでなく、意思決定のような創造性を高めるために使えないかとという発想が出てきました。従来の構造化データを使って現状を把握して意思決定の助けにするのBIとよばれている分野はもともとありました。そこから進んでTwitterなど非構造化データを分析対象にすることでさらに活用範囲がひろがるのではないか、機械学習の活用で「明確にロジックを記述することのできない」ような意思決定を助けることができるのではないか?という期待が高まっています。
ただし最終的に意思決定を行うのは人間です。人間は判断するときに過去の経験(主観的直感的判断)とデータ(客観的論理的判断)を合わせて使います。まわりの環境が変わらない状況では「過去の経験」がすばやい意思決定を助けます。しかしまわりの環境が変化した時「過去の経験」が判断の邪魔をする場合があります。まわりの状況を見て主観と客観を冷静に使い分けることが大事です。
 
これからこのブログで3つの分野の詳細を綴っていきたいと思います。よろしくお願いします。
 

 

 

二つの確率

一言で確率と言いますが実は確率には2種類あります。

  • サイコロで偶数が出る確率 50パーセント
  • 太郎さんが大学に合格する確率 50パーセント
この二つ、どちらも確率 50パーセントと言ってますがよく考えると別物なんです。
 
サイコロで偶数が出る確率
サイコロを何回も何回も振る実験をしたら偶数が出る確率が50パーセントだった。
こういうふうに実験や論理的な観察で導き出された確率を「客観確率」といいます。
 
太郎さんが大学に合格する確率
こちらは太郎さんに何回も何回も受験させて確率を判断するわけにはいきません。こちらは模擬試験など客観的なデータや教師の過去の経験のような主観を元に「太郎さんが大学に合格する」と信じる度合いを数値で表しています。これを「主観確率」といいます。
 
ビジネスで意思決定をする際は、客観的データ、主観的な判断をミックスして数値を導き出し、意思決定の助けにすることができる主観確率を活用することができます。
 
 

色んな判断力

判断力といってもいろんなのがあるので、独断で区分けしてみました

 

  1. スポーツの判断力
  2. ビジネスの判断力
  3. 経済の判断力
  4. 自然科学の判断力

 

スポーツの判断力

一瞬で次のアクションを決める判断力、意識で考えるのでなく自然に体が動く判断力。

古い話ですが「プロ野球日本シリーズ最終戦で満塁一打逆転のピンチ、マウンドには江夏豊、投球に入ってからバッターがスクイズをしてくる気配を感じカーブの握りのままボールをウェストしてスクイズを防いだ」江夏の21球として語り継がれるこのお話。この意思決定は論理的に考えるのではなく気配を察知して瞬時の対応している、スポースの意思決定の代表的な例。

 

ビジネスの判断力

ビジネスでは限られた時間で入手できる情報と担当者の過去の経験を元に意思決定が行われる。

ビジネスの世界では適切なタイミングで適切な判断を下すことが最も重要。「さーてこの新製品投入しようか、どうしようか?」と1年も考えていたらまわりの環境が変わってしまってその製品自体の魅力がなくなってしまう可能性もある、迅速な判断ってのがビジネスに求められること。データという客観的な情報と担当者の経験という主観的な情報をミックスして意思決定がなされます。

 

経済の判断

経済も限られた時間で入手できる情報と担当者の過去の経験を元に施作が選択されるのはビジネスと一緒。大きく異なるのは、ビジネスが自分の組織、会社が幸せになることを考えるのに対して、経済は経済というシステム全体の最適化を考えるものであること。

 

自然科学

自然科学の分野ではどんなに時間がかかろうと客観的な情報で論理的に証明できる真理を見つけるのがお作法。

 

コンピューターは因数分解が苦手

コンピューターは因数分解が苦手です。正確に言うと、どんな高速なコンピューターでも「適当な時間内に桁数の多い数の因数分解を完了することが出来ません」
どうして?

(1)しらみ潰し
(2)倍々ゲーム

しらみ潰し
因数分解をやる効率的な方法は無くて一つ一つの候補を試していく、いわゆる「しらみ潰し的なやり方」をする必要があります。

倍々ゲーム
でも高速なコンピューターならしらみ潰しを高速にやってくれるのでは?と思いますが例えば
30桁の因数分解だと毎秒1兆回の演算をするコンピューターでも300億年かかってしまいます[1]
1桁増える毎に指数的にしらみ潰しの数が増えていく、こういう処理はさすがにコンピューターでも適切な時間内に処理を完了することが出来ないのです。

桁数の多い数の因数分解をするのには膨大な時間がかかりますが、いったん答えが分かればそれが正しいかどうかはすぐに計算出来ます。

コンピューターで使われている暗号化この性質を利用しています。

今話題になっている量子コンピューター因数分解を適切な時間で出来る可能性があります。
これが実現する頃にはコンピューターの暗号化方法も新しいものに変わっているでしょう。








猫を見分けるコンピューター

【コンピューターが100桁の掛け算してもニュースにならないが、幼稚園児が100桁の掛け算したらニュースになる。幼稚園児が猫と犬をを見分けてもニュースにならないが、猫と犬を見分けるコンピューターは結構すごい】

 

なんででしょうか?

 

「100桁の掛け算」はやり方を説明できますね。

「犬とと猫の見分け方」やり方説明しろと言われると困ってしまいますね。

 

コンピューターは「100桁の掛け算」のようにやり方を説明できるものを実行するのは得意です。そのやり方をプログラムにしてコンピューターに実行させればOKです。

一方「犬とと猫の見分け方」をコンピューターにやらせようとしてもやり方がうまく説明できないのででプログラムにすることが難しいです。ためしに犬と猫の見分けを文書で説明しようとして下さい。難しいですよね。

 

でも最近「コンピューターが猫を認識した」って話題になってました。これはどうやってるんでしょう?

すごく大雑把に言うと、猫を認識するやり方をプログラムにするのでなく、コンピューターに猫の写真をすっごい枚数見せて「猫か? 猫じゃないか?」 をコンピューターに学ばせているんです。

コンピューターに猫の写真を何枚も見せて1枚ごとに「正解」、「不正解」をコンピューターに教えてやるとコンピューターがその結果を元に学習して「この特徴なら前回正解だったものと近いから猫」ってかんじでだんだん賢くなっていくんです。

 

これが最近はやりの機械学習といわれてるものです。

 

学習させるためにたくさんの写真の一枚一枚を猫、猫じゃない、とラベル付けしておいてコンピューターに教えてあげる、これが『教師有り学習』といわれるもの。でもすーごくたくさんの写真に一枚一枚、猫、猫じゃない、とラベル付けしてたら大変ですよね。正解を教えずにコンピューターにパターンを認識させるのが『教師無し学習』といわれてるものです。

 

この場合も学習の方法は人間がプログラムとして作る必要があります。

 

最近コンピューターの適用範囲が拡大して、この例のような使い方をされるケースも増えてきています。こんな時代だから今一度コンピューターに出来ることを見直していきたいなと思ってます。

 

書きながら勉強しているので未熟な部分もあると思いますが何卒ご容赦を。