ディープラーニングについてディープにラーニング。

思いっきり、自分が学んだことのアウトプットしていきますが、何分初心者。もし何かアドバイス等頂けましたら幸いです!

今日もオーマイ、オーライリー

f:id:kawam0t0:20191214170937p:plain

本日は第3章が終わったので、
アウトプットに努めます。

今回もコードというよりはニューラルネットワークの考え方、理論について
ちゃんと、理解ができた。

まず、1950年から生まれたパーセプトロンというディープラーニングのもととなる考え方では、
直線的な計算しかできなかった。
しかも、人間が自分で重みを設定しなくては行けなくて、
いかんせん、手間である。
そこで、ニューラルネットワークの考え方が出てきた。

f:id:kawam0t0:20191215112339p:plain

キーワードは「活性化関数」である。

活性化関数

活性化関数とは…
入力信号の総和を出力信号に変換してくれる関数
のことで、こいつの性格でかなり後述の動作が変わってくる。

多層のパーセプトロンの考え方、ニューロン同士のつながり方は同じであるが、
この次の層に入力される段階で大きく異なる。
では、図も交えながら見ていく。

f:id:kawam0t0:20191215112952p:plain
ニューラルネットワークの活性化関数の形状

パーセプトロンでは、return 0 もしくは return 1と
0 か 1 の判断でしかなかった。
ある一定の数値を超えれば1 、それ以下は0 という具合に(ステップ関数)。
しかし、あまりにも直線的であったために、
もう少し滑らかな判断をできないか?と考え、生まれたのが、
シグモイド関数や、レル関数など比較的滑らかな動きをしてくれるものだ。

シグモイドはS字に表現される。
レルは0以下は0と表現し、0以上はその実数値を表現する。
たとえて言うなら、シグモイド、レルは水車のように流れてきた水の量で、自分が
流す水の量も変わってくるということ。
ただし、もちろん、こちらも0~1の間で推移する。

このように、複雑な計算を伴うものは 0、1と判断ができないことが多いので、
ニューラルネットワークでは活性化関数に非線形を使う必要がある。

分類問題と回帰問題

主に、ニューラルネットワークは分類と回帰に大別できる

分類→データがどのクラスに属するのか、という問題。
   例えば、写真を見て、その人が男か女を判別する。(ソフトマックス関数を使用)

回帰→ある入力データから連続的な数値の予測を行う問題。
   例えば、写真の中の人を見て、その人の体重を予測する(恒等関数を使用)

ここで、恒等関数とソフトマックス関数の説明も行う。

f:id:kawam0t0:20191215112540p:plain
↑恒等関数

図の通り、恒等関数は入力をそのまま出力してくる。
だから、グラフにしても、かなり直線的になる。
確率的ではない。あくまで予測として使われる

f:id:kawam0t0:20191215115055p:plain
↑ソフトマックス関数

出力がすべての信号から矢印によって入力ノードに結びつく。
つまりは、すべての出力の各ニューロンが、まさかのすべての入力信号の影響を受けることになる。
→かなり確率的で、猫20%、犬70%、サル10% の結果が返ってきたら、犬!って答える。
 ここでのポイントはソフトバックス関数は確率的であるため、すべての総和が1となる。


図の通り、ソフトマックス関数のほうが複雑な計算を行うので、
時に、指数関数の計算がコンピューターで表せる桁数を超えてしまうときがある(オーバーフロー)

その時はある入力データの最大値(さっきの例なら犬の値:70%)をすべての要素から引き算する。
これにちなんでよく行われるのが、「正規化」である。
これは、
入力データ、出力データ問わず、あるきまった範囲に値を変換する処理のこと。
そして、その工程を前処理という。
これには理由があり、識別性能の向上や学習の高速化が見込めるからである。


図では単体の場合を考えて、記載をしたが、
これが200枚の画像をまとめて学習させるでも基本は同じであるが、
1枚1枚行うよりもある程度まとまった単位で行うほうが計算が早く、効率的である。
このまとまりをバッチといい、よくコードにはバッチサイズ、そういや、よくコードには、
batch_size = 32とか書いたりするなぁ~