0
0

More than 1 year has passed since last update.

Python機械学習プログラミング 2.4 ADALINE 2.5勾配降下法

Last updated at Posted at 2022-08-10

この記事は過去の学習の際に書き残された備忘録です。

2.4
ADALINEと学習の収束

続いてもう一つの単層ニューラルネットワークにADALINEがある

ADALINEとパーセプトロンの違い

ADALINE パーセプトロン
線形活性化関数で重み更新 ステップ関数で重み更新
真のクラスラベルと線形活性化関数の連続地の比較 真のクラスラベルと予測されてクラスラベルから比較

線形活性化関数によって得られた連続的な値で重みを再計算する

(大誤算だったら大きく重みを更新するとかそういう感じかな)

ADALINEの特性

連続値のコスト関数(?)の定義とその最小化(多分誤差を0に近づける意?)に関する重要な概念(?)を具体的(?)に示す

2.5
勾配降下法によるコスト関数の最小化

コスト関数とは

わからない

目標

目的関数の中にコスト関数というものがある。それを最小化したものがモデルとなる
コスト関数$J(w)$は

$
J(w)=\frac {1}{2} \sum_i(y^i-\phi(z^i))^2
$

と定義される。真値と活性化関数によりはじき出された結果の差(誤差)を二乗した和である。
この値を小さくすればそれはつまり真値に近いということになる(線形回帰のイメージでいいのかな)

重みの更新

w += dwの要領で

$
w := w + \Delta w
$

$\nabla J(w)$はコスト関数$J(w)$の偏導関数(勾配)。
$\eta$は学習率。コスト関数は凸のグラフなので最小値から離れているほど勾配が大きいという特徴がある。それを利用している。
この関数の極小値を求めるために勾配を下り、勾配が0である底を求めることから勾配降下法という名前がついている。

$
\Delta w = -\eta \nabla J(w)
$

偏微分の説明と計算は省略。勾配の計算にはそれぞれの重み$w_j$に対してコスト関数の偏微分係数を計算しないといけない。導関数$\Delta w_j$は次のようになる。偏微分はやったことないのでわからない

$
\Delta w_j = -\eta \frac {\delta J}{\delta w_j} = \sum_{i} (y^i - \phi(z^i))x_j^i
$

今までのパーセプトロンと異なり、サンプルごとに小刻みに重みを変更しているのではなく、トレーニングデータセットのすべてのサンプルに基づいて計算されている。

感想

ちょっとわかった
最小二乗法とつながる気がするが、勾配降下法の使い所がわからないのでまだなんとも言えない

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0