KATUBLO
2019年02月14日

【DeepLearning】パーセプトロンを使って誤り訂正学習法を解説

ゴール

NN(newralNet)における「訂正学習法」の考えを理解する。

 

パーセプトロンとは?

 

複数の入力値が与えられ、その入力値に重みをつけ、指定の値を上回れば「ture(1)」下回れば「false(0)」を返すもの

 

 

パーセプトロンの数式

パーセプトロンは以下の式で表される。

$$
y = \left\{ \begin{array} { c c } { 1 } & { \left( w , x _ { 1 } + w _ { 2 } x _ { 2 } + \dots + w _ { n } x _ { n } \geqq \theta \right) } \\ { 0 } & { \left( w _ { 1 } x _ { 1 } + w _ { 2 } x _ { 2 } + \cdots + w _ { n } x _ { n } < \theta \right) } \end{array} \right.
$$

 

$$
f ( x ) = \left\{ \begin{array} { l l } { 1 } & { ( x \geq 0 ) } \\ { 0 } & { ( x < 0 ) } \end{array} \right.
$$

 

この [math] f(x)[/math]はステップ関数と呼ばれ入力に対して「1」か「0」を返す関数である。

 

$$
y = f \left( w _ { 1 } x _ { 1 } + w _ { 2 } x _ { 2 } + \dots + w _ { n } x_{n} – \theta\right)
$$

 

$$
b = – \theta
$$

として

$$
w _ { k } , x _ { k } \quad ( k = 1,2,3 \cdots n )
$$

とすると以下の行列の形で表すことができる。

 

$$
x = \left[ \begin{array} { c } { x _ { 1 } } \\ { x _ { 2 } } \\ { \vdots } \\ { x _ { n } } \end{array} \right] , \quad w = \left[ \begin{array} { c } { w _ { 1 } } \\ { w _ { 2 } } \\ { \vdots } \\ { w _ { n } } \end{array} \right]
$$

 

そしてこれら行列を用いてまとめて、パーセプトロンの式に代入すると以下のように表記することができる。

 

$$
y = f \left( w ^ { T } x + b \right)
$$

 

パラメーターを決定する

正解データに合致するようにw(重み)、θ(閾値)のパラメータの値を決定する必要がある。正解データ(ここでは「1」か「0」)が0のときにパーセプトロンが1を返したらこれはパラメータの設定がおかしいということになる。ではここからパラメータのチューニングのやりかたを解説していく。

 

$$
f \left( w _ { 1 } x _ { 1 } + w _ { 2 } x _ { 2 } – \theta \right) = y
$$

 

tを正解データ、yが出力値とすると以下の3パターンが考えられる。(入力値は全て正であると仮定する)

 

[1] t = y

これは正解データと出力データの値が等しい。すなわち適切なパラメータが指定されていることを意味する。よってパラメータ

を更新する必要はない。

 

[2] t<y

これは出力値の方が大きい。よってパーセプトロンを発火させないようにパラメータを指定する必要がある。この場合だと「重みの値を大きくする」「閾値の値を小さくする」必要がある。

 

[3] t>y

これは出力値の方が小さい。よって[2]とは逆にパーセプトロンを発火させるようにパラメータを指定する必要がある。この場合だと「重みの値を小さくする」「閾値の値を大きくする」必要がある。

 

 

このようにして、パラメータの値を更新する方法を「訂正学習法」と呼ぶ。

 

 

訂正学習法の更新式

以下の式を使用して、パラメータを更新する。

 

$$
\begin{array} { l } { \Delta w = ( t – y ) x } \\ { \Delta b = t – y } \end{array}
$$

 

$$
\begin{aligned} w ^ { ( k + 1 ) } & = w ^ { ( k ) } + \Delta w \\ b ^ { ( k + 1 ) } & = b ^ { ( k ) } + \Delta b \end{aligned}
$$

 

これをプログラムに落として、最適なパラメータを求める。実際にどのようにしてプログラムに落とすかはここでは書かないことにする。有名な方法としては「勾配降下法」といった方法があるので時間があいたら記事を書こうと思う。

 

 

最後まで読んで頂き、ありがとうございました。
SNS等でのシェアが頂ければ幸いです!

プロフィール

@KATUO

現在都内私立大学に通う大学4年生。大学では電気電子工学を専攻。大学2年の夏頃に、プログラマーの長期インターン募集の広告が目に止まり、独学でプログラミングの学習をスタート。この時期からプログラミングにどハマりし、現在までに「AIスタートアップ」「Webマーケティング会社」でエンジニアとしての業務に没頭してきた。

大学生必見就活イベント