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

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

今日もオーライリー

今日もオーライリー

だいぶわからんくなってきた。
やっぱり、数学の部分でだいぶ躓く。
ちゃんと勉強しといたらと思ってもしゃあないか。

かなり数式とか出てきたけど、
いまいちぴんと来なかった。
でも、理解したところだけ、理論はちゃんと抑えていたいところやな。

数値微分

微分とはある瞬間の変化量を表したものらしい。
たとえば、10分で2キロ走ったとしたら、その直前の1分で走った距離は?その直前の1秒で走った距離は?と
かなり短くして言って、その瞬間の変化量(傾きとかいうらしい)を測定する
まぁ、次から出てきたら、細かく区切る、ぐらいの把握でいるつもり。

勾配法

勾配自体、なんて読むの?から入ったけど、考え方は理解できた。
数式はちょっとむずかった。
UDEMYで別講座とったので、そちらでじっくり勉強しようと思う。
さて、勾配の話。
機械学習ニューラルネットワークともに、最適なパラメータを学習時に見つけなくてはいけない。
でも、ぶっちゃけ、最適なパラメータを探し出すのはいくら自動でやってくれるとはいえ、大変。
なんか、指標になるもの、目印になるものないかな?って考えた結果、
勾配(傾きの程度)を使えば、損失関数が最小になる値を探せるんじゃね?となる。

あんまり、いい例ではないけど、下の図のイメージです。
f:id:kawam0t0:20191216202317j:plain

つまり、一番線の傾きが少ないところの向きを矢印で表現してくれていて、
最適なパラメータを探す一つの指標にしているってこと。

ただし、注意がいるのは、
あくまで、傾向として、最小になるということ。絶対的に最小になるわけではないが、
手がかりを示してくれる奴。

学習率について

1回の学習でどれだけ学習をするべきなのか、どれだけパラメータの更新を行うのか、
というkとを決めるのが学習率。
これはハイパラメータとして区分されて、人が調整を強いられるパラメータ。

そもそも学習って

ニューラルネットワークは適応可能なおもみと、バイアスがあって、
この重みとバイアスを訓練データに適応するように調整することを学習という。

学習の手順

①ミニバッチ
 訓練データの中からランダムに一部のデータを選び出す。
 その、選ばれたデータをミニバッチといって、ミニバッチデータの損失関数値を減らす
 ことをこの段階では目的とする

②勾配の算出
 上記の通り、ミニバッチの損失関数の値を減らすために、最適な重みパラメータの勾配を求める

③パラメータの更新
 勾配の方向が決まったら、あとは各パラメータをちょっとずつ更新しながら、更新していく。

④繰り返す

ここで、使用するデータはミニバッチとして無作為に選んだデータを使用する。
そのことを確率的勾配降下法(SGD)と呼ばれる。

また、大切なのは、ミニバッチ学習で、学習回数を重ねれば重ねるほどに
過学習の可能性が出てくるので、
テストデータで同じ結果を得られるかの見分けをしなくてはならない。