はじめに
この記事はゼロから作るディープラーニング 4章ニューラルネットワークを自分なりに理解して分かりやすくアウトプットしたものです。
文系の自分でも理解することが出来たので、気持ちを楽にして読んでいただけたら幸いです。
また、本書を学習する際に参考にしていただけたらもっと嬉しいです。
ニューラルネットワークの出力層について
前回の記事でニューラルネットワークの中間層の実装まで解説しましたので、次は出力層を解説したいと思います。
ニューラルネットワークの出力層も簡単に言って仕舞えば活性化関数が違うだけで、ほとんどパーセプトロンの構造と変わりはありません。
しかし、出力層の活性化関数は機械学習のどの種類の問題を解くかによって変わってきます。
機械学習の分類問題を解きたいときは出力層にsoftmax関数を使い、機械学習の回帰問題を解きたいときは出力層に恒等関数を使います。
それではそれぞれを解説していきます。
分類問題を解く場合
分類問題を解きたいときは出力層にsoftmax関数を使います。さらにニューロンの数は分類したい種類の数と合わせます。
softmax関数は入力された値を確率的意味のある値に変換する関数です。これは言葉だとあまり理解しやすくないので、数式と図を出してみます。
上のようにニューラルネットワークが分類があっている確率を各分類の種類ごとに出してくれます。
具体的な処理としては、ネイビア数**入力値 ➗ ネイビア数**入力値の総和 をしていますが、処理の意味は考えずに、こんな処理するんだぐらいに留めておきましょう。
ではpythonで実装してみましょう。
b = np.array([0.3,2.9,4.0])
def softmax_function_pro(x):
x_max = np.max(x)
exp_x = np.exp(x - x_max)
exp_sum = exp_x.sum()
y = exp_x / exp_sum
return y
softmax_function_pro(b)
上のコードはオーバーフロー問題に対応しています。
オーバーフロー問題とは、コンピュータはものすごく大きな値を扱うのが苦手なので、ものすごく大きな値ができてしまった場合、不具合を起こしてしまう問題です。softmax関数は指数計算を使っているので、ものすごく大きな数ができやすいです。
上のコードだと、全ての入力値からそれらの入力値の最大値を引いてあげて、値を小さくすることによって指数計算でものすごく大きな数ができてしまうのを防いでいます。
回帰問題を解く場合
回帰問題を解くときは、恒等関数と言う関数を使います。
ですが、この関数は入力された値をそのまま出力するだけなので解説する必要もないでしょう。
一応コードは書いておきます。
def koutou_function(x):
return x