ニューラルネットワークにおいて、入力信号の総和を出力信号に変換する関数

活性化関数

活性化関数は、前のニューロンから送られた複数の値に重みをかけ、その総和を 1 つの値として出力する関数である。ステップ関数、シグモイド関数や ReLU 関数がなどが活性化関数としてよく用いられる。

ステップ関数

ステップ関数は、入力された値が、ある閾値を超えた時に 1 を出力し、それ以外の閾値以下の場合は 0 を出力する関数である。入力値を x、閾値を θ とすると、ステップ関数は次の式で表すことができる。

\[ \begin{eqnarray} h(x) = \begin{cases} 1 & ( x \gt \theta ) \\ 0 & ( x \le \theta ) \end{cases} \end{eqnarray} \]

ステップ関数を Python で実装すると、次のようになる。次の例では閾値を 0 としている。

def step_function(x):
    if x < 0:
        return 1
    else:
        return 0

複数の入力値を(それぞれ独立に)いっぺんに判断する際に、numpy ライブラリーのベクトル型(配列型)を利用する。

import numpy as np

def step_function(x):
    x = np.array(x)
    v = x < 0
    y = x.astype(np.int)
    return y

シグモイド関数

シグモイド関数は、次のような数式で表せる非線形の関数である。シグモイド関数では、入力された値を 0 から 1 までの範囲の数値に変換ことができる。次のグラフのように、入力値が大きければ 1 に近い値を出力するが、入力値が小さければ 0 に近い値を出力する。

\[ h(x) = \frac{1}{1+exp(-x)} \]
シグモイド関数のグラフ

Python で実装すると次のようになる。

import numpy as np

def sigmoid_function(x):
    return 1 / (1 + np.exp(-x))

ReLU 関数

ReLU (rectified linear unit) 関数は、入力値が 0 以下ならば 0 を出力し、入力値が 0 よりも大きければそのまま出力する関数である。

\[ \begin{eqnarray} h(x) = \begin{cases} x & ( x \gt 0 ) \\ 0 & ( x \le 0 ) \end{cases} \end{eqnarray} \]
ReLU 関数のグラフ

Python で実装すると次のようになる。

import numpy as np

def relu_function(x):
    return np.maximum(0, x)

References

  • 斎藤康毅. ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装. オライリー・ジャパン 2016, O'Reilly Japan