本章ではニューラルネットワークが紹介がされている.
ニューラルネットワークは,多層パーセプトロンに活性化関数の概念が加わったもの(と言える)
ニューラルネットワークの例
- 入力層
- 中間層
- 隠れ層ともいう
- 出力層
パーセプトロン
- 上図を式で表すと
$$ y = h(b + w_{1}x_{1} + w_{2}x_{2}) $$
$$ h(x) = \left\{ \begin{array}{} 0 & ( x \leq 0) \\ 1 & ( x > 0) \end{array} \right. $$
活性化関数の登場
- 活性化関数(activation function)とは
- 入力信号の総和を出力信号に変換する関数
- ニューラルネットワークで使われる活性化関数
- ステップ関数
- シグモイド関数(sigmoid function)
- ステップ関数の実装
def step_function(x): y = x > 0 return y.astype(np.int)
- シグモイド関数の実装
def sigmoid(x): return 1 / (1 + np.exp(-x))
- ステップ関数とシグモイド関数の共通点
- 入力信号が重要な情報であれば大きな値を出力し,重要でなければ小さな値を出力する
- 入力信号が小さくても大きくても,出力信号の値を0から1の間に押し込める
- どちらも非線形関数
- ニューラルネットワークでは活性化関数に非線形関数を用いる必要がある.
- 線形関数を用いると,ニューラルネットワークの層を深くする意味がなくなってしまう.
- 最近はReLU(Rectified Linear Unit)関数も用いられる
- 入力が0を超えていれば,その入力をそのまま出力
- 入力が0以下なら,0を出力
ニューラルネットワークの実装
import numpy as np import matplotlib.pyplot as plt def sigmoid(x): return 1 / (1 + np.exp(-x)) def identity_function(x): return x def init_network(): network = {} network['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]]) network['b1'] = np.array([0.1, 0.2, 0.3]) network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]]) network['b2'] = np.array([0.1, 0.2]) network['W3'] = np.array([[0.1, 0.3], [0.2, 0.4]]) network['b3'] = np.array([0.1, 0.2]) return network def forward(network, x): W1, W2, W3 = network['W1'], network['W2'], network['W3'] b1, b2, b3 = network['b1'], network['b2'], network['b3'] a1 = np.dot(x, W1) + b1 z1 = sigmoid(a1) a2 = np.dot(z1, W2) + b2 z2 = sigmoid(a2) a3 = np.dot(z2, W3) + b3 y = identity_function (a3) return y network = init_network() x = np.array([1.0, 0.5]) y = forward(network, x) print(y)
出力層の設計
- 機械学習の問題は分類問題と回帰問題に大別できる
- 分類問題とは
- データがどのクラスに属するかという問題
- 人のうつった画像から性別を分類する
- 出力層の活性化関数は恒等関数を用いる
- 回帰問題とは
- ある入力データから数値の予測を行う
- 画像から体重を予測する
- 出力層の活性化関数はソフトマックス関数を用いる
- 分類問題とは
- ソフトマックス関数
- ソフトマックス関数の出力の総和は1となる
- ソフトマックス関数の出力を確率として解釈できる
- ソフトマックス関数の出力の総和は1となる
本章で学んだこと
- ニューラルネットワークでは,活性化関数としてシグモイド関数やReLU関数のような滑らかに変化する関数を利用する
- NumPyの多次元配列をうまく使うことで,ニューラルネットワークを効率よく実装することができる
- 機械学習の問題は,回帰問題と分類問題に大別できる
- 出力層で使用する活性化関数は,回帰問題では恒等関数,分類問題ではソフトマックス関数を一般的に利用する
- 分類問題では,出力層のニューロンの数を分類するクラス数に設定する
- 入力データのまとまりをバッチと言い,バッチ単位で推論処理を行うことで計算を拘束に行うことができる.