活性化関数


ステップ関数

import numpy as np
import matplotlib.pyplot as plt

def step_function(x):
    return np.where(x<=0,0,1)

x = np.linspace(-5,5)
y = step_function(x)

print(x,y) #plt.plot(x,y)
plt.show()
[-5.         -4.79591837 -4.59183673 -4.3877551  -4.18367347 -3.97959184
 -3.7755102  -3.57142857 -3.36734694 -3.16326531 -2.95918367 -2.75510204
 -2.55102041 -2.34693878 -2.14285714 -1.93877551 -1.73469388 -1.53061224
 -1.32653061 -1.12244898 -0.91836735 -0.71428571 -0.51020408 -0.30612245
 -0.10204082  0.10204082  0.30612245  0.51020408  0.71428571  0.91836735
  1.12244898  1.32653061  1.53061224  1.73469388  1.93877551  2.14285714
  2.34693878  2.55102041  2.75510204  2.95918367  3.16326531  3.36734694
  3.57142857  3.7755102   3.97959184  4.18367347  4.3877551   4.59183673
  4.79591837  5.        ] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1]

メリット

ニューロンの興奮状態を1 or 0で表現ができ実装が簡単

デメリット
0 or 1 でしか表現ができない事 

シグモイド関数

import numpy as np
import matplotlib.pylab as plt

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

x = np.linspace(-5, 5)
y = sigmoid_function(x)

plt.plot(x, y)
plt.show()

メリット

シグモイド関数はステップ関数より滑らかに表現する事ができ、0と1の中間を表すことができる

微分が扱いやすい

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

import numpy as np
import matplotlib.pylab as plt

def tanh_function(x):
    return np.tanh(x)

x = np.linspace(-5, 5)
y = tanh_function(x)

plt.plot(x, y)
plt.show()

メリット

0を中心としたグラフ形状の表示を行う

ReLU(ランプ関数)

import numpy as np
import matplotlib.pylab as plt

def relu_function(x):
    return np.where(x <= 0, 0, x)

x = np.linspace(-1, 3)
y = relu_function(x)

plt.plot(x, y)
plt.show()

メリット

シンプルで層の数が多くなっていても安定した学習が可能

恒等関数

AI/機械学習のニューラルネットワークにおける恒等関数(Identity function)もしくは線形関数(Linear function)とは、あらゆる入力値を、全く同じ数値に変換して(=そのまま)出力する関数

import numpy as np
import matplotlib.pylab as plt


x = np.linspace(-1, 3)
y = x

plt.plot(x, y)
plt.show()

メリット

出力の範囲に制限がなく連続的なため、連続的な数値を予想するのに適している

ソフトマックス関数
import numpy as np

def softmax_function(x):
    return np.exp(x)/np.sum(np.exp(x)) 
y = softmax_function(np.array([1,2,3]))
print(y)
出力.
[0.09003057 0.24472847 0.66524096]

0~1に収まっていることがわかる

メリット

ソフトマックス関数は、ニューロンが対応する枠に分類される確率を表現することができる