deeplerningをやっていく上で、閾値判定基準の基本となる関数についてまとめました。
とりあえず、プロットの準備としてインスタンスを生成しておきます。
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
x = np.arange(-5.0,5.0,0.1)目次
ステップ関数
発火のさせ方をコントロールする活性化関数としては一番シンプルなものだと思います。
numpyのブロードキャスト機能を使って、1次元配列の全ての要素に対して判定を行なったものをint型で返すことによって0か1かを表すことができます。
def step(x):
return np.array(x>0,dtype=int)
plt.plot(x,step(x))
シグモイド関数
パーセプトロンやニューラルネットワークでよく使われるシグモイド関数を実装します。
def sigmoid(x):
return 1/(1+np.exp(-x))
plt.plot(x,sigmoid(x))これはステップ関数を緩やかに変化させたものです。

なんとなく融通が効きそうな形してますね。
ReLU関数
この関数を使うと、ある一定の値以上は入力を出力に横流しするという状況を作ることができます。
numpy のmaximum関数の第一引数に閾値を、第二引数に値を渡すことで、ReLU関数の働きを再現することができます。
def ReLU(x):
return np.maximum(0,x)
plt.plot(x,ReLU(x))
tanh関数
この関数はシグモイド関数の微分の最大値が1より小さい問題を解決できる関数です。
ハイパボリックタンジェントを使用しています。
def tanh(x):
return ((np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x)))
plt.plot(x,tanh(x))
コードの全体像はこんな感じです。
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
x = np.arange(-5.0,5.0,0.1)
def step(x):
return np.array(x>0,dtype=int)
plt.plot(x,step(x))
fig.savefig('step.jpg')
def sigmoid(x):
return 1/(1+np.exp(-x))
plt.plot(x,sigmoid(x))
fig.savefig('sigmoid.jpg')
def ReLU(x):
return np.maximum(0,x)
plt.plot(x,ReLU(x))
fig.savefig('ReLU.jpg')
def tanh(x):
return ((np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x)))
plt.plot(x,tanh(x))
fig.savefig('all.jpg')
plt.show()

