假設咱們的數據量很是多,達到了500萬以上,那麼此時若是按照傳統的梯度降低算法,那麼訓練模型所花費的時間將很是巨大,因此咱們對數據作以下處理:html
如圖所示,咱們以1000爲單位,將數據進行劃分,令x{1}={x(1),x(2)……x(5000)}, 通常地用x{t},y{t}來表示劃分後的mini-batch。python
注意區分該系列教學視頻的符號標記:算法
小括號() 表示具體的某一個元素,指一個具體的值,例如x(i)
網絡中括號[] 表示神經網絡中的某一層,例如Z[l]
函數大括號{} 表示將數據細分後的一個集合,例如x{1}={x(1),x(2)……x(1000)}
學習
假設咱們有5,000,000個數據,每1000做爲一個集合,計入上面所提到的x{1}={x(1),x(2)……x(1000)},……
優化
for i in range(5000):
2)每一次迭代其實與以前筆記中所提到的計算過程同樣,首先是前向傳播,可是每次計算的數量是1000atom
4)反向傳播spa
注意,mini-batch相比於以前一次性計算全部數據不只速度快,並且反向傳播須要計算5000次,因此效果也更好。code
如上面所提到的,咱們以1000位單位對數據進行劃分,可是這只是爲了更方便說明問題才這樣劃分的,那麼咱們在實際操做中應該如何劃分呢?
首先考慮兩個極端狀況:
mini-batch size = m
此時即爲Batch gradient descent,(x{t},y{t})=(X,Y)
mini-batch size = 1
此時即爲Stochastic gradient descent, (x{t},y{t})=(x(i),y(i))(x{t},y{t})=(x(i),y(i))
如圖示,藍色收斂曲線表示mini-batch size=m,比較耗時,可是最後可以收斂到最小值;而紫色收斂曲線表示mini-batch size=1,雖然速度可能較快,可是收斂曲線十分曲折,而且最終不會收斂到最小點,而是在其附近來回波動。
說了這麼多,那麼mini-batch size該如何選擇呢?如下是選擇的原則:
爲了理解後面會提到的各類優化算法,咱們須要用到指數加權平均,在統計學中也叫作指數加權移動平均(Exponentially Weighted Moving Averages)。
首先咱們假設有一年的溫度數據,以下圖所示
咱們如今須要計算出一個溫度趨勢曲線,計算方法以下:
V0=0
V1=β∗V0+(1−β)θ1
…………
Vt=β∗Vt−1+(1−β)θt
上面的θtθt表示第t天的溫度,β是可調節的參數,Vt表示11−β天的每日溫度。
咱們將上面的公式Vt=β∗Vt−1+(1−β)θt展開能夠獲得
(假設β=0.9)
能夠看到在計算第t天的加權溫度時,也將以前的溫度考慮進來,可是都有一個衰減因子β,而且隨着天數的增長,衰減幅度也不斷增長。(有點相似於卷積計算)
爲何須要修正呢?咱們仔細分析一下就知道了
首先咱們假設的是β=0.98,V0=0,而後由Vt=βVt−1+(1−β)θt可知
V1=0.98V0+0.02θ1=0.02θ1
V2=0.98V1+0.02θ2=0.0196θ1+0.02θ2
假設θ1=40℃,那麼V1=0.02∗40=0.8℃,這顯然相差太大,同理對於後面的溫度的計算也只會是變差愈來愈大。因此咱們須要進行誤差修正,具體方法以下:
注意!!!上面公式中的 Vt−1是未修正的值。
爲方便說明,令β=0.98,θ1=40℃,θ2=39℃,則
當t=1,θ1=40℃時,V1=0.02∗401−0.98=40,哇哦~有沒有很巧的感受,再看
當t=2,θ2=39℃時,V2=0.98∗Vt−1+0.02∗θ21−0.982=0.98∗(0.02∗θ1)+0.02∗391−0.982=39.49
因此,記住你若是直接用修正後的Vt−1值代入計算就大錯特錯了
首先介紹一下通常的梯度算法收斂狀況是這樣的
能夠看到,在前進的道路上十分曲折,走了很多彎路,在縱向咱們但願走得慢一點,橫向則但願走得快一點,因此纔有了動量梯度降低算法。
Momentum算法的第t次迭代:
最終獲得收斂的效果以下圖的紅色曲線所示。
該算法中涉及到的超參數有兩個,分別是 α,β,其中通常β=0.9是比較常取的值。
該算法全稱叫Root Mean Square Prop(均方根傳播)
這一節和上一節講的都比較歸納,不是很深刻,因此就直接把算法記錄下來吧。
在第t次迭代:
收斂效果(原諒色)
Adam實際上是Momentum和RMSprop兩個算法的結合,具體算法以下:
該算法中的超參數有α,β1,β2,εα,β1,β2,ε,通常來講β1=0.9,β2=0.999,ε=10−8β1=0.9,β2=0.999,ε=10−8
以前算法中提到的學習率α都是一個常數,這樣有可能會一個問題,就是剛開始收斂速度剛恰好,但是在後面收斂過程當中學習率偏大,致使不能徹底收斂,而是在最低點來回波動。因此爲了解決這個問題,須要讓學習率可以隨着迭代次數的增長進行衰減,常見的計算公式有以下幾種:
decay_rate:衰減率
epoch_num: 迭代次數
舉個栗子:
假設α0α0初始化爲0.2,decay_rate=1,則α的衰減過程以下:
Epoch | α |
---|---|
1 | 0.1 |
2 | 0.067 |
3 | 0.05 |
…… | …… |
圖左中有不少局部最優勢。
圖右用青色標記出來的點稱爲鞍點(saddle point),由於和馬鞍類似,因此稱爲鞍點。
鞍點相比於局部最優勢要更加棘手,由於從橫向上看彷佛是最低點,可是縱向上看卻不是最低點,因此收斂過程有點緩慢,緣由以下:
橫向收斂只能沿着紅線方向收斂,直到鞍點,而到了鞍點後才能往兩邊收斂,因此收斂的比較緩慢。
可是momentum和Adam等算法由於可以加速學習,因此收斂速率更快,可以更快地收斂。