機械学習とソシャゲ

スキルなしアラサーが機械学習を経験0から学ぶ。あと趣味のソシャゲ好きなのでそういう話かも

機械学習について何となくイメージ

機械学習むずい

最近は誤差逆伝播について勉強

 

 

 

ざっくりまとめる

 

結局、教師あり学習は結果を教師データ(正解)と比較→なるべく結果が正解に近づくようにパラメータ(重み、オフセットとか)を更新していきたい

 

つまりまず出来た結果と教師データの比較する必要がある

比較は二乗誤差だったり交差エントロピーだったり

何にせよ、比較して差が小さいと正解に結果が近いよね?

逆に値が大きいと、小さい方向にパラメータ弄りたい

 

つまり結果と正解の比較を関数(損失関数)として定義したとき、値の最小値(結果と正解がほぼ一緒)になるようにしたい

=損失関数の微分がゼロになるようにパラメータを持っていきたい

 

あるパラメータの微分値(勾配)がマイナスだと値が減っている方向なのでそのまま正の方向へパラメータをずらす

逆にプラスだと値が増えていってるので負の方向にパラメータを増やす

そうしてパラメータを更新した結果と正解をまた比較

以下勾配が最小になるまでパラメータ更新

これが勾配降下法

 

 

ここで微分をも求めるとあったけど、機械に人間がやってるような式での微分は求められない

X**2の微分は2xよ〜みたいなは機械は無理

(解析的な微分は無理なんや

 

なので実際に値をいれ、Δずらした値をいれ、その差を比較する

原始的な方法で微分をもとめる

これで、解決なんだけどこれが計算時間かかる

 

そこで誤差逆伝播

自分の勉強したイメージだと、微分の解析的なパターンを用意しておくイメージ

結局ニューラルネットワークだとwx,wx+bとか掛け算足し算の組み合わせ

あとは活発関数(シグモイド、relu,ソフトマックス)

なのでここら辺の複数の関数の微分式を予め定義(backword)しておけばあとは組み合わせでいけるやんって感じ(間違ってるかも

 

あとは、損失関数を定義したbackwordの組み合わせに、ぽいぽい入れていけば各パラメータの微分値が素早く求められる