ゼロから作る Deep Learning; 輪読
これは「ゼロから作る Deep Learning」のちょっとした知識メモです。Deep Learningの索引のように使用できればと思います。
ニューロン(ノード)と呼ばれる入力値とその総和で作る式の意味
バイアスの項含めた入力信号の総和(= $\sum_i^n w_i x_i + b$)が0より大きい時、y =1を出力し、0以下の時y = 0を出力する。
i = 2の時、次になる。
\begin{equation} y=
\left\{
\begin{aligned}
1 \space (w_1 x_1 + w_2 x_2 + b > 0) \\
0 \space (w_1 x_1 + w_2 x_2 + b <= 0) \\
\end{aligned}
\right.
\end{equation}
$\sum_i^n w_i x_i + b$ について、${w_i}$ ${b}$ はパラメータであり、${x_i}$ は入力値である。
入力値の一つ一つはニューロンと呼ばれる。これは、入出力の変換様式が、神経細胞の流れのようであることに由来する。
h(x) := w_1 x_1 + w_2 x_2 + b
このようにおく。
h(x)は、出力値が0より大きいか、0以下かによって、${1, 0}$ に出力を制御する関数を使用する。
このような関数を活性化関数と呼ぶ。
活性化関数
ステップ関数、シグモイド関数、ReLU関数は活性化関数である。
ニューラルネットワークでは、シグモイド関数とReLU関数を使用する。
シグモイド関数
シグモイド関数は、次のように出力に $0 < x < 1 $ の実数値を取る。これが、ステップ関数との違いである。
>>> import numpy as np
>>> def sigmoid(x):
... return 1 / (1 + np.exp(-x))
...
>>> x = np.array([-1.0, 1.0, 2.0])
>>> sigmoid(x)
array([0.26894142, 0.73105858, 0.88079708])
plotすると次のようになる。
x = np.array([-1.0, 1.0, 2.0])
y = sigmoid(x)
import matplotlib.pyplot as plt
import numpy as np
# import matplotlib.pylab as plt
plt.xlabel('X')
plt.ylabel('Y')
plt.plot(x, y)
図のように出力値は $0<= y <= 1$ の実数値をとる。
シグモイド関数では、このように実数値を取るので、層を重ねた時に都合が良い。
活性化関数の性質
- $y \in [0, 1]$ となる値をとる
- 入力値が大きいほど、出力は1に近づき、小さいほど0に近づく
- 非線形
非線形であることは層を作る上で大事な性質となる。