iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 19
0
Big Data

我的資料科學之路系列 第 33

[Day 33] Deep learning -- 訓練技巧 (i)

今天這篇談談有關訓練的技巧部份
大家玩deep learning應該會碰到不少挫折,像是很難達到好的accuracy、訓練時間太久等等問題
我們今天就來講講如何用一些訓練技巧來處理這些問題

改進Gradient descent method

訓練速度太慢

一般的Gradient descent方法是把所有資料一次做處理並且運算,但是當資料量太大的時候需要運算很久,而且收斂速度很慢。
這時候就有科學家想到,那我一次隨機從資料當中抽出一筆,根據這筆資料計算gradient,然後更新呢?
這個方法被稱為stochastic gradient descent,似乎有好那麼一點點,但是整個資料還是很大,要把整個資料跑完還是需要很多時間,如果沒有把資料都"看"過的話,就等於用了一部份的資料去訓練而已。

那如果我一次就拿一部份資料去訓練呢?這個方法稱為mini-batch,就是把資料切成若干小份,可能一個batch size會在10~100,甚至更大,取決於你的資料集大小跟你想要訓練幾個epoch,不過通常不要設太大。

Epoch就是一次的bachpropagation的流程,一次forward跟一次backward。

一直無法收斂

有可能是你的learning rate設的太大了,這樣雖然知道要往哪裡走,但是有可能會造成振盪。

但是設太小又很花時間,每次都走很慢,怎麼辦呢?
那就讓learning rate根據不同的梯度大小調整就好了阿!讓learning rate跟梯度成正比,很陡的地方就用比較大的learning rate,比較緩的地方就用比較小的。
這種改進的演算法稱為Adaptive gradient descent,或稱Adagrad。

還有另外一種稱為RMSprop,他希望learning rate可以不只考慮當下的梯度,也參考最近幾次的梯度,所以他會將他走過的梯度拿來做平均,並且調整learning rate,大家可以看看下面的動畫就可以了解不同的學習速度囉!


取自Alec Radford's animations for optimization algorithms

被困在local minimum了

momentum

在下降的過程當中有可能因為到了一個梯度接近0的地方,差一點點就可以繼續往下一個坡走了,這時候怎麼辦呢?
下降被困在這種地方真是太不科學了!乾脆引入物體的慣性(動量)到gradient descent的公式當中,所以更新的時候不是只有看梯度而已還多了慣性。
這樣改進的演算法稱為Adam,他採用了RMSprop跟momentum的方法。

比較複雜的momentum

這種演算法稱為Nadam,他用了RMSprop跟Nesterov momentum,不過由於這邊比較難講解,大家就可以自己google看看Nesterov momentum是什麼樣的一個東西囉!

以上這些演算法已經算很常見的了喔,各大框架都應該有。


上一篇
[Day 32] Deep learning -- activation function
下一篇
[Day 34] Deep learning -- 訓練技巧 (ii)
系列文
我的資料科學之路34

尚未有邦友留言

立即登入留言