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

ハトでもわかる単純パーセプトロン / hato_perceptron

stkdev
February 05, 2017

ハトでもわかる単純パーセプトロン / hato_perceptron

【slideshareからのお引越しです】
https://www.slideshare.net/takosumipasta/ss-71777586

社内勉強会で発表した単純パーセプトロンの概要とR言語実装に関する資料です。
サンプルコードはこちら
https://gist.github.com/stkdev/e40705a6a05dbdd58355c24f1b0e52c7

stkdev

February 05, 2017
Tweet

More Decks by stkdev

Other Decks in Science

Transcript

  1. はじめに • 機械学習の最も基礎の部分(たぶん)なので頑張りましょう • 目次 • パーセプトロンとは • パーセプトロンの構成 •

    重みと線形結合 • 活性化関数 • 重みの更新 • 損失関数 • 最適化問題 • シミュレーションしてみる 2
  2. パーセプトロンとは • 視覚や脳神経細胞の機能をモデル化したもの • 神経細胞の動き • 感覚器官から無数の電気信号を受け取る • 現在の状況と信号の情報から物事を学習する •

    以下を繰り返すことでモデルを作成 • 複数の入力から単一の出力を行う • 出力結果と、ほしい結果(教師データ)からモデルを更新(学習) 元の発想は脳神経 構造はシンプル 入力を統合して出力へ 出力結果から学習 3
  3. パーセプトロンとは • 応用するといろいろできる • ニューラルネット(多層パーセプトロン) • ディープラーニング • SVM •

    ・・・ ⇒よく聞く手法の基礎になるものです • で、結局何ができるものなの? • という問には答えづらいよ、最後にまとめます • とりあえず「単純な分類ができるもの」と考えて、続きをどうぞ 4 ニューラルネット 1個1個がパーセプトロン なぜ重要なの? よく聞かれるけど
  4. パーセプトロンの構成 • 入力データを • 重要な構成要素 • 各入力に対する重み • 出力の調整 •

    重みの更新 入力 全長 X[1] 体重 X[2] … X[3] 重み W[1] W[2] W[3] 鳥データ 全長500mm 体重700g … 出力 1:ハトである 0:ハトではない ? ? ? 5 ハトかどうかを判定するモデルを作ろう
  5. 入力に対する重み • 定数項と各入力に対して重みwを設定 • (この時点での)出力は単純な線形結合になる • 全長、体重、定数を入力とし、それぞれX[1]、X[2]、X[3]とする • X[1]W[1]+X[2]W[2]+X[3]W[3] の計算になる

    • 重みを適当にW = [0.5, -1, 10] とすると 入力 全長 X[1] W[1] 体重 X[2] W[2] 定数 X[3] W[3] 鳥データ 全長:500mm 体重:700g 定数項:1 … 500×0.5 + 700×-1+1×10 = -440 = -440 6 計算例をみてみましょう
  6. 出力の調整 • 出力の形をほしい形に変換する • そのまま • ステップ関数 • シグモイド関数 •

    ソフトマックス関数 • ランプ関数(ReLU) • などなどいろいろ • 活性化関数と呼ばれる • 今回はハトかどうかを0or1で判定しましょう ΣXW 〇? ×? 7
  7. 重みの更新(損失関数の定義) • 現在の結果が正しいのか、どの程度間違っているのかを数値で 表すことで重み補正の有無を判断します • 現在の結果と正解(教師データ)の差を定義する • 損失関数(=誤差関数=目的関数)と呼ばれる • 損失関数E

    = max(0, -twx) t:ハトなら1 違えば-1 • つまり • 出力と正解が同じなら 損失0 • 同じでなく、正解がハトなら 損失-1 • 同じでなく、正解がハト以外なら 損失1 • 回帰したい場合、判別したい場合、データによって定義します • 回帰や判別の例はwikipediaをどうぞ。。。 • https://ja.wikipedia.org/wiki/活性化関数 #.E5.87.BA.E5.8A.9B.E5.B1.A4.E3.81.AE.E6.B4.BB.E6.80.A7.E5.8C.96.E9.96.A2.E6.95.B0.E3.81.A8.E8.AA.A4.E5.B7.AE.E9.96. A2.E6.95.B0 9 ハト判定の例だと
  8. 重みの更新(最適化) • 重みを変更することで損失関数を小さくすることが目的 • 損失関数の出力結果から重みを減らすか増やすかを決める • 損失関数の傾きをみて、低くなる方に動かそう • 偏微分だ! •

    -twxの微分値-txから変更方向が決まる • 正解がハトなら-tx 正解がハト以外ならtx • 大きく動かしても小さすぎても効率悪い • 一定の係数ηをかけておこう • -tx ⇒-ηtx • 学習率と呼ばれる • 最適化手法によっては学習率をどんどん変えたり、方向をたまに逆にしたりす ることもある 重み 損失関数 傾きを参考にする 11 ハト判定の例だと
  9. プログラムの時間です|初期化と分類 • 重み・学習率の初期化 • 重みWを初期化する W = [-1, -1, -1]

    • 学習率 eta = 0.2 (0~1)で定義 • 分類を実施 • W[1] * 全長 + W[2] * 体重 + W[3] を計算 • 活性化関数 結果が誤ったデータの 情報でWを更新する 15
  10. プログラムの時間です|更新式 • 損失関数 • E = max(0, -Label * W

    * x) • 更新式 • EをW1~3で偏微分 • -Label * x となる • 学習率etaを0~1で設定する Xと逆方向に動かす というだけの式になる 16 プログラム内では不要
  11. まとまらないまとめ • パーセプトロンで線形分離可能なデータの分割ができた • 線形分離不可の問題は収束しなくなるので注意 • ロジスティック回帰や線形判別分析と同じこともできるよ • でもロジックを自分で作ることで気づきもあるよね •

    中の計算を紐解くと案外簡単 • みんな書いてみよう • で、結局パーセプトロンって何ができるの? • まじめに答える ⇒最小値探索に帰着できる問題をデータからパラメータ更新によって導けるよ。 パーセプトロンで何かできるというより、直面している問題をこうモデル化した らパーセプトロンで最適化できるね、みたいな感じ。 • ふわっと例だけ答える場合:分割基準や回帰線をデータから導けるよ • さらにふわっと答える:データから自動的に基準が作れるよ 19
  12. 参考 • ハトのイラスト • http://01.gatag.net • 高卒でもわかる機械学習 (2) 単純パーセプトロン •

    http://hokuts.com/2015/11/25/ml2_perceptron/ • 物理のかぎしっぽ Perceptron • http://hooktail.org/computer/index.php?Perceptron • 機械学習超入門III ~機械学習の基礎、パーセプトロンを30分 で作って学ぶ~ • http://d.hatena.ne.jp/echizen_tm/20110606/1307378609 20