3章 ニューラルネットワーク / ゼロから作る Deep Learning
バイアス
ニューロンの発火のしやすさをコントロール
重み
各信号の重要性をコントロール
活性化関数の登場
$ h(x) = \left\{ \begin{array}{c} 0 & (x \leqq 0 ) \\ 1 & (x \gt 0 ) \end{array} \right.
$ a = b + w1x1 + w2x2
$ y = h(a)
活性化関数 (activation function)
h(x)のような入力信号の総和を出力信号に変換する関数のこと
https://gyazo.com/b0a4d51eacaca8e469db0df60a4739ad
活性化関数
閾値を境にして出力が切り替わる関数
→「ステップ関数」や「階段関数」と呼ばれる
パーセプトロンでは、活性化関数にステップ関数を利用している
シグモイド関数
→ ニューラルネットワークでよく用いられる活性化関数のひとつ
https://gyazo.com/1e235ccae17b50decb93f5e8a2da43dc
$ exp(-x) は $ e^{-x}を意味する
eはネイピア数の2.7182...の実数を表す
ステップ関数のグラフ
code:chap3/step_function.py
import numpy as np
import matplotlib.pyplot as plt
def step_function(x):
return np.array(x > 0, dtype=np.int32)
x = np.arange(-5, 5, 0.1) # 0から6まで0.1刻みで生成
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1) # y軸の範囲を指定
plt.show()
https://gyazo.com/4b4775ebd655d9fc4d2e36c415efe528
シグモイド関数のグラフ
code:chap3/step_function.py
import numpy as np
import matplotlib.pyplot as plt
def step_function(x):
return np.array(x > 0, dtype=np.int32)
def sigmoid(x):
return 1 / (1 + np.exp(-x))
x = np.arange(-5, 5, 0.1) # 0から6まで0.1刻みで生成
y1 = step_function(x)
y2 = sigmoid(x)
plt.plot(x, y1, label="step")
plt.plot(x, y2, label="sigmoid", linestyle= "--")
plt.ylim(-0.1, 1.1) # y軸の範囲を指定
plt.legend()
plt.show()
https://gyazo.com/149a8f0ad10b7ee89609cde4f2f075ec
code:python
def sigmoid(x):
return 1 / (1 + np.exp(-x))
ブロードキャストに秘密がある
code:python
>> import numpy as np
>> t
>> 1.0 + t
>> 1.0 / t
非線形関数
ステップ関数とシグモイド関数の共通点
入力が小さいと0に近づき、入力が大きいと1に近づく
どんなに入力信号の値が大きくとも(小さくとも)値を0から1の間に押し込める
非線形関数
ニューラルネットワークの活性化関数にには非線形関数を用いる必要がある
foo
ReLU関数