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. 素性関数 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を分類していく。