今回はWeek 10のVideoをみての自分なりのサマリーです。
- Video① Learning With Large Datasets
- Video② Stochastic Gradient Descent
- Video④ Stochastic Gradient Descent Convergence
- Video③ Mini-Batch Gradient Descent
- Video⑤ Online Learning
- Video⑥ Map Reduce and Data Parallelism
- 課題があればやってみたかったこと
テーマはLearning With Large Datasetsです。
今までの課題はTraining Setが数千のレベルでしたが、
数百万のレベルになったときには計算コストが非常に高くなるので、
数百万のTraining Setを相手するときの方法が今回のテーマのようです。
Video① Learning With Large Datasets
左の図は、Training Setを足すなどで改善が期待できるという説明でした。
どういうことかわかりません。。。
右の図は、1,000,000のTraining Setがあるのに1000で収束している。
よって多くのSampleを足すことに効果がない状態という説明でした。
ここまでよくわかります。
続いて、Featureを足すなどで改善が期待できるという説明がありました。
ここがよくわかりません。。。
そして説明の中で左の図はHigh Variansで右の図はHigh Biasという
説明がありました。
これは確かWeek6でやった内容です。
振り返ってみます。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
右の図のHigh BiasはUnderfit問題でした。
Test ErrorとTrain Errorがもう同じなので
Training Setを増やしても同じ結果が得られるだけの状態です。
つまりもう少し精度の高いパラメーター出せるんじゃないの!?という
具体的な対策↓でした。
結論としては右の図はもっと精度の高い予測できるはずだから、
Featureを足すことを推奨されていると理解しました。
左の図はHigh Varians=Overfit問題でした。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
Train Errorでは低いJがでるのに、Test Errorでは高くなるのは
Train Errorに精度を出しすぎという話でした。
解決策は↓でした。
今回は3,000,000のTraining Setでm=1000で試行しているので、
Training Setを足せるので、ということですね。
Video② Stochastic Gradient Descent
絵的に一番わかりやすかったのか↑の図です。
赤い線が一直線にGoalに向かっていますが、
ピンクの線はジクザクにぼんやりとGoalに向かっています。
赤い線が計算コストが高い今までの方法=Batch gradient decentです。
ピンクの線が今回教えてもらった方法でstocastic gradient decentです。
何が違うかということを式で説明してくれているのが↓です。
(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)
Batch gradient descentは全Training Setを計算していますが、
Stochastic gradient decentは1つのTraining Setのみ計算しています。
Training Setが変わればパラメーターも変わるので、
Stochasticの方は一直線ではなくジクザクになると理解しました。
Batchが1直線にGoalに向かえるのは全Training Setを
計算しているからこそ、と理解しました。
ただ、StochasticがジクザクでもBatchと同じあたりにいける理由がよくわかりません。
分からなかったので、こちらの方のブログを頼りました↓
一文、はっきりと
『Stochastic Gradient Descentはデータ1つ毎にパラメータ を更新するため、
常に目的関数が小さくなるとは限りません。』
記載されていました。
すっきりです。
ではどうやって小さくするか、小さくなることを確認するか
これはVideo④ Stochastic Gradient Descent Convergenceに載っていました。
Video④ Stochastic Gradient Descent Convergence
1000ごとにJの平均値をとってそれを上手のようにPlotすれば、
収束しているかどうかわかるということです。
左上の図は明らかに収束していっています。
赤い線は青の線より小さいαを使用しています。
初期の段階は収束は赤の方が遅いのですが、
赤の方が低いJ、つまり精度の高いパラメーターにたどり着いています。
右上の図も収束していっています。
赤い線は過去5000の平均で、青の線は過去1000の平均です。
5000単位の方がスムーズに収束していっています。
左下の図は収束していないように見える。
こういうときは1000単位の平均を5000単位の平均などにしてみるとよい。
もしかすると収束しているように見えるかもしれないし、
見えない場合はアルゴリズムが間違えてるか、Featureが間違えているかなどの
対応策を練れる判断基準になります。
右下の図は収束せずに発散していっている。
アルファを小さい値にすることが推奨されています。
ところで
簡単に「1000ごとにJの平均値をとって」といいますが、
プログラミング上どうするのでしょうか?。。。
Week10は課題がないので試せないのが残念です。
Video③ Mini-Batch Gradient Descent
これが一番わかりやすい絵でした。
Mini-Batch GradientはBatch GradientとStochastic Gradientの中間という
説明でした。
数が一番わかりやすいと思いました。
3,000,000のTraining Setがあるとして、
Batch 3,000,000すべて計算
Stochastic 1つずつ計算
Mini-Batch 10-100個ずつ計算
というイメージですね。
Mini batch をWeek2の課題に適用するとどうなるか?
にTryしてみたいです。(時間があれば・・・)
Video⑤ Online Learning
Advanced Topicと書いてあるだけあって難しいです。。。
分かったのは
①(xi,yi)ではなく(x、y)とすること。これは1Set試したら保存したりせずに
1回限りのJ,Grad検証として使うということのようです。
なぜならOnlineにはユーザーデータは絶え間なく流れてくるから、
と言っていました。
1回限りという意味ではStochasticに似ている気がします。
②1回限りだから、ユーザーの志向の変化に対応できるということです。
これはわかりやすいです。常に最新のデータを見てるのでそうなる気がします。
Online Lerningの課題やってみたかったですね。
Video⑥ Map Reduce and Data Parallelism
冒頭でMap ReduceはVideoは1つしかないが、ここまで説明したものと同じくらい
重要な考え方と説明がありました。
Videoが1つしかないのは説明が簡単なだけだからだという念押しまでありました。
考え方はシンプルで、大量のデータがあったら分割して
それぞれでJとGradを計算し、Gradを最後に足し合わせるということです。
一番最後のGradを足していいというのが一番へーと思ったところでした。
課題があればやってみたかったこと
①
簡単に「1000ごとにJの平均値をとって」といいますが、
プログラミング上どうするのでしょうか?。。。
Week10は課題がないので試せないのが残念です。
②
Mini batch をWeek2の課題に適用するとどうなるか?
にTryしてみたいです。(時間があれば・・・)
③
Online Learningの課題やってみたいですね。
今回はここまでです。また次回頑張ります