活性化関数 【ステップ関数,シグモイド関数】| 忘備録

プログラミング
スポンサーリンク

ステップ関数の実装

ステップ関数は入力が0を超えたら1を出力し、それ以外は0を出力する関数。

#ステップ関数
def step_function(x):
    y = x > 0
    return y.astype(np.int)
#Numpyの便利な機能

import numpy as np
x = np.array([-1.0, 1.0, 2.0])
print(x)

#Numpy配列に対して不等号による演算を行う
y = x > 0
print(y)

[out]
[-1. 1. 2.]
[False True True]

Numpy配列に対して不等号の演算を行うと、配列の各要素に対して不等号の演算が行われブーリアンの配列が生成される。

xという配列の要素に対し、0より大きい要素はTrue、0以下の要素はFalseに変換され、新しい配列yが生成される。
ステップ関数は、0か1の『int型』を出力する関数なので、配列yの要素をブーリアンからint型に変換する。

y = y.astype(np.int)
print(y)

[out]
[0 1 1]

Numpy 配列の型をastype()で希望する型に変換(ここではnp.int) Pythonではブーリアン型からint型に変換すると、Trueが1に、Falseが0に変換される。

#ステップ関数のグラフ
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

def step_function(x):
    return np.array(x > 0, dtype = np.int)

x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1) #yの範囲を指定
plt.show()

シグモイド関数の実装

#シグモイド関数
def sigmoid(x):
    return 1 / (1+np.exp(-x))
x = np.array([-1.0, 1.0, 2.0])
sigmoid(x)

[out]
array([0.26894142, 0.73105858, 0.88079708])

シグモイド関数の計算にはNumpyの便利な機能であるブロードキャストが使われている。

#Numpyのブロードキャスト
t = np.array([1.0, 2.0 ,3.0])
b = 1.0 + t
print(b)

c = 1 / t
print(c)

#シグモイド関数
def sigmoid(x):
    return 1 / (1+np.exp(-x))←この部分

#シグモイド関数のグラフ
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

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

x = np.arange(-7.0, 7.0, 0.1)
y = sigmoid(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1) #yの範囲を指定
plt.show()

シグモイド関数をステップ関数の比較

シグモイド関数をステップ関数を比較すると大きな違いは『滑らかさ』である。

グラフを見るとよくわかるのだが、ステップ関数は0か1のどちらかしか返さないのに対して、シグモイド関数は0.23や0.60などの実数を返す。

パーセプトロンではニューロン間を0か1の二値の信号が流れていたのに対して、ニューラルネットワークでは連続的な実数値の信号が流れる。

また、どちらの関数も入力信号がどんなに大きかろうが、小さかろうが出力信号の値を0から1の間に押し込めることができる。

コメント