暇人日記

アラフォーおっさんのコーセラの機械学習の課題を解こうと頑張っています!

Coursera Machine Learning Week10 Video

今回はWeek 10のVideoをみての自分なりのサマリーです。

 

 

 

テーマはLearning With Large Datasetsです。

今までの課題はTraining Setが数千のレベルでしたが、

数百万のレベルになったときには計算コストが非常に高くなるので、

数百万のTraining Setを相手するときの方法が今回のテーマのようです。

 Video① Learning With Large Datasets

f:id:omoshiroamericanews:20191218174344p:plain

左の図は、Training Setを足すなどで改善が期待できるという説明でした。

どういうことかわかりません。。。

 

右の図は、1,000,000のTraining Setがあるのに1000で収束している。

よって多くのSampleを足すことに効果がない状態という説明でした。

ここまでよくわかります。

続いて、Featureを足すなどで改善が期待できるという説明がありました。

ここがよくわかりません。。。

 

そして説明の中で左の図はHigh Variansで右の図はHigh Biasという

説明がありました。

 

これは確かWeek6でやった内容です。

振り返ってみます。

 

f:id:omoshiroamericanews:20191218233447p:plain

 (出典;『Coursera Machine Learning』 By Mr. Andrew Ng)

 

 

右の図のHigh BiasはUnderfit問題でした。

 

Test ErrorとTrain Errorがもう同じなので

Training Setを増やしても同じ結果が得られるだけの状態です。

 

 

つまりもう少し精度の高いパラメーター出せるんじゃないの!?という

具体的な対策↓でした。

f:id:omoshiroamericanews:20191218233834p:plain

 

結論としては右の図はもっと精度の高い予測できるはずだから、

Featureを足すことを推奨されていると理解しました。

 

 左の図はHigh Varians=Overfit問題でした。

 

f:id:omoshiroamericanews:20191218234203p:plain

(出典;『Coursera Machine Learning』 By Mr. Andrew Ng)

Train Errorでは低いJがでるのに、Test Errorでは高くなるのは

Train Errorに精度を出しすぎという話でした。

 

解決策は↓でした。

f:id:omoshiroamericanews:20191218234405p:plain

 

 今回は3,000,000のTraining Setでm=1000で試行しているので、

Training Setを足せるので、ということですね。

 

 Video② Stochastic Gradient Descent

f:id:omoshiroamericanews:20191218175337p:plain

 

絵的に一番わかりやすかったのか↑の図です。

 

赤い線が一直線にGoalに向かっていますが、

ピンクの線はジクザクにぼんやりとGoalに向かっています。

 

赤い線が計算コストが高い今までの方法=Batch gradient decentです。

 

ピンクの線が今回教えてもらった方法でstocastic gradient decentです。

 

何が違うかということを式で説明してくれているのが↓です。

f:id:omoshiroamericanews:20191218180244p:plain

(出典;『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 

 

f:id:omoshiroamericanews:20191218231019p:plain

1000ごとにJの平均値をとってそれを上手のようにPlotすれば、

収束しているかどうかわかるということです。

 

左上の図は明らかに収束していっています。

赤い線は青の線より小さいαを使用しています。

初期の段階は収束は赤の方が遅いのですが、

赤の方が低いJ、つまり精度の高いパラメーターにたどり着いています。

 

右上の図も収束していっています。

赤い線は過去5000の平均で、青の線は過去1000の平均です。

5000単位の方がスムーズに収束していっています。

 

左下の図は収束していないように見える。

こういうときは1000単位の平均を5000単位の平均などにしてみるとよい。

もしかすると収束しているように見えるかもしれないし、

見えない場合はアルゴリズムが間違えてるか、Featureが間違えているかなどの

対応策を練れる判断基準になります。

 

右下の図は収束せずに発散していっている。

アルファを小さい値にすることが推奨されています。

 

 

ところで

簡単に「1000ごとにJの平均値をとって」といいますが、

プログラミング上どうするのでしょうか?。。。

Week10は課題がないので試せないのが残念です。

 

Video③ Mini-Batch Gradient Descent

f:id:omoshiroamericanews:20191218232715p:plain

 

これが一番わかりやすい絵でした。

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と書いてあるだけあって難しいです。。。

f:id:omoshiroamericanews:20191219103017p:plain

分かったのは

①(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つしかないのは説明が簡単なだけだからだという念押しまでありました。

 

f:id:omoshiroamericanews:20191219111141p:plain

考え方はシンプルで、大量のデータがあったら分割して

それぞれでJとGradを計算し、Gradを最後に足し合わせるということです。

 

一番最後のGradを足していいというのが一番へーと思ったところでした。 

 

 

 課題があればやってみたかったこと

簡単に「1000ごとにJの平均値をとって」といいますが、

プログラミング上どうするのでしょうか?。。。

Week10は課題がないので試せないのが残念です。

 

② 

Mini batch をWeek2の課題に適用するとどうなるか?

にTryしてみたいです。(時間があれば・・・)

 

Online Learningの課題やってみたいですね。

 

 今回はここまでです。また次回頑張ります