Upgrade to Pro — share decks privately, control downloads, hide ads and more …

目に見えるパーセプトロン

けんご
August 19, 2015

 目に見えるパーセプトロン

けんご

August 19, 2015
Tweet

More Decks by けんご

Other Decks in Technology

Transcript

  1. 2015.08.19
    @tkengo
    目に見える
    パーセプトロン

    View Slide

  2. 分類対象
    I

    View Slide

  3. 素性関数
    I
    (
    I
    ) = (
    x1, x2,
    · · ·
    , xn) =
    x
    分類対象

    View Slide

  4. 素性関数
    重み
    I
    w = (w1, w2, · · · , wn)
    (
    I
    ) = (
    x1, x2,
    · · ·
    , xn) =
    x
    分類対象

    View Slide

  5. 素性関数
    重み
    識別関数
    I
    w = (w1, w2, · · · , wn)
    (
    I
    ) = (
    x1, x2,
    · · ·
    , xn) =
    x
    f
    (
    x
    ) =
    w
    ·
    x
    =
    n
    X
    i=1
    wixi
    分類対象

    View Slide

  6. f
    (
    x
    ) =
    w
    ·
    x
    =
    n
    X
    i=1
    wixi
    (
    I
    ) = (
    x1, x2,
    · · ·
    , xn) =
    x
    素性関数
    重み
    識別関数
    I
    w = (w1, w2, · · · , wn)
    分類対象

    View Slide

  7. 仕切り直し

    View Slide

  8. 機械学習

    View Slide

  9. ある程度の数のサンプルデータ集合を入力して解析
    を行い、そのデータから有用な規則、ルール、知識
    表現、判断基準などを抽出する
    機械学習とは
    by Wikipedia

    View Slide

  10. ある程度の数のサンプルデータ集合を入力して解析
    を行い、そのデータから有用な規則、ルール、知識
    表現、判断基準などを抽出する
    機械学習とは
    by Wikipedia

    View Slide

  11. 有用な規則、ルール
    知識表現、判断基準
    とは?

    View Slide

  12. 例:メールのスパム判定

    View Slide

  13. 例:メールのスパム判定
    スパム判定するための明確な判断基準(ルール)があるわけではない

    View Slide

  14. 例:メールのスパム判定
    ・「無料」「金儲け」「請求」等の単語が含まれているとスパムっぽい?
    ・それぞれの単語って実際どの程度スパムっぽいのだろうか?
    ・「無料」より「金儲け」という単語が入っていた方がスパムっぽい?
    ・一般的なビジネスメールにも「請求」って含まれることもあるよね?
    ・メールの文脈、つまり単語の前後にある単語も見る必要がある?
    ・すると、単語の繋がり方によってスパム率も変わってくる?
    ・「無料でお試し」より「無料で金儲け」の方がスパムっぽい?
    スパム判定するための明確な判断基準(ルール)があるわけではない

    View Slide

  15. 例:メールのスパム判定
    スパム判定するための明確な判断基準(ルール)があるわけではない
    ・「無料」「金儲け」「請求」等の単語が含まれているとスパムっぽい?
    ・それぞれの単語って実際どの程度スパムっぽいのだろうか?
    ・「無料」より「金儲け」という単語が入っていた方がスパムっぽい?
    ・一般的なビジネスメールにも「請求」って含まれることもあるよね?
    ・メールの文脈、つまり単語の前後にある単語も見る必要がある?
    ・すると、単語の繋がり方によってスパム率も変わってくる?
    ・「無料でお試し」より「無料で金儲け」の方がスパムっぽい?
    パラメータが多すぎ、判断基準(ルール)を定義できない

    View Slide

  16. 機械学習とは
    by Wikipedia
    ある程度の数のサンプルデータ集合を入力して解析
    を行い、そのデータから有用な規則、ルール、知識
    表現、判断基準などを抽出する

    View Slide

  17. ある程度の数のサンプルデータ集合を入力して解析
    を行い、そのデータから有用な規則、ルール、知識
    表現、判断基準などを抽出する
    ※サンプルデータの用意は多くの場合、人間の仕事
     このメールはスパムなのでラベル”1”
     このメールはスパムではないのでラベル”-1”
     とか...
    実際のメール本文
    と正解ラベル
    「学習用データ」と
    呼んだりする

    View Slide

  18. ある程度の数のサンプルデータ集合を入力して解析
    を行い、そのデータから有用な規則、ルール、知識
    表現、判断基準などを抽出する
    このことを
    「学習」と呼ぶ
    ※サンプルデータの用意は多くの場合、人間の仕事
     このメールはスパムなのでラベル”1”
     このメールはスパムではないのでラベル”-1”
     とか...
    実際のメール本文
    と正解ラベル
    「学習用データ」と
    呼んだりする

    View Slide

  19. ある程度の数のサンプルデータ集合を入力して解析
    を行い、そのデータから有用な規則、ルール、知識
    表現、判断基準などを抽出する
    このことを
    「学習」と呼ぶ
    メールが本当に
    スパムかどうかを
    判断するためのルール
    ※どの単語が、どれくらいの割合で
     どの単語の後にどの単語がきて
     とか...
    実際のメール本文
    と正解ラベル
    「学習用データ」と
    呼んだりする
    ※サンプルデータの用意は多くの場合、人間の仕事
     このメールはスパムなのでラベル”1”
     このメールはスパムではないのでラベル”-1”
     とか...

    View Slide

  20. 機械学習の種類

    View Slide

  21. 機械学習
    識別関数
    パーセプトロン
    SVM
    CRF
    識別モデル
    ナイーブベイズ
    ガウス混合モデル
    生成モデル
    機械学習と一口に言ってもいくつか分類があって、それぞれ学習の
    仕方や理論が違う
    機械学習の種類

    View Slide

  22. 機械学習
    識別関数
    パーセプトロン
    SVM
    CRF
    識別モデル
    ナイーブベイズ
    ガウス混合モデル
    生成モデル
    機械学習と一口に言ってもいくつか分類があって、それぞれ学習の
    仕方や理論が違う
    機械学習の種類

    View Slide

  23. 機械学習と一口に言ってもいくつか分類があって、それぞれ学習の
    仕方や理論が違う
    この資料では機械学習の中で最も単純な識別関数について、さらに
    その中でも最も単純なパーセプトロンについて、その仕組みと学習
    の仕方を見ていきます。
    機械学習の種類

    View Slide

  24. パーセプトロン

    View Slide

  25. パーセプトロン
    •フランク・ローゼンブラットさんという人が提唱。

    View Slide

  26. パーセプトロン
    •フランク・ローゼンブラットさんという人が提唱。
    視覚と脳の機能をモデル化
    してパターン認識したる

    View Slide

  27. パーセプトロン
    •フランク・ローゼンブラットさんという人が提唱。
    視覚と脳の機能をモデル化
    してパターン認識したる
    •単層パーセプトロンと多層パーセプトロンがある。
    •今回は最も単純な単層パーセプトロンのお話。
    •主に二値分類に使われる。例:
    • メールがスパムか、スパムじゃないか
    • 画像にリンゴが含まれるか、含まれないか

    View Slide

  28. 分類の仕組み

    View Slide

  29. 分類の仕組み
    •分類対象データからなんとかして素性をベクトルとして抽出。
    •素性の抽出の仕方はいろいろ。自分で考えなきゃいけない。
    • 分類対象がメール(テキスト)であれば各単語の出現頻度とか。
    • 分類対象が画像であればピクセル列のRGB値とか。色の濃淡とか。
    •素性を抽出するための関数を素性関数と呼ぶ。

    View Slide

  30. (
    I
    ) = (
    x1, x2,
    · · ·
    , xn) =
    x
    最初にでてきたコレ!
    分類の仕組み
    •分類対象データからなんとかして素性をベクトルとして抽出。
    •素性の抽出の仕方はいろいろ。自分で考えなきゃいけない。
    • 分類対象がメール(テキスト)であれば各単語の出現頻度とか。
    • 分類対象が画像であればピクセル列のRGB値とか。色の濃淡とか。
    •素性を抽出するための関数を素性関数と呼ぶ。

    View Slide

  31. public ArrayList extractFeature(Object data) {
    ArrayList feature = new ArrayList<>();
    // dataから素性を抽出する処理
    return feature;
    }
    数式に馴染みがないならコードを思い浮かべてもおk
    分類の仕組み
    •分類対象データからなんとかして素性をベクトルとして抽出。
    •素性の抽出の仕方はいろいろ。自分で考えなきゃいけない。
    • 分類対象がメール(テキスト)であれば各単語の出現頻度とか。
    • 分類対象が画像であればピクセル列のRGB値とか。色の濃淡とか。
    •素性を抽出するための関数を素性関数と呼ぶ。

    View Slide

  32. •たとえばこんな素性関数があったら。
    // まったく実用的ではない超適当な素性関数
    public ArrayList extractFeature(Object data) {
    ArrayList feature = new ArrayList<>();
    feature.add(data.hashCode() * 1 % 10 - 5);
    feature.add(data.hashCode() * 2 % 10 - 5);
    return feature;
    }
    分類の仕組み

    View Slide

  33. •たとえばこんな素性関数があったら。
    •学習用データを与えると二次元のベクトルが吐かれる。
    extractFeature(data1) → ( 1, 2) =
    extractFeature(data2) → ( 3, 2) =
    extractFeature(data3) → (-2, -4) =
    extractFeature(data4) → (-2, -2) =
    ...
    x1
    x2
    x3
    x4
    分類の仕組み
    // まったく実用的ではない超適当な素性関数
    public ArrayList extractFeature(Object data) {
    ArrayList feature = new ArrayList<>();
    feature.add(data.hashCode() * 1 % 10 - 5);
    feature.add(data.hashCode() * 2 % 10 - 5);
    return feature;
    }

    View Slide

  34. •たくさん得られた二次元ベクトルを平面にプロットしてみる。
    x
    y
    分類の仕組み
    この点ひとつひとつが学習用データ
    から抽出した素性ベクトル

    View Slide

  35. •たくさん得られた二次元ベクトルを平面にプロットしてみる。
    •どうもこんな風に線が引けそう。
    x
    y
    分類の仕組み

    View Slide

  36. •たくさん得られた二次元ベクトルを平面にプロットしてみる。
    •どうもこんな風に線が引けそう。
    x
    y
    分類の仕組み
    こっち側はクラスA
    こっち側はクラスB

    View Slide

  37. •たくさん得られた二次元ベクトルを平面にプロットしてみる。
    •どうもこんな風に線が引けそう。
    x
    y
    分類の仕組み
    こっち側はクラスA
    こっち側はクラスB
    未知のデータXの素性を
    抽出したらこの辺だった。
    クラスはAとBどっち?

    View Slide

  38. •たくさん得られた二次元ベクトルを平面にプロットしてみる。
    •どうもこんな風に線が引けそう。
    x
    y
    分類の仕組み
    こっち側はクラスA
    こっち側はクラスB
    線のこっち側なので
    クラスAに属するとわかる

    View Slide

  39. •たくさん得られた二次元ベクトルを平面にプロットしてみる。
    •どうもこんな風に線が引けそう。
    x
    y
    分類の仕組み
    こっち側はクラスA
    こっち側はクラスB
    今度は未知のデータYの
    素性を抽出すると
    この辺だった。
    クラスはA?B?

    View Slide

  40. •たくさん得られた二次元ベクトルを平面にプロットしてみる。
    •どうもこんな風に線が引けそう。
    x
    y
    分類の仕組み
    こっち側はクラスA
    こっち側はクラスB
    線のこっち側なので
    クラスBと分かる。

    View Slide

  41. •どうやって新しい点が線の向こう側かこっち側か判断するか?
    x
    y
    分類の仕組み
    こっち側はクラスA
    こっち側はクラスB

    View Slide

  42. •どうやって新しい点が線の向こう側かこっち側か判断するか?
    •ベクトルの内積を使う。
    x
    y
    分類の仕組み
    こっち側はクラスA
    こっち側はクラスB

    View Slide

  43. •実は最初に引いた赤い線は重みベクトルを法線とする直線。
    x
    y
    分類の仕組み
    こっち側はクラスA
    こっち側はクラスB
    重みベクトルw

    View Slide

  44. •実は最初に引いた赤い線は重みベクトルを法線とする直線。
    •重みベクトルと素性ベクトルの内積 a を取って以下の通り分類。
    • クラスA if a >= 0
    • クラスB if a < 0
    x
    y
    分類の仕組み
    こっち側はクラスA
    こっち側はクラスB
    重みベクトルw

    View Slide

  45. •法線ベクトルとは線に垂直なベクトルのこと。
    x
    y
    ※補足 法線と内積
    y = 0.5x の法線

    View Slide

  46. •法線ベクトルとは線に垂直なベクトルのこと。
    x
    y
    ※補足 法線と内積
    y = 0.5x の法線
    y = x の法線

    View Slide

  47. •法線ベクトルとは線に垂直なベクトルのこと。
    x
    y
    ※補足 法線と内積
    y = 0.5x の法線
    y = x の法線
    y = 2x の法線

    View Slide

  48. •簡単に言うと内積とはベクトルがどれだけ似ているか?の指標。
    •似ているほど値が大きい。
    •似ていないほど値が小さい。
    x
    y
    ※補足 法線と内積
    ベクトルb
    ベクトルa
    a · b =
    1
    p
    2
    = 0.707106
    ベクトルが似てるので正の数。

    View Slide

  49. x
    y
    ※補足 法線と内積
    ベクトルb
    ベクトルa
    a · b = 0
    ベクトルが似てるか似てない
    かわからない(直角)。こんな
    時の内積は0。
    •簡単に言うと内積とはベクトルがどれだけ似ているか?の指標。
    •似ているほど値が大きい。
    •似ていないほど値が小さい。

    View Slide

  50. x
    y
    ※補足 法線と内積
    ベクトルb
    ベクトルa
    まあまあ離れてきた。向きも
    違うし負の数。
    a · b =
    1
    p
    2
    = 0.707106
    •簡単に言うと内積とはベクトルがどれだけ似ているか?の指標。
    •似ているほど値が大きい。
    •似ていないほど値が小さい。

    View Slide

  51. x
    y
    ※補足 法線と内積
    ベクトルb
    ベクトルa
    反対向いちゃった。全然似て
    ないのでさっきより小さい負
    の数。
    a · b = 1
    •簡単に言うと内積とはベクトルがどれだけ似ているか?の指標。
    •似ているほど値が大きい。
    •似ていないほど値が小さい。

    View Slide

  52. •実は最初に引いた赤い線は重みベクトルを法線とする直線。
    •重みベクトルと素性ベクトルの内積 a を取って以下の通り分類。
    • クラスA if a >= 0
    • クラスB if a < 0
    x
    y
    分類の仕組み
    重みベクトルw
    素性ベクトルx
    w
    ·
    x
    0
    すなわちxはクラスA

    View Slide

  53. •実は最初に引いた赤い線は重みベクトルを法線とする直線。
    •重みベクトルと素性ベクトルの内積 a を取って以下の通り分類。
    • クラスA if a >= 0
    • クラスB if a < 0
    x
    y
    分類の仕組み
    重みベクトルw
    素性ベクトルy
    すなわちyはクラスB
    w · y  0

    View Slide

  54. 分類の仕組み
    •このようにデータを分類する役割の関数を識別関数と言う。
    •パーセプトロンにおいては識別関数 f(x) はベクトルの内積。

    View Slide

  55. •このようにデータを分類する役割の関数を識別関数と言う。
    •パーセプトロンにおいては識別関数 f(x) はベクトルの内積。
    分類の仕組み
    最初にでてきたコレ!
    f
    (
    x
    ) =
    w
    ·
    x
    =
    n
    X
    i=1
    wixi

    View Slide

  56. •このようにデータを分類する役割の関数を識別関数と言う。
    •パーセプトロンにおいては識別関数 f(x) はベクトルの内積。
    分類の仕組み
    数式に馴染みがないならコードを思い浮かべてもおk
    public float dot(ArrayList v1, ArrayList v2) {
    float result = 0f;
    for (int i = 0; i < v1.size(); i++) {
    result += v1.get(i) * v2.get(i);
    }
    return result;
    }

    View Slide

  57. 学習の仕組み

    View Slide

  58. •パーセプトロンにおける学習とは、最初に引いた赤い線を求めるこ
    と。
    x
    y
    学習の仕組み
    コレ

    View Slide

  59. •パーセプトロンにおける学習とは、最初に引いた赤い線を求めるこ
    と。
    •学習には学習用データとそれに対応する正解ラベルの組の配列を用
    意する。たとえば
    • スパムメールを集めてくる。それぞれの正解ラベルは”1”(スパムである)。
    • ビジネスメールを集めてくる。それぞれの正解ラベルは”-1”(スパムではない)。
    •学習用データはパーセプトロンの分類精度に直接関わってくるの
    で、質も量も大事。
    学習の仕組み

    View Slide

  60. •図解。
    x
    y
    学習の仕組み
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1

    View Slide

  61. •図解。
    x
    y
    学習の仕組み
    最初は重みベクトルはまったくわからないので
    とりあえずランダムに決めておく
    w
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1

    View Slide

  62. x
    y
    学習の仕組み
    x
    1つ目の学習データから抽出した
    素性がこの辺だったとする。
    この素性の正解ラベルは”1”。
    w
    •図解。
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1

    View Slide

  63. x
    y
    学習の仕組み
    x
    この素性を識別関数に通すと、wとx
    の内積は正なので”1”が返ってくる。
    w
    w
    ·
    x
    0
    •図解。
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1

    View Slide

  64. x
    y
    学習の仕組み
    x
    よって正解ラベルと識別関数が返し
    たラベルが一致しているので重みの
    更新はしない。
    w
    •図解。
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1

    View Slide

  65. x
    y
    学習の仕組み
    y
    次に2つ目の学習データから素性を
    抽出するとこの辺だった。
    この素性の正解ラベルも”1”。
    •図解。
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1
    w

    View Slide

  66. x
    y
    学習の仕組み
    y
    この素性を識別関数に通すとwとy
    の内積は負なので”-1”が返ってく
    る。
    •図解。
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1
    w
    w · y  0

    View Slide


  67. x
    y
    学習の仕組み
    y
    正解ラベルと識別関数のラベルが異
    なるので以下の式で重みを更新す
    る!
    •図解。
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1
    w + y
    w = w + lyy
    ly はデータyの正解ラベル。
    この場合は1。
    w

    View Slide

  68. x
    y
    学習の仕組み
    すると線がこんな風に回転。
    •図解。
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1
    w

    View Slide

  69. x
    y
    学習の仕組み
    これでxもyも正しく識別できた状
    態の線になった。
    •図解。
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1
    w
    y
    x

    View Slide

  70. x
    y
    学習の仕組み
    •図解。
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1
    w
    次に3つ目の学習データから素性を
    抽出するとこの辺だった。
    この素性の正解ラベルは”-1”。
    z

    View Slide

  71. x
    y
    学習の仕組み
    •図解。
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1
    w
    z
    この素性を識別関数に通すとwとz
    の内積は正なので”1”が返ってく
    る。
    w · z 0

    View Slide

  72. x
    y
    学習の仕組み
    •図解。
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1
    w - z
    z

    正解ラベルと識別関数のラベルが異
    なるので再度以下の式で重みを更新
    する!
    はデータzの正解ラベル。
    この場合は-1。
    w = w + lzz
    lz
    w

    View Slide

  73. x
    y
    学習の仕組み
    •図解。
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1
    w
    すると線がこんな風に回転。

    View Slide

  74. x
    y
    学習の仕組み
    •図解。
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1
    w
    これを学習データが無くなるまで繰
    り返していくと...

    View Slide

  75. x
    y
    学習の仕組み
    •図解。
    ※簡単のためにここでは識別関数 f(x) は以下の値を返すものとする。
     ・内積が正であれば1
     ・内積が負であれば-1
    w
    最終的には良い感じの線になって
    る。この線(すなわち重み)を使って
    未知のデータXやYを分類していく。

    View Slide

  76. まとめ

    View Slide

  77. まとめ
    1. 分類対象データから素性を抽出する。
    2. 抽出した素性を識別関数に渡す。
    3. 識別関数では重みを利用して分類する。
    4. 重みは学習用データから繰り返し学習する。

    View Slide

  78. まとめ
    x
    y
    ちなみにこんな風に1本の直線を使ってデータを分けれる問題を
    線形分離可能と言う。

    View Slide

  79. まとめ
    x
    y
    こんな風に直線で分割できなければ線形分離可能ではなくて
    線形分離不可能と言う。

    View Slide

  80. まとめ
    x
    y
    単層パーセプトロンでは線形分離可能な問題しか解けません!

    View Slide

  81. まとめ
    •この資料ではずっと二次元で説明を進めてきたけど、多次元にも
    素直に拡張できる。
    •二次元の場合は線、三次元の場合は平面で分割される。
    •四次元、五次元、六次元、などは超平面で分割される。
    •最後に三次元でのパーセプトロンの学習の過程を見て終わりま
    す。グリグリしてみましょう。
    http://tkengo.github.io/perceptron_visualization/
    (スペースキーで学習を進める)

    View Slide

  82. 目に見える
    パーセプトロン
    おわり

    View Slide