ディープラーニング基礎: 標準化や正規化を行う理由

プログラミング
スポンサーリンク




こんにちは、おみです。

今回は、ディープラーニングの前処理と呼ばれる過程で行う、標準化と正規化という2つの処理について、解説していきたいと思います。

スポンサーリンク

そもそも標準化と正規化って何?

標準化も正規化も、学習データのスケールを変換する処理です。

2つの違いですが、インターネットで調べてみても明確な答えは出ていません。(単に呼び方の問題かも…)

一応当サイトでは、標準化と正規化を下記のような処理とします。

 

標準化

学習データを

  • 平均 = 0
  • 標準偏差 = 1

となるデータに変換する処理。

 

正規化

学習データを一定の範囲内に収まるように変換する処理。

「0 ~ 1」 または 「-1 ~ 1」の範囲に収めることが多いみたいです。

 

また、これから標準化と正規化を合わせて「スケーリング」と呼ぶことにします。

 

 

標準化や正規化を行う理由

データのスケール(取り得る範囲)を狭くして、学習速度を上げるため

学習データのスケールが広ければ広いほど、ニューラルネットワークを最適化するまでにかかる時間は遅くなります。ですので、学習データのスケールを狭くすることで学習速度を向上させることができます。

 

学習データの影響度を合わせるため

ディープラーニングでは、学習データの影響度はその大きさによって決まります。そのため、

例えば…

住宅が売れるまでの日数の予測に、

  • 価格
  • 築年数

の2種類の学習データを用意し、それらのスケールが

価格 = 1880万~16197万

  (homesで調べた2020年06月17日の静岡県のデータ)

築年数 = 1年~50年

  (京都とか以外はだいたいこのぐらいの範囲に収まるのでは)

の場合、このまま使用したら価格の影響度がとんでもないことになります。

そういった場合に、標準化や正規化を行いスケールを合わせることで、価格と築年数の影響度を合わせることができます。

 

活性化関数を正しく機能させるため

これはあまり言及されていないですが、ニューラルネットワークの活性化関数で使用される「シグモイド関数」等は、データが小さすぎるまたは大きすぎると、ほとんどの値が上限値または下限値(シグモイド関数の場合は0か1)となってしまい、正しく機能できなくなります。そのため、スケーリングを行い学習データを0〜1などの小さい値にすることで、活性化関数を正しく機能させることができます。

 

 

使い分け

正規化は外れの値が学習に大きく影響してしまうため、基本的には標準化を用いることがほとんどのようです。

 

 

おすすめ書籍

ディープラーニングに必要な範囲の数学を勉強をするときに、よく使ってます。

 

 

 

コメント

タイトルとURLをコピーしました