AI-MASTER WIKI

ニューラルネットワークをPythonで実装する

ニューラルネットワークで使う関数の実装

活性化関数

シグモイド関数

シグモイド関数は、-∞から+∞までのあらゆる数値を0から1の間に収まるように出力します。特徴は、0から1までの間で滑らかな曲線を描くことで、数字の大小に応じた細やかな数字を出せることです。 例えば、以下のように実装します。

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

sigmoid.png

ハイパボリックタンジェント関数

tanh関数(双曲線正接)はシグモイド関数と似たような関数で-∞から+∞までのあらゆる数値を-1から+1の間に収まるように出力します。なお, Pythonでは標準パッケージやNumPy?に最初から実装されていて Math.tanh(x)やnp.tanh(x)等のように使います

tanh.png

余談ですが, tanh関数とシグモイド関数との関係は、拡大縮小して上下に少しずらしたような関係です。数式的に表すと (tanh(x/2)+1)/2 = sigmoid(x) のようになります。

ステップ関数

ステップ関数は、シグモイド関数と同じく、-∞から+∞までのあらゆる数値を0から1の間に収まるように出力します。しかし、シグモイド関数と違って出力が滑らかに変化せず、ある時点で0か1かがカチッと切り替わります。 例えば、値が0の際に切り替わるようにしたい場合には以下のように書きます。

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


step.png

np.arrayで配列を生成していますが、 x > 0 の部分で、xの配列に含まれている数が0より大きい数字の場合はBOOL値True、 そうでない場合にはBOOL値Falseが出力されますが、 dtype=np.intでTrue,Falseをint型の1,0に変換しています。

ReLU関数

ReLU関数は、変数が0以上の場合にはその変数そのままの値を返し、変数が0より小さい場合には0を返すという関数です。 Rectified Linear Functionの略であり、ランプ関数とも呼ばれています。 実装する場合には以下のように書きます。

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


np.maximumを使って、0かxの大きいほうを出力しています。 言い換えれば、0より小さい数(マイナス)の場合には、すべて0が出力され、xがプラスの時にはそのままの数が出力されます。

reru.png

行列の計算

ニューラルネットワークを実装してみる


添付ファイル: filetanh.png 87件 [詳細] filereru.png 81件 [詳細] filestep.png 80件 [詳細] filesigmoid.png 66件 [詳細]