ML Lecture 9-1: Tips for Training DNN
一般DL的過程,就是先走ML三步驟,得到一個train好的NN,這邊我們要先把這組NN應用在training set上,看performance好不好,好的話才可以應用在testing set。
因為對其他方法training(例如k-nearest neighbor或Decision tree)來說,不用在意training set,因為performance一定是最好,但對NN來說,卻是需要檢查training data的 (DL特別容易train壞掉)
所以說,如果在testing set上結果不好,應該線看看在training set上結果是不是也不好。
如果training set本身performance就不好,那不是overfitting,而是根本就train壞了
只有在training set的performance好,testing set上performance差,才是overfitting!(兩個都差不算),例如下圖,如果只看testing set (右),會覺得定是layer太多,參數太多,導致overfitting,但其實,在training set上,20曾其實本來就比較好了,所以不能什麼事都怪overfittindg
至於為什麼會train壞了呢?其實在做NN training的時候,有太多問題可以讓training 結果不好,例如local minimum、saddle point、plateau等等
但這也不算是under fitting,因為under fitting比較好的解釋應該是:model的參數太少,以至於沒有能力可以解出當前的問題。但這邊56層做得比20層,肯定不是56層的能力不夠,因為只要前20層做一樣的事情,後面啥事都不幹(全都identity)也可以做到跟20層一樣的performance,所以不算under fitting
針對DL train不好這件事,解決方法通常會針對是 因為training data不好 或 因為testing data不好 來設計,亂用方法,可能會讓結果越來越糟。
例如有個方法叫dropout,他是用在testing data的performance不好時用的,不適合用在training data的perfoemance不好時
所以我們在 Deep Learning Recipe,會遇到兩個問題:training上performance不好 與 testing上performance不好,接著我們就針對這兩種問題來討論
這邊有兩個做法: