シグモイド関数(sigmoid function)

記事を共有する:

1. シグモイド関数 (sigmoid function)とは [概要]

シグモイド関数(sigmoid function)とは,機械学習の「2クラス識別モデル」において,確率的なベクトル出力をする際によく用いられる活性化関数である.ロジスティック回帰の出力の最適化モデルの目的関数に用いられ,多クラス確率出力向けの関数であるsoftmax関数の2値出力版に相当する.

S字型のシグモイド曲線を描く関数であり,入力を0か1かのどちらかの値に近い確率値(0 ~1の範囲の値)に変換して出力できる.(ランダム化はされていないが) ベルヌーイ分布として出力することができるので,2クラス分類モデルの出力に使いやすく,実際よく用いられる.ディープラーニング・CNNにおいても,シグモイド関数は「バイナリー2クラス出力確率」を学習させたい際に,出力層に用いる.

親記事:活性化関数(activation function) [ディープラーニング向け]

1.2 記事の構成

この記事では,シグモイド関数の定義を述べたあと,,出力層での使用(2節)と,隠れ層での使用(3節)に分けて述べたい.

  • 2節 シグモイド関数の定義
  • 3節 出力層での使用
  • 4節 隠れ層での使用

2. シグモイド関数の定義

シグモイド関数(sigmoid function)
図1 シグモイド関数sigmoid function とその微分右図

シグモイド関数(sigmoid function)は,ステップ関数より便利な活性化関数として使われるようになった,以下の関数である(図1 左):

\[\sigma(x) = \frac{1}{1 + \exp(-x)} \tag{2.1} \]

シグマ型の曲線である意味で,$\sigma(x)$と書かれることが多い.シグモイド関数はロジスティック関数の1種であり,別名ロジスティックシグモイドとも呼ばれる.

シグモイド関数は,導関数も以下のように計算が楽なので,勾配降下法で勾配を計算しやすい:

\[\sigma^{\prime}(x) =\sigma(x)(1-\sigma(x)) \tag{2.2} \] 

シグモイド関数には,機械学習・深層学習的向けの利点として以下のような性質があげられる:

  • $(0,1)$の範囲に,入力値の押し潰し(squashing)が可能.
  • ステップ関数に似ているが,滑らかな関数なので微分可能.
  • 微分も計算が楽なので,勾配降下法に向いている.
  • また,ステップ関数と同じく,ゼロが中心に対象な関数なので,2値識別向けの識別境界を作れる.

以上のように,3層MLPで使用する際に好ましい性質があるので,よく使われていた.

3. 隠れ層での使用

初期のニューラルネットワークや3層MLPでは,隠れ層に活性化層にシグモイド関数がよく使われていた時期があった.しかし,隠れ層でのシグモイド関数には,次に述べるような弱点や使いづらさがあり,のちにtanhに差し替えられていく.(今は隠れ層にはReLU系の関数を用いる)

図3を見てもわかるように,$(-4,4)$あたりの範囲より外だと,0と1に出力活性化値がそれぞれ飽和し(図1-左),その微分値もほとんど0なので(図1-右),値が大きいか小さいかで飽和すると,勾配が小さくなりすぎて,学習が滞ってしまう問題がある.

また,(ゼロ中心でのガウス正規化を継続しやすい)ゼロ中心の出力ではなく,0.5中心なので,隠れ層間の伝搬を経ていくなかで,ガウス分布の中心がずれていく内部共分散シフト(internal covariate shift)が起きやすい問題もある.シグモイド関数は微分値も0.25が最大値なので(図1-右),逆伝搬時にどんどん微分値がしぼんでいく.よって,多層のディープニューラルネットワークの活性化関数には,使いづらい面があった.

その意味で,次節のtanhのように「ゼロ中心の活性化関数」のほうが有用であるので [Lecun 98],3層MLPやLSTMなどでは tanhがよく使われるようになっていった

(※ ただし,昨今はバッチ正規化の使用で,学習中の各層にける入力値分散の正規化(もとい安定化)を任せることができる).

4. 出力層でのシグモイド関数の使用

シグモイド関数は,2値分類モデルでよく用いられる.古くはロジスティック回帰でも出力部分に用いられ,それと同じように分類用のニューラルネットワークやCNNでも,2クラス分類の学習の場合にシグモイド関数を出力層に用いる

出力のシグモイド関数は,交差エントロピーと組み合わせての使用が重要であるのが,ここでは述べない.その組み合わせての詳細については,「CNNの損失関数その(1)」の記事を参照していただきたい.

5. まとめ

シグモイド関数は,古典的な,S形の2値出力に変換するための活性化関数である.

ロジスティック回帰などの古典的な2クラス識別モデルや,2クラス識別CNNなどで出力層に用いられる.

また,シグモイド層も昔は隠れ層にも用いられていたが,弱点があったので,tanhがよく用いられるようになった.更に,ディープニューラルネットワーク登場以後は,深さに強い「ReLU型の活性化関数」を隠れ層に用いるのが普通である.

関連記事

関連書籍

References

参照外部リンク