今日もオーマイ、オーライリー
本日は第3章が終わったので、
アウトプットに努めます。
今回もコードというよりはニューラルネットワークの考え方、理論について
ちゃんと、理解ができた。
まず、1950年から生まれたパーセプトロンというディープラーニングのもととなる考え方では、
直線的な計算しかできなかった。
しかも、人間が自分で重みを設定しなくては行けなくて、
いかんせん、手間である。
そこで、ニューラルネットワークの考え方が出てきた。
キーワードは「活性化関数」である。
活性化関数
活性化関数とは…
入力信号の総和を出力信号に変換してくれる関数
のことで、こいつの性格でかなり後述の動作が変わってくる。
多層のパーセプトロンの考え方、ニューロン同士のつながり方は同じであるが、
この次の層に入力される段階で大きく異なる。
では、図も交えながら見ていく。
↑ニューラルネットワークの活性化関数の形状
パーセプトロンでは、return 0 もしくは return 1と
0 か 1 の判断でしかなかった。
ある一定の数値を超えれば1 、それ以下は0 という具合に(ステップ関数)。
しかし、あまりにも直線的であったために、
もう少し滑らかな判断をできないか?と考え、生まれたのが、
シグモイド関数や、レル関数など比較的滑らかな動きをしてくれるものだ。
シグモイドはS字に表現される。
レルは0以下は0と表現し、0以上はその実数値を表現する。
たとえて言うなら、シグモイド、レルは水車のように流れてきた水の量で、自分が
流す水の量も変わってくるということ。
ただし、もちろん、こちらも0~1の間で推移する。
このように、複雑な計算を伴うものは 0、1と判断ができないことが多いので、
ニューラルネットワークでは活性化関数に非線形を使う必要がある。
分類問題と回帰問題
主に、ニューラルネットワークは分類と回帰に大別できる
分類→データがどのクラスに属するのか、という問題。
例えば、写真を見て、その人が男か女を判別する。(ソフトマックス関数を使用)
回帰→ある入力データから連続的な数値の予測を行う問題。
例えば、写真の中の人を見て、その人の体重を予測する(恒等関数を使用)
ここで、恒等関数とソフトマックス関数の説明も行う。
↑恒等関数
図の通り、恒等関数は入力をそのまま出力してくる。
だから、グラフにしても、かなり直線的になる。
確率的ではない。あくまで予測として使われる
↑ソフトマックス関数
出力がすべての信号から矢印によって入力ノードに結びつく。
つまりは、すべての出力の各ニューロンが、まさかのすべての入力信号の影響を受けることになる。
→かなり確率的で、猫20%、犬70%、サル10% の結果が返ってきたら、犬!って答える。
ここでのポイントはソフトバックス関数は確率的であるため、すべての総和が1となる。
図の通り、ソフトマックス関数のほうが複雑な計算を行うので、
時に、指数関数の計算がコンピューターで表せる桁数を超えてしまうときがある(オーバーフロー)
その時はある入力データの最大値(さっきの例なら犬の値:70%)をすべての要素から引き算する。
これにちなんでよく行われるのが、「正規化」である。
これは、
入力データ、出力データ問わず、あるきまった範囲に値を変換する処理のこと。
そして、その工程を前処理という。
これには理由があり、識別性能の向上や学習の高速化が見込めるからである。
図では単体の場合を考えて、記載をしたが、
これが200枚の画像をまとめて学習させるでも基本は同じであるが、
1枚1枚行うよりもある程度まとまった単位で行うほうが計算が早く、効率的である。
このまとまりをバッチといい、よくコードにはバッチサイズ、そういや、よくコードには、
batch_size = 32とか書いたりするなぁ~