🍣

活性化関数、標準化、正規化

2021/12/20に公開

活性化関数

人工ニューロンの出力値の計算に用いる。
出力値の大きさ = ニューロンの興奮状態
様々な種類があり、実現したいことや使用する層で使い分ける必要がある

ステップ関数


X =< 0の時、0を出力する
X > 0の時、1を出力する
主にパーセプトロンで用いられていた関数で、入力値に対して0または1の値を出力する。
複雑な状態を再現できない

シグモイド関数


0 ~ 1の値を出力する
ステップ関数よりも滑らかなため、複雑な値も表現できる。
微分しやすい

tanh(ハイパボリックタンジェント)


-1 ~ 1の値を出力する
0を中心とした対象になっており、バランスがいい。

ReLU


X =< 0の時、0を出力する
X > 0の時、Xを出力する
勾配消失問題を解消できるため、層が深いDNNでも安定して動作する。
入力層や中間層で用いることが多い

identity(恒等関数)


入力値をそのまま出力する
回帰問題の出力層で用いることが多い

softmax関数

同じ層のニューロンの出力値の合計が1になるような値を出力する。
ある出力値が出力値の総和に占める割合を取得することができるため、分類タスクの出力層に用いることが多い

ディープラーニングで特徴量を入力層に渡す際、そのまま渡すとシグモイド関数やtanhの出力値のほとんどが下限値または上限値(またはその両方)になってしまうことがある。
→そのために、学習を行う前にデータの標準化、正規化を行う

標準化と正規化の違い

  • 標準化 ... 平均0, 標準偏差1となるデータに変換する
  • 正規化 ... 0 ~ 1 や -1 ~ 1など一定の範囲に収める

正規化は外れデータの影響度が大きいので、標準化を使うことが多い

行う理由

  • 学習効率を向上させるため
    特徴量の範囲が広ければ広いほどニューラルネットワークを最適化するのに時間がかかってしまう。
    範囲を狭くすることで、学習効率を向上させる。

  • 特徴量ごとの影響度を合わせるため
    例えば住宅が売れるまでの日数の予測に価格と築年数の2つのデータを用意しそれぞれの範囲が18,800,000 ~ 161,970,000と1 ~ 200 だとすると、価格の影響度がとんでもないことになる。それぞれの特徴量の範囲を合わせることで、特徴量の影響度を合わせる必要がある。

  • 活性化関数を正しく機能させるため
    特徴量の値が小さかったり大きかったりすると、活性化関数の出力値が下限値または上限値ばかりになってしまい、データの差がほとんどなくなるため機能しなくなる。そのためスケーリングを行い範囲を小さくすることで、活性化関数が正しく機能するようにする。

GitHubで編集を提案

Discussion