やっぱりよく分からない活性化関数とは
この記事ではニューラルネットワークに必要な要素の一つ、活性化関数について説明します。ただ、その前に簡単にニューラルネットワークについておさらいをしたいと思います。
ニューラルネットワークは人間の脳をモデル化したもので、一つ一つがニューロンと呼ばれる神経細胞を模したモデルの集まりから成り立っています。
ニューロンは入力層、中間層、出力層のそれぞれが存在します。
入力層のニューロンから出力された情報は中間層のニューロンへの入力となり、中間層のニューロンから出力された情報は出力層のニューロンへの入力となるように、複雑に連携しています。
こられのニューロンの数が多くなれば多くなるほど複雑な処理に対応できやすくなります。
このように複雑に連携しているニューロンですが、1つのニューロンに着目した場合は動作が非常にシンプルとなっています。
次の図は3つの入力(X1、X2、X3)から入力を受信したニューロンの図を表しています。
1つのニューロンへの入力は、それぞれの入力(X1 , X2 , X3)に重み(W1 , W2 , W3)をかけ合わせた値にバイアス(b)を足した値となります。この合計値に対して、特定の関数を経由することで最終的な出力値を決定します。
その出力値を決定する関数が活性化関数となります。
活性化関数について
活性化関数についてはなんとなくイメージできたかと思います。
先ほどの図では出力値を決定する関数が活性化関数となります。
では、なぜ活性化関数を使用するのでしょうか?
そもそも活性化関数の意味合いとは何でしょうか?
いくつかの機械学習やディープラーニングの参考となる例をみてみると、シグモイド関数やソフトマックス関数などがよく使用されています。その他にもReLuや恒等関数というのも出てきます。
いくつかの種類はありますが、それぞれが何のために存在しているのか、その意味合いはどのようなものなのか知らなければ使いこなすことが出来ません。
次から活性化関数を数式よりもイメージ中心に説明を行っていきます。
活性化関数:シグモイド関数
シグモイド関数の例を見てみましょう。
シグモイド関数は次の図のような指数を用いた関数となります。横軸が入力値の合計値で、縦軸が出力値となります。入力値の合計値が小さければ小さいほど出力値は0に近づき、入力値の合計値が大きければ大きいほど出力値が1に近づいています。
ここで分かるのは、シグモイド関数の計算式とグラフの式だけです。
このグラフや計算式を見てすぐに理解できる人は説明は必要ないかと思います。しかしながら、このグラフや計算式が何のためにあるのか分からないという方が多いかと思います。
シグモイド関数は2クラスの識別問題の場合に非常によく使用されます。
つまり「0または1」という2つの解を求める場合です。
数字だとイメージがしづらいので、動物を例にして説明します。「犬か猫」のどちらかになるかを判定する画像認識があったとします。その場合は、言い換えると、「犬か犬ではないか」と表現することができます。
先ほどのニューロンの図で表すと、活性化関数は「犬」の確率をあらわします。
つまり、INPUTして何かしらの入力値を受け取り、活性化関数にわたすことで「犬」の確立が80%とか、「犬」の確立は20%という結果値を得ることができます。また「犬」の確立が20%なら、答えは「猫」となります。
このようにイメージを持ってみてもらえると、活性化関数の図の意味や目的が理解しやすくなるのではないでしょうか。
活性化関数:ソフトマックス関数
先ほどのシグモイド関数では2クラス問題と呼ばれる、「0または1」という2つの解を求める場合について行いました。では、それが多クラス問題となったらどうなるのでしょう。
例えば、「犬、猫、ライオン、熊」とかです。
その場合、確立としては 犬=>0%、猫=>60%、ライオン=>20%、熊=>20% という表現となっていると扱いやすいです。
ソフトマックス関数は最終的な合計値が1となるように算出することが特徴です。つまり、全てのカテゴリを合計した場合に100%となるよう算出することが出来るとも言えます。
ソフトマックス関数は何しかしらの計算で求められてきた場合について、 犬=>0%、猫=>60%、ライオン=>20%、熊=>20% :合計 100%と計算できる特徴を持っているということです。
そのため、多クラス問題の識別ではソフトマックス関数がよく使用されています。
活性化関数:恒等関数
いままで、2クラス問題、多クラス問題とシグモイド関数やソフトマックス関数と活性化関数を用いてある特定の確立に変換してきました。
しかしながら、確立に変換する必要もなく、受け取った値そのまま出力したいという場合もあるでしょう。その場合は恒等関数の出番です。
恒等関数は受け取ったそのままの値を変換せずに出力します。
回帰問題などで、入力パラメータから受け取ったそのままの値を変換せずに出力したい場合に恒等関数が使わる場合があります。
活性化関数:ReLU
次の図のような関数となります。横軸が入力値の合計値で、縦軸が出力値となります。入力値の合計値が0以下の場合は出力値が0となり、0以上の場合は、そのまま入力値が出力値となります。
こちらは一見、図の意味が理解しにくいかもしれません。でもよく見てみると入力の値がマイナスだった場合は0という一定値。入力の値がプラスの場合はそのまま入力の値を出しているので、恒等関数と同じようになります。プラスの値のみ恒等関数を使用したいという場合に使用されます。