【DeepLeaning】 活性化関数 ReLU関数

Deep Learning とは何なのか・・・まったく知らない状態から挑戦してみたいと思います!

ReLU関数

 

ReLU(Rectified Linear Unit)関数はニューラルネットワークの活性化関数の1つで、最も一般的に使用されています。
ReLU関数は、入力が0以下の場合には0を出力し0より大きい場合には入力値をそのまま出力する関数です。

数式で表すと以下のようになります。

f(x) = max(0, x)

ここで、xは入力値を表し、f(x)は出力値を表します。ReLU関数は、次のような特徴を持っています。

  • 非線形関数であるため多層のニューラルネットワークを構築するために必要な要件を満たします。
  • 出力が常に0以上であるため勾配消失問題を解決することができます。
  • 計算コストが低いため、高速で効率的なニューラルネットワークの構築に適しています。

ReLU関数は、ニューラルネットワークの活性化関数として、広く使われています。

勾配消失問題のおさらい

勾配消失問題とは、深層ニューラルネットワークにおいて逆伝播アルゴリズムによる勾配計算において層が深くなるにつれて勾配が非常に小さくなり学習が進まなくなる現象です。

具体的には、ニューラルネットワークの各層において逆伝播によって伝搬される誤差勾配が非常に小さくなる場合があります。
これにより、重みの更新がほとんど行われず、ニューラルネットワークが学習を停止してしまいます。

勾配とは、ある関数の傾きのことです。

例えば、グラフ用紙に直線や曲線を描いた場合その傾きがそのまま勾配になります。
もう少し具体的に言うとある点での勾配はその点における関数の微小な変化量(例えば、縦方向の変化量や横方向の変化量)を求めてその比率を取ることで求められます。

勾配消失問題は、主に活性化関数に原因があります。
たとえば、シグモイド関数は、入力が大きい場合には0または1に近づくため、勾配が非常に小さくなります。
これに対し、ReLU関数は入力が正であれば勾配が1であるため、勾配消失問題を軽減することができます。

シグモイド関数の晩年

シグモイド関数は、過去には主流の活性化関数として広く使われていましたが、最近では使われなくなる傾向があります。
その理由には、いくつかの問題点が挙げられます。

  1. 勾配消失問題
    シグモイド関数は入力が大きい場合には0または1に近づくため勾配が非常に小さくなります。
    これにより、ニューラルネットワークの深さが増すにつれて勾配消失問題が起こりやすくなります。
  2. 非対称性
    シグモイド関数は、入力が0に近いときには出力が線形になりますが、入力が大きくなるにつれて出力が飽和し非線形性が弱くなります。
    これにより、ニューラルネットワークの表現力が制限され、学習が困難になることがあります。
  3. 中心化されていない
    シグモイド関数はその形状上出力の平均が0ではなく0.5になります。
    これにより、ニューラルネットワークの学習が不安定になることがあります。

これらの問題点に加えて、ReLU関数やその派生であるLeakyReLU関数やELU関数など、シグモイド関数よりも優れた活性化関数が開発されたことも、シグモイド関数が使われなくなる原因となっています。

「出力が飽和する」とは、ある関数の出力値が一定の値に収束してしまうことを指します。

ニューラルネットワークにおいては活性化関数によってこの現象が起こります。
例えば、シグモイド関数は、入力値が大きくなるにつれて出力値が0または1に収束するため出力が飽和することがあります。

出力が飽和すると、その層の出力が大きく変化しなくなるためその層の重みの更新が進まなくなりニューラルネットワークの学習が停滞することがあります。
また、出力が飽和すると情報の欠落が生じるためニューラルネットワークの表現力が制限されることがあります。