サムネがコーヒーの記事は書きかけです。

簡単な活性化関数

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()

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です