Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

If文から機械学習への道

110,662 views

Published on

機械学習とif文が地続きであることを解説しました。
ver.2 質問への回答を追加し、顧客価値の小問に図を追加してわかりやすくかみ砕きました。

Published in: Education
  • Great Content, Nice blog & need to see more. Regards, Dhvaj ReviewAdda.Com
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

If文から機械学習への道

  1. 1. if文から機械学習への道 2017-09-26 BPStudy#121 サイボウズラボ / BeProud技術顧問 理学博士 / 技術経営学修士 西尾泰和 ver.2 2017-09-29 公開
  2. 2. 機械学習って 今書いてるプログラムから 遠い世界だと思ってませんか? 2
  3. 3. このスライドの目的 みんなのよく知っているif文と機械学習の 橋渡しをすることで地続きにし、 実務で機械学習を使えるようにする。 また、機械学習のビジネス導入の進め方を 4ステップに分けて一歩一歩解説する。 3
  4. 4. if文 if(`条件`){ … } 4
  5. 5. if文の仕組み 条件がTrueの時に、 中身を実行 5
  6. 6. 条件が複数ある時 条件x1と条件x2の どちらかがTrueの時に 実行したいなら、どうする? 6
  7. 7. or if(x1 or x2){ … } 7
  8. 8. 条件が複数ある時 条件x1と条件x2の 両方がTrueの時に 実行したいなら、どうする? 8
  9. 9. and if(x1 and x2){ … } 9
  10. 10. 条件が複数ある時 条件x1, x2, x3の内、 2つ以上がTrueの時に 実行したいなら、どうする? 10
  11. 11. 複雑! if((x1 and x2) or (x1 and x3) or (x2 and x3)){ … } 11
  12. 12. 条件が複数ある時 条件x1, x2, …, x5の内、 3つ以上がTrueの時に 実行したいなら、どうする? 12
  13. 13. 複雑! if((x1 and x2 and x3) or (x1 and x2 and x4) or (x1 and x2 and x5) or…){ … } 13
  14. 14. もっと良い方法がある! 14
  15. 15. 真偽値を数値にする Trueを1、Falseを0に変換すると 「3つ以上がTrue」は 「足したら3以上」に変わる。 if((x1 + x2 + x3 + x4 + x5) >= 3){ … } 15
  16. 16. andもorも同じ形にできる x1 and x2 and x3 and x4 and x5 = 条件x1, x2, …, x5の、すべてがTrue = 足したら5以上 x1 or x2 or x3 or x4 or x5 = 条件x1, x2, …, x5の、どれかがTrue = 足したら1以上 16
  17. 17. andもorも同じ形にできる 条件x1, x2, …, x5の、すべてがTrue (x1 + x2 + x3 + x4 + x5) >= 5 条件x1, x2, …, x5のうち3つ以上True (x1 + x2 + x3 + x4 + x5) >= 3 条件x1, x2, …, x5の、どれかがTrue (x1 + x2 + x3 + x4 + x5) >= 1 17
  18. 18. 右辺をそろえてみる 条件x1, x2, …, x5の、すべてがTrue(弱い) ( 𝟏 𝟓 * x1 + …) >= 1 条件x1, x2, …, x5のうち3つ以上True ( 𝟏 𝟑 * x1 + …) >= 1 条件x1, x2, …, x5の、どれかがTrue(強い) (1 * x1 + …) >= 1 18
  19. 19. 強さ=重み 条件の「強さ」のようなものが 係数(重み)の大きさで表現される。 19
  20. 20. 問 条件x1, x2, …, x5の、すべてがTrueまたは 条件x6, x7, …, x10のうち3つ以上Trueまたは 条件x11, x12, …, x15の、どれかがTrue を表現するにはどうすればよい? 20
  21. 21. 重みは条件ごとに異なってもよい 𝟏 𝟓 * x1 + … + 𝟏 𝟑 * x6 + … + 1 * x11 + … >= 1 21
  22. 22. 重み付き和の方法 真偽値のTrueを1、Falseを0にし、 条件の強さを重みにして掛け合わせ、 足し合わせることによって andやorの組み合わせでは苦労するような 複雑な条件を記述することができる。 22 否定が負の重みで実現できることと、xorが表現できないことは割愛
  23. 23. 重みはどうやって調整する? 1: 今やったみたいに人間が決める 2: 大量のデータを元に機械が決める=機械学習 23
  24. 24. 具体的なコード 今回の内容はロジスティック回帰を使って 学習できる。 from sklearn.linear_model import LogisticRegression ってやって fit(X, y)を呼べば重みが自動調整されて predict(X)を呼べば重み付き和を計算して 判断してくれる。楽ちん。 24 ロジスティック回帰についてくわしく知りたい人は、 サイボウズラボの中谷秀洋さんが技術評論社のサイトで連載しているのがおススメ http://gihyo.jp/dev/serial/01/machine-learning/0018
  25. 25. まとめ 複雑な条件はand/orで書くのが大変。 重み付き和で置きかえると楽になる。 重みはデータが十分あれば 機械学習で決められる。 今回説明した程度のことは scikit-learnを使えば数行でできる。 25
  26. 26. ここまで 機械学習の技術 ここから 機械学習のビジネス 4つのステップ 26
  27. 27. アカデミアとビジネスの違い アカデミア • データが公開されている • 枯れた技術はとっくの昔に調査済み • 新しい手法を考案して精度を競い合う ビジネス • データが公開されてない 27 枯れた技術を使う
  28. 28. ビジネスの目的 顧客価値 28 新規性ではない
  29. 29. 顧客価値を体感するための小問 ある宝石の原石は、割ると1/2の確率で宝石が 入っていて2万円で売れる。原石は1つ9500円で 買える。原石は硬いので1日に20個しか割れない Q1: 1日に稼げる収益の期待値はいくらか 29
  30. 30. A1 収益の期待値 A1: 1/2の確率で20000円手に入るので、 1個あたりの収入の期待値は10000円。 1個あたりの仕入れ価格は9500なので、 1個あたりの収益は500円。 1日に20個処理できるので、 1日あたりの収益は10000円。 30
  31. 31. Q2 加工速度二倍の装置 Q2: 原石を人間の2倍の速度で割る機械を手に入 れたとする。つまり、1日に割ることができる原 石の数が20個から40個に増えたとする。 収益の期待値はいくら増えるか? 31
  32. 32. A2 加工速度二倍の装置 A2: 原石1個あたり500円の利益なのは変わらない。 1日に処理できる量が20個から40個に増える。 20個増えるので、利益は1万円増える。 32
  33. 33. Q3 60%の識別器 Q3: 60%の確率で宝石の入った原石を当てる識別 器*が買えるとする。 収益の期待値はいくら増えるか? 33 * 原石を買う前に使うことで「60%の確率で宝石が入っている原石」を9500円で手 に入れられるようになるとします。お店の人が嫌がりそう、という点は今回は気に ません。またQ2の機械は手に入っておらず、1日に割れる数は20個のままとします。
  34. 34. A3: 60%の識別器 60%の確率で20000円手に入るので、 1個あたりの収入の期待値は12000円。 1個あたりの仕入れ価格は9500円なので、 1個あたりの収益は2500円。 1日に20個処理できるので1日あたりの収益は 5万円。4万円増える。 34
  35. 35. つまり この問題設定では、 「加工速度を2倍にする装置」は 顧客の利益を1万円増やし、 「精度60%の識別器」は 顧客の利益を4万円増やす。 35
  36. 36. 教訓 この問題設定では、 「精度60%の識別器」が 「加工速度を2倍にする装置」の 4倍の顧客価値を持っている。 どの程度の精度でどの程度の顧客価値を 生み出すことができるかは ビジネス要件によって決まる。 36 精度は必ずしも重要ではない
  37. 37. ビジネス要件 精度を高めようと考える前に、 まず顧客が何を求めているか、 どういう制約条件があるのかを 明確化する必要がある。 最新の論文に書かれた手法を実装しても、 その手法が要求する量のデータを 顧客が用意できないのであれば、 その実装は顧客価値を持たない。 37
  38. 38. 顧客は専門家ではない 多くの場合顧客は機械学習の専門家ではないので 必要な精度も、満たすべき制約条件も、 明確に言語化することができない。 なので、これを高速に学び取ることが必要。 38
  39. 39. Minimum Viable Product ITベンチャー経営の方法論 「リーン・スタートアップ」で提唱された 考え方。ベンチャーは資金に限りがあるので 素早く顧客ニーズを理解しなければならない。 そこで、最小限のコストで雑な製品を作り、 それを実際に顧客に見せてみることで、 顧客のニーズがどこにあるのかを探る。 39
  40. 40. 最小限の実装=実装しない 「コンシェルジュ型MVP」と呼ばれる 40
  41. 41. ステップ1 人間がやると想定して次の質問に答えよう (1) 顧客は何がどうなると嬉しいのか (2) それを人間がやるならどうやってやるか (既にやっている人間がいるのか?いないのか?) 41
  42. 42. (2)人間がどうやってやるか 既にやっている人がいる、または、 やり方はわかる。 しかし時間や労力が掛かりすぎる。 → チャンス!機械化で時間や労力を減らすこと が顧客価値になる! 42
  43. 43. (2)人間がどうやってやるか 顧客側などでやっている人がいる、しかし、 自分はやり方がわからない。 → 何か重要な情報の伝達漏れが発生している。 43
  44. 44. (2)人間がどうやってやるか 人間がやる方法を、顧客も自分もわからない → そもそも無茶なことを妄想している可能性。 44
  45. 45. 例: スパムフィルタ Q1 顧客は何がどうなると嬉しいのか A1 顧客はメールボックスにスパムメールがたく さんあって困っている、スパムがなくなるとうれ しい Q2 それを人間がやるならどうやってやるか A2 メールの本文を見て、スパムかどうか判定し て、スパムは別のフォルダに移動する 45
  46. 46. ステップ2 人間を箱に入れる。 この箱には電子データしか出し入れできない。 (リモートワークと考えてもよい) 46
  47. 47. ステップ2 (3) 人間が(2)をするために、箱にどんなデータを 入れるのか? (4) 人間が(2)をすることで、箱からどんな出力 データが出てくるのか? 47
  48. 48. ステップ2 (5) 入力データ(3)はどうやって入手するのか? (最初の一歩と継続的にやる方法) (6) 出力データ(4)をどうやって顧客価値(1)につな げるのか? 48
  49. 49. 答える順番は問わない この4つの質問の答える順番は問わない。 例1: 顧客に~をするために(6)、~を出力する(4)、 そのため入力~を入れる(3)、これをどうやって 入手しようか?(5) 例2: 今~データが入手できている(5, 3) ここから顧客価値を生むにはどうするか?(6) そのためにはどういう出力が必要か?(4) 49
  50. 50. 例: スパムフィルタ >Q2 それを人間がやるならどうやってやるか >A2 人間がやるなら、メールの本文を見て、ス パムかどうか判定して、スパムは別のフォルダに 移動する Q3 人間が(2) するために、どんなデータを入れる 必要があるか? A3 メールの本文の情報が必要。タイトルや送信 者も貰えるなら貰いたい 50
  51. 51. 例: スパムフィルタ Q4 人間が(2)をすることで、箱からどんな出力 データが出てくるのか? A4 各メールに対して「スパムである、スパムで ない」のラベルを出力 51
  52. 52. 例: スパムフィルタ Q5 入力データ(3)はどうやって入手するのか? A5 最初の一歩としてはとりあえずメールをエク スポートしてもらえれば。 継続的にやるにはメーラからデータを取る方法を 作るか、メールサーバの側に手を加えるかが必要 そう。 52
  53. 53. 例: スパムフィルタ Q6 出力データ(4)をどうやって顧客価値(1)につな げるのか? A6 スパムである/ないのラベルを見て、メールを 振り分けする 53
  54. 54. アルバイト (7) 箱の中の人が、まったく知識のないアルバイ トだとしたら、どんなマニュアルを用意する必要 があるか? これを考えておくと次のステップが楽になる。 54
  55. 55. ステップ3 ステップ1: 人間がやる ステップ2: 箱の中の人間がやる ステップ3: 箱の中の機械がやる 箱の中の人をコンピュータに置き換える。 55
  56. 56. 最初のプログラム (8) 箱の中のコンピュータが(2)をするためのプロ グラムを書く 完璧である必要はない 高度なアルゴリズムである必要はない 精度は低くてよい 「とりあえず動く」ぐらいでよい 56
  57. 57. 実行してみて顧客に見せる (9) プログラム(8)に実際にデータを入れて振る舞 いを観察する。(精度はどう?速度は?) (10) 顧客はこれで満足する? 57
  58. 58. 顧客に見せるのが怖い? 精度が出ていないのに顧客に見せるのは怖い? しかし顧客が何を重視するかは顧客にしかわから ない。低品質だと顧客に言われたとしても、それ は顧客が何を重視するかを知るチャンスになる。 58 see 「リーン・スタートアップ」
  59. 59. 顧客が満足しないなら (11) どう満足しないのか具体的不満を収集する (どういう入力の時にはどういう出力が出てほしいのか? これを教師データという) 59
  60. 60. ステップ4 ようやく機械学習! (12) 教師データ(11)を使って学習をする 60
  61. 61. 科学的方法論 教師データが充実すると、アルゴリズムの良し悪 しが定量的に測れるようになる。 (教師データの一部を検証用のデータに使う) 機械学習にしたからと言ってよくなるとは限らな いのでプログラム(8)とキチンと比較する。 仮説・実験・検証・修正のサイクルを回す。 (PDCAサイクル/科学的方法論) サイクルを回して改善していく。 61
  62. 62. 改善の具体的方法 「現時点のアルゴリズムが正しく分類できてない データ」を抽出して眺め、それらを正しく分類す るためにはどうすれば良いかを考える。 (特徴量の追加など) ロジスティック回帰などの「判断の自信」を返し てくれるアルゴリズムなら、「自信のない結果」 を見て教師データの追加を行う。 (能動学習) 62
  63. 63. 間違えないように何度も言う ビジネス上重要なのは顧客価値。精度ではない。 例え精度が99%でも、間違う1%が顧客にとって致命的なら、精度 60%でその間違いをしないプログラムの方が顧客価値が高い。 63
  64. 64. まとめ • ビジネスでは顧客価値が重要 • 顧客もあなたも何が顧客価値か 正確に理解していない • 素早く理解するために最小限の工数で 実験を繰り返す(Minimum Viable Prodict) • 実験によって不満点や顧客価値が 徐々に具体化されていく • 改善を繰り返して顧客価値を増やしていく 64
  65. 65. 以下補足と質問・回答 65
  66. 66. 補足 これは「顧客の要求が明瞭でない、仕様書がない 状態でのソフトウェア開発」に似ている。 違う点は、顧客が不満な場合に「ソフトウェアを 作り直す」ではなく「学習データにその情報を追 加」で解決できる可能性があるところ。 とはいえ常にデータで解決できるわけではないの で、やはり最小限の実装で実験するのは大事。 66
  67. 67. 補足: バッドパターン 67 これを避けるためにも 実験を繰り返せる形に することが大事
  68. 68. Q&A マニュアル書き (7)と(8)についての質問: “アルバイトのためのマニュアルが書けるなら プログラムも書けるはずでは” はい。「アルバイトのためのマニュアルが書けな いぐらい仕様が曖昧だったらプログラムを書くの は無理だよね」が言いたいことでした。 「マニュアルをどう書くか?」を考えることで まだ言語化されていないものに気付き、 言語化が促されるのです。(次ページに具体例) 68
  69. 69. 例: スパムフィルタ 実現したいこと: >(2)“メールの本文を見て、スパムかどうか判定し、ス パムは別のフォルダに移動する” あなた「本文を見てスパムかどうか判断して」 バイト「どうやって判断するんですか~?」 あなた「例えば○○って単語が入ってたらスパム」 気付き: 最初の一歩のプログラム(8)を「NGキー ワードが含まれてるか判定」にしたらよい 69 補足の補足: アルバイト向けマニュアルの作成は「最初のプアなプログラム」を書く上 での助けになることが目的なので、さらさらプログラムを書けるなら飛ばしてもよい。
  70. 70. 工数 Q: どれくらいの工数がかかると思えばいいか? A: ケースバイケース。例えば枯れた技術、ロジ スティック回帰にデータを入れてみて、サクッと 精度が出て顧客から一発OKもらえることもある し、逆にぜんぜんダメということもある。「実 験」するしかない。 工数を見積もることは困難なので、決まった時間 で成果を確約するような契約を結ぶのは危険。 70
  71. 71. 精度 Q: 顧客に精度保証を求められたら A: 「どのくらいの精度になるかは実験してみな いとわからない」ということを顧客との共通認識 にしていく必要がある。 精度を確約するのではなく「良いものができるか もしれない試行錯誤」に対してお支払いを頂く形 の契約が良い。 なるべく小さい単位で実験をして顧客とのコミュ ニケーションを密にしていく必要がある。 71
  72. 72. 判断のコストと精度 機械は24時間働かせても疲れないし 労基署に怒られることもない。 精度は必ずしも高くない*が、 コストの低下でビジネス上の価値が生まれる。 72 (* 頑張り次第)
  73. 73. Deep Learning Q: “人間が条件を明確化できてなくても Deep Learningなら自動でできるのでは?” A: 半分正しい。画像処理の分野では、例えば100x100の モノクロ画像でも「入力の値が10000個ある」という 辛い状態になる。こういう入力をうまく扱おうと 専門家が何十年もの間、色々な条件を考案してきた。 畳みこみを繰り返す特殊な形のニューラルネットを作っ て、大量のデータで学習してみたら、意外なことに 専門家が工夫して実装したものより良い精度が出た。 これが正しい半分。正しくない半分は次のページ。 73
  74. 74. Deep Learning この成功によりDeep Leaningに注目が集まり 文脈を抜かして「Deep Learningを使うと人間より精度 の高い判断をするプログラムが作れる」 と伝言ゲームがゆがむ。 その結果、全然違う条件の問題に対して 「これもDeep Learningでなんとかなるのでは」 と考える人が増えた。 問題条件が変われば手法の有効性も変わるので、 基本は「枯れた手法から順に小さい実験を繰り返す」 しかない。 74
  75. 75. 能動学習 Q: ナイーブベイズよりもロジスティック回帰で 能動学習した方がいいか? A: ナイーブベイズもロジスティック回帰同様に 信頼度を出せる手法なので、ナイーブベイズで能 動学習したらいい。 補足: 今回は割愛したけども、ロジスティック回 帰もナイーブベイズも「確率モデル」であって、 「この入力がクラス1になる確率は0.8だな~」み たいな出力を出すモデルです。これをこの発表で は「判断の自信」って表現していました。 75
  76. 76. 微分 Twitterの感想「行列も微分も出てこない」 機械が重みを調整する時に「正解とのずれが小さ くなる方向に重みをちょっと変更しよう」ってや るのだけども、 これを数学語で言うと「『正解とのずれ』を重み で微分して勾配を求め、勾配方向に重みをちょっ と変更しよう」になるわけです。 76
  77. 77. 行列 ロジスティック回帰では、 例えば条件が15個あったら 「重み」という値が15個できる。 これを数学語で言うと「ベクトル」になる。 ニューラルネットはロジスティック回帰的なもの が複数個集まってるので、仮に10個集まってる としたら15x10個の値ができる。 これを数学語で言えば「行列」になる。 77
  78. 78. あいまいな判断 「P21は、例えばx1,x2,x3,x4,x6がTrueだと17/15になり、 Trueになる。数学的には正しくない」 そう、そこが重要なところ(強調し忘れました) 元の式と、重み付き和の式は等価ではない。 しかし機械学習を使おうという時、どういう条件式なら 顧客価値が生み出されるかがそもそもわかっていない。 なので「元式と等価であること」には顧客価値がない。 論理的にきちんと記述することを手放して、 雑であいまいな条件式で表現し、それがちゃんと機能す るかどうかは、論理ではなく実データでのテストで担保 する。これが機械学習の基本的スタンス。 78
  79. 79. 補足(宣伝) 「データを観察することが大事」 と明記・強調することを忘れていました。 僕が監修したPyQの「はじめての機械学習」では データを観察してif文を作るところから ロジスティック回帰までを 小さいステップで一歩一歩解説しています 機械学習の基本をif文から学ぼう しきい値を見つけよう 可視化してしきい値を見つける しきい値が決められないデータの扱い方 2次元のデータから分類 2次元データをプロット 1次方程式を用いた分類 はじめての機械学習:ロジスティック回帰 79

×