タコス De 機械学習 ~パーセプトロンを実装してみよう~
-
Upload
suyama-ikuo -
Category
Engineering
-
view
915 -
download
0
Transcript of タコス De 機械学習 ~パーセプトロンを実装してみよう~
パーセプトロン?” 視覚と脳の機能をモデル化したものであり、パターン認識を行う。シンプルなネットワークでありながら学習能力を持つ。 1960 年代に爆発的なニューラルネットブームを巻き起こしたが、 1969 年に人工知能学者マービン・ミンスキーらによって線形分離可能な物しか学習できない事が指摘された事によって下火となった。他の研究者によって様々な変種が考案されており、ニューロン階層を多層化し入出力が二値から実数になったボルツマンマシン( 1985 年)やバックプロパゲーション( 1986 年)などによって再び注目を集めた。 2009 年現在でも広く使われている機械学習アルゴリズムの基礎となっている。
“ パーセプトロンは 1943 年に発表された形式ニューロンに基づく。 S 層と A 層の間はランダムに接続されている。 S 層には外部から信号が与えられる。 A 層は S 層からの情報を元に反応する。 R 層は A層の答えに重みづけをして、多数決を行い、答えを出す。
ー From Wikipedia
何らかのデータを入力して、「分類問題」を解く「形式ニューロン」が元になっている
分類問題?
データを特定のカテゴリ(クラス)に分ける問題例
メールがスパムか否か?手書き数字の画像から数字を識別? (MNIST)Iris (あやめ)の種類?
※ 何故か機械学習の素材としてよく扱われます
入力層と出力層のみからなるパーセプトロンそれぞれの識別器 (g) が1つのクラスを表し、担
当のクラスに該当するかどうか?を判別する
入力層 出力層
:
最大
値選
択器
出力(クラス)
:
単純パーセプトロン
既知のデータに、赤のクラスに 1, 青のクラスに-1 のラベルをつけておいて
1
1
1
1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1- 1
- 1
- 1
- 1
- 1
1
1
1
1
1
1
1
1
1
1
1
1
1 1
1
1
1
1
1
- 1 - 1
二値分類問題
すべてのデータの符号を正しく判定できる直線の ω=“重み“を見つけると、この問題が解ける
1
1
1
1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1- 1
- 1
- 1
- 1
- 1
1
1
1
1
1
1
1
1
1
1
1
1
1 1
1
1
1
1
1
二値分類問題
1) 重みベクトル ω を適当に決める。2) 既知データ X から学習パターンを1つ選ぶ。3) 識別関数 g(x) によって識別を行い、正しく識別
できなかった場合は ω を更新する。4) X の全パターンについて 2),3) を行う。5) X の全パターンを正しく識別できるまで 2)~4)
を繰り返す。
g(x)… 識別関数
パーセプトロンの学習規則
1.損失関数を定義する出力した結果がどれぐらい間違っていたか?を計算す
るパラメータ ω についての関数よく使われる損失関数 二乗誤差関数
2.損失関数を最小化するパラメータを見つける
どうやって見つけるか?色々方法がありますが…
機械学習における「学習」
勾配降下法( Gradient Descent )
つまり
この漸化式で、wを逐次更新し、最小値を目指します
ρ は更新の幅を決めるハイパーラメータ(学習率) 大きすぎると発散し、小さすぎると収束が遅くなります。
勾配降下法( Gradient Descent )
いま、損失関数を
(上に誤検知した時)
(下側に誤検知した時)
を用いて、以下のように定義します。
(分類が正しかった時)
(誤検知してしまった時、間違ったデータと現在の直線との距離を損失とする)
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns
iris = sns.load_dataset("iris”)setosa.head(5)
<Python>
sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
: : : : : :
このデータを、 4 つの特徴量から” setosa” か否か?に分類
[ 実装 ] Iris のデータを分類する
1) 重みベクトル ω を適当に決める。2) 既知データ X から学習パターンを1つ選ぶ。3) 識別関数 g(x) によって識別を行い、正しく識別できなかった場合は以下
の式に従って ω を更新する。
4) X の全パターンについて 2),3) を行う。5) X の全パターンを正しく識別できるまで 2)~4) を繰り返す。
学習ロジック
(上側に誤検知)
(下側に誤検知)
参考資料丸山不二夫先生のニューラルネット&
Tensorflow説明http://www.slideshare.net/maruyama097/neural-
network-tensorflow Google の Tensorflow 入門のスライドですが、ニューラルネッ
トの説明も最強のわかりやすさ&丁寧さで必読です!
わかりやすいパターン認識 1〜 3章 説明がとても丁寧で、読みやすい本です。
WEB+DB PRESS Vol.89 初めての深層学習 実装は Chainer を使って説明されていましたが、概念の説明が
分かりやすかったです。東京で働くデータサイエンティストのブログ
単純パーセプトロンをPythonで組んでみる