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.

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

10,074 views

Published on

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

引越し先:
https://speakerdeck.com/stkdev/hato-perceptron

Published in: Data & Analytics
  • Be the first to comment

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

  1. 1. ハトでもわかる 単純パーセプトロン 「サルでもわかる」 →えてして難しい 「猫でもわかる」 →媚びてる感が出る 「鶏でもわかる」 →3歩で忘れるとダメ 時代はハト
  2. 2. はじめに • 機械学習の最も基礎の部分(たぶん)なので頑張りましょう • 目次 • パーセプトロンとは • パーセプトロンの構成 • 重みと線形結合 • 活性化関数 • 重みの更新 • 損失関数 • 最適化問題 • シミュレーションしてみる 2
  3. 3. パーセプトロンとは • 視覚や脳神経細胞の機能をモデル化したもの • 神経細胞の動き • 感覚器官から無数の電気信号を受け取る • 現在の状況と信号の情報から物事を学習する • 以下を繰り返すことでモデルを作成 • 複数の入力から単一の出力を行う • 出力結果と、ほしい結果(教師データ)からモデルを更新(学習) 元の発想は脳神経 構造はシンプル 入力を統合して出力へ 出力結果から学習 3
  4. 4. パーセプトロンとは • 応用するといろいろできる • ニューラルネット(多層パーセプトロン) • ディープラーニング • SVM • ・・・ ⇒よく聞く手法の基礎になるものです • で、結局何ができるものなの? • という問には答えづらいよ、最後にまとめます • とりあえず「単純な分類ができるもの」と考えて、続きをどうぞ 4 ニューラルネット 1個1個がパーセプトロン なぜ重要なの? よく聞かれるけど
  5. 5. パーセプトロンの構成 • 入力データを • 重要な構成要素 • 各入力に対する重み • 出力の調整 • 重みの更新 入力 全長 X[1] 体重 X[2] … X[3] 重み W[1] W[2] W[3] 鳥データ 全長500mm 体重700g … 出力 1:ハトである 0:ハトではない ? ? ? 5 ハトかどうかを判定するモデルを作ろう
  6. 6. 入力に対する重み • 定数項と各入力に対して重み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 計算例をみてみましょう
  7. 7. 出力の調整 • 出力の形をほしい形に変換する • そのまま • ステップ関数 • シグモイド関数 • ソフトマックス関数 • ランプ関数(ReLU) • などなどいろいろ • 活性化関数と呼ばれる • 今回はハトかどうかを0or1で判定しましょう ΣXW 〇? ×? 7
  8. 8. 重みの更新(概要) • 現在の出力が正しいかどうかを定量化する • ⇒損失関数の定義 • 損失関数から重みの増減の方向を決定する • 増減の幅を決定する • ⇒最適化問題 計算あってた 計算間違ってた 8 Step1 Step2
  9. 9. 重みの更新(損失関数の定義) • 現在の結果が正しいのか、どの程度間違っているのかを数値で 表すことで重み補正の有無を判断します • 現在の結果と正解(教師データ)の差を定義する • 損失関数(=誤差関数=目的関数)と呼ばれる • 損失関数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 ハト判定の例だと
  10. 10. 参考:重みの更新(最適化問題) • 損失関数(=最小にすべき数式)を多数の条件下で最小となる パラメータを探す • これが最適化問題 • 関数の性質や条件の有無で様々な最適化手法がある • http://www.slideshare.net/tkm2261/ss-42149384 非常にきれいにまとまっていて わかりやすい! (簡単とは言っていない) 今回はここ 10
  11. 11. 重みの更新(最適化) • 重みを変更することで損失関数を小さくすることが目的 • 損失関数の出力結果から重みを減らすか増やすかを決める • 損失関数の傾きをみて、低くなる方に動かそう • 偏微分だ! • -twxの微分値-txから変更方向が決まる • 正解がハトなら-tx 正解がハト以外ならtx • 大きく動かしても小さすぎても効率悪い • 一定の係数ηをかけておこう • -tx ⇒-ηtx • 学習率と呼ばれる • 最適化手法によっては学習率をどんどん変えたり、方向をたまに逆にしたりす ることもある 重み 損失関数 傾きを参考にする 11 ハト判定の例だと
  12. 12. プログラムの時間です • なかなかピンときにくい場合は動かしてみるのが一番 • プログラムのポイントは以下の点 • 重みと学習率を初期化する • 入力されたデータと現在の重みから出力結果を出す • 線形結合 • 活性化関数 • 出力結果が教師データと異なる場合に重みの更新をする 12 なるほど、わからん
  13. 13. プログラムの時間です|問題 • プログラムしましょう • 問題:2種類のデータを分類するための境界線を引く • サンプルソースコード:Gistに置いてみた↓ https://gist.github.com/stkdev/e40705a6a05dbdd58355c24f1b0e52c7 この辺に線が引ければ、 未知のデータも分類できるかも 13
  14. 14. プログラムの時間です|データ • データ • バイアス項は全データが1の列を作ることで実現できる • 体重、全長、分類の関係を以下のように置く • 分類(Label) = W[1] * 全長 + W[2] * 体重 + W[3] * バイアス項(定数 項) • この式が成り立つWを求めればよい 14
  15. 15. プログラムの時間です|初期化と分類 • 重み・学習率の初期化 • 重みWを初期化する W = [-1, -1, -1] • 学習率 eta = 0.2 (0~1)で定義 • 分類を実施 • W[1] * 全長 + W[2] * 体重 + W[3] を計算 • 活性化関数 結果が誤ったデータの 情報でWを更新する 15
  16. 16. プログラムの時間です|更新式 • 損失関数 • E = max(0, -Label * W * x) • 更新式 • EをW1~3で偏微分 • -Label * x となる • 学習率etaを0~1で設定する Xと逆方向に動かす というだけの式になる 16 プログラム内では不要
  17. 17. プログラムの時間です|学習ループ • ループの終了判定は、Wの更新 があったか否か • 更新アルゴリズムは • まず現在のWで分類する • 分類結果がLabelと異なった場合 更新規則に従って更新 • 全長と体重の2次元グラフに線を 引く場合 • 傾き:-W[1]/W[2] • 切片:-W[3]/W[2] 17
  18. 18. プログラムの時間です|結果 • 徐々に境界線がうごいてい くのがわかります • 今回は(バイアス項含め) 3変数なので、実際は3次 元空間に境界面を作ってい るイメージです • 変数増やせばN次元のデータ も分割できます 18
  19. 19. まとまらないまとめ • パーセプトロンで線形分離可能なデータの分割ができた • 線形分離不可の問題は収束しなくなるので注意 • ロジスティック回帰や線形判別分析と同じこともできるよ • でもロジックを自分で作ることで気づきもあるよね • 中の計算を紐解くと案外簡単 • みんな書いてみよう • で、結局パーセプトロンって何ができるの? • まじめに答える ⇒最小値探索に帰着できる問題をデータからパラメータ更新によって導けるよ。 パーセプトロンで何かできるというより、直面している問題をこうモデル化した らパーセプトロンで最適化できるね、みたいな感じ。 • ふわっと例だけ答える場合:分割基準や回帰線をデータから導けるよ • さらにふわっと答える:データから自動的に基準が作れるよ 19
  20. 20. 参考 • ハトのイラスト • 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

×