ゼロから作るDeep Learning(O'REILLY)を読んで、自分なりにまとめてみます。
まだ途中です。(4章)
パーセプトロン
複数の信号を入力として受け取り、ひとつの信号を出力する。
信号とは「流す/流さない(1か0か)」のこと。
入力信号…ニューロンに送られる際に固有の重みが乗算される。
複数の入力信号の総和が計算され、閾値を超えた場合、1を出力する。
重み…wは入力信号への重要度をコントロールするパラメータとして機能する
バイアス…出力信号が1を出力する度合いを調整するパラメータとして機能する
単層パーセプトロンで、ANDやORなどの論理回路を表現できる、つまり、線形領域だけ表現できる。
多層パーセプトロンは、非線形領域を表現可能にし、XORゲートの表現もできる
ニューラルネットワーク
2層ネットワークは、入力層、中間層、出力層で構成される。
活性化関数
入力信号の総和を出力信号に変換する関数 h(x)のこと。
y = h(a)
aは、入力信号の総和(=ノード)、yは関数によって変換されたノード
シグモイド関数
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
ステップ関数
def step_func(x):
if x > 0:
return 1
else:
return 0
ニューラルネットワークでは、活性化関数には非線形関数を用いる。
ReLU関数
def relu(x):
return np.maximum(0, x)
入力が0を超えていれば、そのまま出力。0以下なら、0を出力する。
恒等関数
出力層の活性化関数 σ()(シグマ) 隠れ層の活性化関数と異なる
恒等関数は入力をそのまま出力する関数
多次元配列
配列の次元数 np.ndim()関数
配列の形状 インスタンス変数 shape から得る。 A.shape
行列の積 左側の行列の行と右側の行列の列の間の要素ごとの積の和によって計算する。
np.dot ドット積 1次元配列の場合はベクトル、2次元配列の場合は行列の積を計算する。
別の形状の行列の積 例えばAの1次元目、Bの0次元目の値が一致しないとエラー。計算されるCはAの行数とBの列数から構成される。対応する次元の要素数を一致させる。
出力層で利用する関数(恒等関数・ソフトマックス関数)
ソフトマックス関数
ニューラルネットワークは分類問題と回帰問題で用いることができる。出力層の活性化関数は一般的に、回帰では恒等関数、分類ではソフトマックス関数を使う。出力は、0から1.0までの実数になるので、確率として解釈できる。
def softmax(a): *オーバーフロー未対策
exp_a = np.exp(a)
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
機械学習のフェーズは「学習」「推論」(分類)
機械学習はデータが命。データから答えを探し、データからパターンを見つけ、データからストーリーを語る。
推論
推論フェーズではソフトマックス関数は省略する。
ニューラルネットワークの推論処理は、順方向伝播(forward propagation)という。学習では、訓練データでの重みパラメータの学習、推論時には、学習したパラメータを使い入力データの分類を行う。
正規化
データをある決まった範囲に変換する処理
前処理
ニューラルネットワークに入力データに対して、何らかの決まった変換を行うこと。
バッチ処理
データ転送がボトルネックになる場合、負荷を軽減できる。
学習
特徴量の抽出まで機械が行う=ニューラルネットワーク(ディープラーニング)
訓練データ(教師データ)、テストデータ
過学習
損失関数
「学習」とは訓練データから最適な重みパラメータの値を自動で獲得すること。
損失関数を基準として、その値が最も小さくなる重みパラメータを探し出す。
~2乗和誤差~
def mean_squared_error(y, t):
return 0.5 * np.sum((y-t) **2)
one-hot表現
正解ラベルを1として、それ以外は0で表す表記法
~交差エントロピー誤差~
def cross_entropy_error(y, t):
delta = 1e - 7
return -np.sum(t * np.log(y + delta))
ミニバッチ学習