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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for けんご けんご
August 19, 2015

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

Avatar for けんご

けんご

August 19, 2015
Tweet

More Decks by けんご

Other Decks in Technology

Transcript

  1. 素性関数 I ( I ) = ( x1, x2, ·

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

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

    · , wn) ( I ) = ( x1, x2, · · · , xn) = x f ( x ) = w · x = n X i=1 wixi 分類対象
  4. f ( x ) = w · x = n

    X i=1 wixi ( I ) = ( x1, x2, · · · , xn) = x 素性関数 重み 識別関数 I w = (w1, w2, · · · , wn) 分類対象
  5. ある程度の数のサンプルデータ集合を入力して解析 を行い、そのデータから有用な規則、ルール、知識 表現、判断基準などを抽出する このことを 「学習」と呼ぶ メールが本当に スパムかどうかを 判断するためのルール ※どの単語が、どれくらいの割合で  どの単語の後にどの単語がきて

     とか... 実際のメール本文 と正解ラベル 「学習用データ」と 呼んだりする ※サンプルデータの用意は多くの場合、人間の仕事  このメールはスパムなのでラベル”1”  このメールはスパムではないのでラベル”-1”  とか...
  6. ( I ) = ( x1, x2, · · ·

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

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

    = new ArrayList<>(); feature.add(data.hashCode() * 1 % 10 - 5); feature.add(data.hashCode() * 2 % 10 - 5); return feature; } 分類の仕組み
  9. •たとえばこんな素性関数があったら。 •学習用データを与えると二次元のベクトルが吐かれる。 extractFeature(data1) → ( 1, 2) = extractFeature(data2) →

    ( 3, 2) = extractFeature(data3) → (-2, -4) = extractFeature(data4) → (-2, -2) = ... x1 x2 x3 x4 分類の仕組み // まったく実用的ではない超適当な素性関数 public ArrayList<Integer> extractFeature(Object data) { ArrayList<Integer> feature = new ArrayList<>(); feature.add(data.hashCode() * 1 % 10 - 5); feature.add(data.hashCode() * 2 % 10 - 5); return feature; }
  10. x y ※補足 法線と内積 ベクトルb ベクトルa a · b = 0

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

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

    b = 1 •簡単に言うと内積とはベクトルがどれだけ似ているか?の指標。 •似ているほど値が大きい。 •似ていないほど値が小さい。
  13. x y 学習の仕組み x この素性を識別関数に通すと、wとx の内積は正なので”1”が返ってくる。 w w · x

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

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

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

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

    最終的には良い感じの線になって る。この線(すなわち重み)を使って 未知のデータXやYを分類していく。