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

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

活性化関数のレイヤ実装

本日は、オライリーの話。

活性化関数レイヤについて

活性化関数とは、重みとバイアスが入力値と重なって入ってきたときに、出力に大きな力を発揮してくれる関数。
シグモイドとか、レルなど、0から1の間で推移し、
正解ラベルとの確率を導き出す(導くのはソフトマックス)お手伝いをしてくれるのが活性化関数の役割

RELUレイヤ

RELUは前出の通り、0以下の通知の場合、0と出力を出すんだけど、
数字が正の場合はそのまま値を返してくるやつ。

f:id:kawam0t0:20191221083331p:plain

RELUレイヤはスイッチみたい。
順伝播時に電流が流れていたら、スイッチONにして、それ以外の時はOFFとし、それ以上は流さない性質があります。

シグモイドレイヤ

シグモイドはちょっとややこしい。
0から1の間で推移するのだが、その数値内をS字に描いていく。数式見てもよくわからんかった。
RELUと違って、
順伝播の値で0以下だから0で返す、のではなくちゃんと計算してくれるらしい。

f:id:kawam0t0:20191221084107p:plain

アファインレイヤ

ここで改めてニューラルネットワークの順伝播の復習。

ニューロンの入力、それから重み、バイアス、それぞれ多次元の配列であるとした場合、
入力される値は
多次元の配列だから、それぞれ内積で求めていく。
出力がYであった場合、
Y = (ニューロン×重み) + バイアス
そして、このYが活性化関数によって、次の層へと伝播されていく。
これが順伝播のイメージ。

f:id:kawam0t0:20191221085112p:plain
ここに、アファインと書かれているが、
つまり、アファインとは、ニューラルネットワークの順伝播で行う行列の積のことを呼ぶ。

つまりは、スカラの値ではなて行列で入力があったときにアファイン変換されるって意味。
その時、行列の内積になるので、転置を行って要素数を一致させてから計算するって話。

f:id:kawam0t0:20191221090119p:plain


ソフトマックス損失関数

ここまでは、入力層の話。
まだ、出力層まで入ってなくって、途中の推論過程で計算される順伝播、逆伝播のレイヤの話であった。
要はそれぞれ、活性化関数や、アファイン変換で数字を変換したり、0から1にして、学習をさせていくって話。


今回、説明を加えるソフトマックスは最後の出力層にあたる。

前出の画像をもう一回。
f:id:kawam0t0:20191221091023j:plain

ニューラルネットワークで行うりょりには、2つのフェーズがある。
一つは推論。もう一つは学習だ。

推論はあくまで、推論でしかない。
そのため、学習という過程は取らずに、図のようにアファインとレル、の層から出力されるスコア、によって、認識はできる。

しかし、学習となってくると、ソフトマックスが必要になっていく。
ディープラーニングにおいて、とても大切で、
今回はとても大切なソフトマックスについて触れる。

ただし、かなり複雑な計算方法なのでめちゃくちゃ簡略する。

f:id:kawam0t0:20191221091904p:plain
今回は交差エントロピー誤差を使っていく。

ここでは、3クラスの分類レイヤとして、それぞれ入力信号が3つ入ってくると仮定。

そして、過学習を防ぐために、正規化を行って、別値のy1,y2,y3の出力を行う。
そして最後の交差エントロピー誤差で教師ラベル(正解データ)を混ぜ込んでL(損失)を出力する。
そして、その出力から、次は逆伝播を行う。
逆伝播の時はいたってシンプル。

それぞれのaから正規化されたデータ(y1,y2,y3)から正解ラベルデータ(t1,t2,t3)を引き算してあげればよいだけである。
これが学習の過程で、こうやって逆伝播で前のレイヤに伝わっていく。
ソフトマックス関数の損失関数として、交差エントロピー誤差を使うと、逆伝播がとてもきれいな状態になっていく。

総じて誤差逆伝播法とは、入力層から出力された適切な重み、バイアスを加えた出力を教師データと出力を比較した差分(LOSS)を求めて、更にそこから逆伝播で適切なパラメータにし直していく方法。

非常にシンプルで、早いが計算がやや複雑なため、ここでは数式は控えます。
(いや、僕自身があまり理解できてないからです笑)