【DeepLearning特訓】MLPの基礎 活性化関数
E資格向けの自習アウトプット
自分用メモ
活性化関数は原則パラメータを持たず学習には関与しない。アフィン変換後に活性化関数による非線形写像により表現力の高いニューラルネットワークを構成する。
代表的な活性化関数
・ステップ関数:超シンプル出番ほぼ無し
・シグモイド関数:
・ハイパボリックタンジェント
・ReLU:
ステップ関数
import numpy as np # ステップ関数 def step(x): return np.array(x > 0, dtype=np.int) x = np.sort(np.random.randn(1000)) # 標準正規分布(平均0、標準偏差1、1000個) y = step(x) plt.plot(x, y, label='test')
シグモイド関数
入力を 0~1 になめらかに押し込める
中間層では勾配消失が起こるので使わない(最適化が難しい)
は numpy で np.exp(x)
import numpy as np # シグモイド関数 def sigmoid(x): return 1 / (1 + np.exp(-x)) x = np.sort(np.random.normal(0, 5, (1000))) # 正規分布(平均0、分散5、1000個) y = sigmoid(x) plt.plot(x, y)
ハイパボリックタンジェント
シグモイド関数に似ているが、恒等関数により近い
中間層で訓練においてよりよい性能を出すことが多い
numpy には、np.tanh() が用意されている
import numpy as np # ハイパボリックタンジェント def tanh(x): return np.tanh(x) x = np.sort(np.random.normal(0, 5, (1000))) # 正規分布(平均0、分散5、1000個) y = tanh(x) plt.plot(x, y)
ReLU(ランプ関数)
ディープラーニングを学習する上で一番よく聞くかもしれない
線形関数に近く最適化しやすい、活性化値が 0 になると勾配に基づく学習ができなるが、問題になることは少ないらしい
import numpy as np # ReLU def relu(x): return np.maximum(0, x) x = np.sort(np.random.randn(1000)) # 標準正規分布(平均0、標準偏差1、1000個) y = relu(x) plt.plot(x, y)
ReLUには多くの派生がある
試験に出そうなので抑えておく
Leaky ReLU:勾配 0 の領域をなくす
PReLU:𝛼_𝑖 を学習可能パラメータに
absolute value rectification:𝛼_𝑖を-1に固定