ADALINEを実際に試してみる
パーセプトロンの時と同様に、アヤメのデータを使ってADALINEの挙動を見てみましょう。
numpyの行列表記を使ってやれば、前回のパーセプトロンのコードを少しいじるだけでいけそうです。
以下のスクリプトは、学習率と最大エポック数を変化させて4通りの結果をグラフで出力します。
学習率:0.01 最大エポック数:20 の結果
左上からエポック毎の重みの変化、正答率の変化、コスト関数の変化、また学習後の決定領域を示しています。
学習率が0.01では、重みとコスト関数が発散しており、全く学習できていません。
学習率:0.0001 最大エポック数:20 の結果
学習率を0.0001とものすごく小さくしてやるとエポック毎のコスト関数が小さくなっており、学習されているのがわかります。
しかし重みもコスト関数もまだ一定値に収束しておらず、20回のエポックループでは学習が足りていません。
学習率:0.0001 最大エポック数:400 の結果
エポックループを400回にしてやると、ようやく重みとコスト関数が収束します。
学習率を小さくすると、それだけ重みを更新する量が小さくなり、学習のスピードが遅くなります。
学習率:0.01 最大エポック数:20 の結果(特徴量を標準化)
学習率を小さくしないとだめ。しかも学習のスピードが遅いとなると、いいとこ無しに見えますが、特徴量を標準化してやるとこの問題は解決します。
20回のエポックループでコスト関数が収束しており十分学習できているのがわかります。
特徴量の標準化について
この例では特徴量として、がく片の長さと花びらの長さを用いてますが、長さのスケールが2つの特徴量で異なっています。
特徴量の標準化とは、各特徴量を同じスケールに変換してやることを意味しています。
ここでは各特徴量で平均と標準偏差を算出し、元の特徴量データからその平均を引き標準偏差で割る操作をしています。
各特徴量の平均値
各特徴量の標準偏差
標準化された特徴量
、はそれぞれトレーニングサンプル、特徴量のインデックスを表し、はトレーニングサンプル数を表しています。
標準化により、各特徴量が平均0、標準偏差1のデータとなり、同じスケールで比較することができるようになります。
勾配降下法は、特徴量の標準化により最適化効率改善が顕著に現れるアルゴリズムです。