全結合NN–出力層

・ニューラルネットワークを用いた分類器の出力層は通常、ソフトマックス活性化関数を用いる。

最後中間層出力をunとおく、予測結果 y` = softmax(un)

予測誤差E = 1/2(y`-y)^2

引き算でなく二乗することと1/2はどういう意味?→誤差を平均二乗誤差(MSE)とした場合、二乗を計算する。1/2をかけるのは微分する時に二乗の微分で2の係数を消すためである。

・出力層の種類

画像1

・誤差計算式

画像2

・ソフトマックス関数

画像3①は~③の数式に該当するソースコードを示し、一行づつ処理の説明をせよ

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)) #上式の右辺 

・交差エントロピー

画像4

①~②の数式に該当するソースコードを示し、一行づつ処理の説明をせよ。

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クラスのニューラルネットワークにカエルの画像を入れても犬か猫かの確率でしかない出ない。

この記事が気に入ったらサポートをしてみませんか?