今日もオーライリー
今日もオーライリー
だいぶわからんくなってきた。
やっぱり、数学の部分でだいぶ躓く。
ちゃんと勉強しといたらと思ってもしゃあないか。
かなり数式とか出てきたけど、
いまいちぴんと来なかった。
でも、理解したところだけ、理論はちゃんと抑えていたいところやな。
数値微分
微分とはある瞬間の変化量を表したものらしい。
たとえば、10分で2キロ走ったとしたら、その直前の1分で走った距離は?その直前の1秒で走った距離は?と
かなり短くして言って、その瞬間の変化量(傾きとかいうらしい)を測定する
まぁ、次から出てきたら、細かく区切る、ぐらいの把握でいるつもり。
勾配法
勾配自体、なんて読むの?から入ったけど、考え方は理解できた。
数式はちょっとむずかった。
UDEMYで別講座とったので、そちらでじっくり勉強しようと思う。
さて、勾配の話。
機械学習・ニューラルネットワークともに、最適なパラメータを学習時に見つけなくてはいけない。
でも、ぶっちゃけ、最適なパラメータを探し出すのはいくら自動でやってくれるとはいえ、大変。
なんか、指標になるもの、目印になるものないかな?って考えた結果、
勾配(傾きの程度)を使えば、損失関数が最小になる値を探せるんじゃね?となる。
あんまり、いい例ではないけど、下の図のイメージです。
つまり、一番線の傾きが少ないところの向きを矢印で表現してくれていて、
最適なパラメータを探す一つの指標にしているってこと。
ただし、注意がいるのは、
あくまで、傾向として、最小になるということ。絶対的に最小になるわけではないが、
手がかりを示してくれる奴。
学習率について
1回の学習でどれだけ学習をするべきなのか、どれだけパラメータの更新を行うのか、
というkとを決めるのが学習率。
これはハイパラメータとして区分されて、人が調整を強いられるパラメータ。
そもそも学習って
ニューラルネットワークは適応可能なおもみと、バイアスがあって、
この重みとバイアスを訓練データに適応するように調整することを学習という。
学習の手順
①ミニバッチ
訓練データの中からランダムに一部のデータを選び出す。
その、選ばれたデータをミニバッチといって、ミニバッチデータの損失関数値を減らす
ことをこの段階では目的とする
②勾配の算出
上記の通り、ミニバッチの損失関数の値を減らすために、最適な重みパラメータの勾配を求める
③パラメータの更新
勾配の方向が決まったら、あとは各パラメータをちょっとずつ更新しながら、更新していく。
④繰り返す
ここで、使用するデータはミニバッチとして無作為に選んだデータを使用する。
そのことを確率的勾配降下法(SGD)と呼ばれる。
また、大切なのは、ミニバッチ学習で、学習回数を重ねれば重ねるほどに
過学習の可能性が出てくるので、
テストデータで同じ結果を得られるかの見分けをしなくてはならない。