機械学習とソシャゲ

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

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

機械学習むずい

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

 

 

 

ざっくりまとめる

 

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

 

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

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

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

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

 

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

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

 

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

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

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

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

これが勾配降下法

 

 

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

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

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

 

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

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

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

 

そこで誤差逆伝播

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

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

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

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

 

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

 

 

 

 

 

 

 

 

 

arg max とmaxの違い

maxf(x):f(x) の最大値
arg maxf(x):f(x) を最大にする x の集合

 

つまりmaxはユニークなf(x)自体の値を指すのに対して、

arg maxはそれを満たすxの値(集合)

 

max sin(x) = 1

arg max sin(x) = {π/2, (π/2+2*π),(π/2+4*π)・・・}

 

 

とりあえずざっくり概要をつかむ

機械学習について何か学ぶ

いきなり専門書を手にすると性格上投げ出すのでわかりやすい入門の入門書を

本屋さんにいって手当り次第みた結果

ディープラーニング (やさしく知りたい先端科学シリーズ2)

ディープラーニング (やさしく知りたい先端科学シリーズ2)

が良さげだったので購入

2日でばっと読み終える

非常にためになった

アルゴリズムの詳細は全然かいてないけど概要をつかむのには良い

この本に書いてあるキーワードを起点としてググるのもありだと思った

以下知りたいキーワード

知りたいアルゴリズム

強化学習

線形回帰

ベイズ線形回帰

Gram

構文解析

自然言語処理

ライブラリ

フレームワーク

Coffee

Tensor

Torch

データセット

gpu

Fpga

API