全結合NN–出力層
・ニューラルネットワークを用いた分類器の出力層は通常、ソフトマックス活性化関数を用いる。
最後中間層出力をunとおく、予測結果 y` = softmax(un)
予測誤差E = 1/2(y`-y)^2
引き算でなく二乗することと1/2はどういう意味?→誤差を平均二乗誤差(MSE)とした場合、二乗を計算する。1/2をかけるのは微分する時に二乗の微分で2の係数を消すためである。
・出力層の種類
・誤差計算式
・ソフトマックス関数
①は~③の数式に該当するソースコードを示し、一行づつ処理の説明をせよ
def softmax(x):
if x.ndim == 2: #xが2次元の場合(複数batch)
x = x.T #xを転置する
x = x -np.max(x, axis=0) #指数計算の時、大きすぎることを防げる
y = np.exp(x) /np.sum(np.exp(x), axis=0) #上式の右辺
return y.T #結果を返す(複数batch)
x = x -np.max(x) #オーバーフロー対策
return np.exp(x) / np.sum(np.exp(x)) #上式の右辺
・交差エントロピー
①~②の数式に該当するソースコードを示し、一行づつ処理の説明をせよ。
def cross_entropy_error(d, y):
if y.ndim == 1: # yが一次元の場合(1 batch)
d = d.reshape(1, d.size) # dを縦ベクトルにする
y = y.reshape(1, y.size)
# 教師データがone-hot-vectorの場合、正解ラベルのインデックスに変換
if d.size == y.size:
d = d.argmax(axis=1)
batch_size = y.shape[0]
# 上記の式で、d=1の時のみ計算値がゼロでないため、直接的にd=1のインデックスでyを抽出する
return-np.sum(np.log(y[np.arange(batch_size), d] + 1e-7)) / batch_size
考察
・ソフトマックスの良い点は出力が該当クラスの確率で、全クラス確率の和が1である。悪い点はどんな入力でも必ずどのクラスに属するという点。例えば、犬か猫かの2クラスのニューラルネットワークにカエルの画像を入れても犬か猫かの確率でしかない出ない。