1. 程式人生 > >吳恩達改善深層神經網路引數:超引數除錯、正則化以及優化——優化演算法

吳恩達改善深層神經網路引數:超引數除錯、正則化以及優化——優化演算法

機器學習的應用是一個高度依賴經驗的過程,伴隨著大量的迭代過程,你需要訓練大量的模型才能找到合適的那個,優化演算法能夠幫助你快速訓練模型。

難點:機器學習沒有在大資料發揮最大的作用,我們可以利用巨大的資料集來訓練網路,但是在大資料下訓練網路速度很慢;

使用快速的優化演算法大大提高效率

mini-batch梯度下降法

向量化能讓你有效的對所有的m個例子進行計算,允許你處理整個訓練集而無需某個明確的公式。

在這裡插入圖片描述

m很大時,處理速度非常慢
在對整個訓練集進行梯度下降時,必須處理整個訓練集,才能進行下一步梯度下降。
假設有500萬個資料,必須處理完500萬個資料,才能進行下一步梯度下降。

mini—beach

將訓練集分成小一點的子集
將500萬個資料沒1000個分為一組,分為5000個子集

在這裡插入圖片描述
在這裡插入圖片描述

mini—beach的資料集就變成了X^{t},Y^{t}
X^{1}Y^{1}中有1000個樣本
同時處理單個mini-batchX^{t},Y^{t}
#演算法
{
for t = 1,...,5000{
#forward propagation on X^{t}
#向量化處理1000個樣本
	Z^[l] = W^[l]*A^[l-1]+b^[l]
	A^[l] = g^[l](Z^[l])
#cost function
	cost = 1/1000*sum(L(yhat{t}-y{t}))+lamabd/(2*1000)*sum||w^[t]||^2
`#backward propagation 
	dAL = dL(AL,Y)/dAL
	dZ^[l]=g'^[l]*dAL
	dW^[l]=dZ^[l]*A^[l-1]T
	db^[l]=dZ^[l]
	dA_prev = dZ^[l]T*W^[l]
#mini-batch
	W^[l]=W^[l]-alpha*dW^[l]
	b^[l]=b^[l]-alpha*db^[l]
	}
}

梯度下降:一次遍歷訓練集,只能讓你做一個梯度下降
mini-batch:一次遍歷訓練集,做5000個梯度下降

多次遍歷訓練集,最外層還需要一個while/for循壞,使能收斂到一個合適的精度。

理解mini-batch剃度下降法

梯度下降法
在這裡插入圖片描述
mini-batch梯度下降法
在這裡插入圖片描述

趨勢向下

mini-batch的size

if mini-batch size = m  --> 梯度下降法
	相對噪音低,幅度大,單次迭代耗時長
if mini-batch size = 1   -->隨機梯度下降法
	噪音大,最終靠近最小值有時偏離,因為它永不收斂
	失去向量化帶來的加速
mini-batch size 介於1,m之間

怎樣尋選擇m?

if small train set:(<2000)
	梯度下降
typical mini-batch size:
	64(2^6) 128(2^7),256(2^8),512(2^9)
	x^{t},Y^{t}符合CPU、GPU記憶體

指數加權平均

在這裡插入圖片描述

V^theta = 0
repeat{
	get next theta^t
	V^theta := bata*V^theta + (1-bata)*theta^t
	}

指數加權平均的偏差

在這裡插入圖片描述

動量梯度下降法

在這裡插入圖片描述
在縱軸上,希望學習慢一點
在橫軸上,希望學習快一點
動量梯度下降法:
V_dW= 0
V_db = 0
在這裡插入圖片描述
超引數:alpha,bata
bata一般取0.9

RMSprop

在這裡插入圖片描述

消除擺動
允許使用更大的學習率
On iteration t:
	compute dW,db on current mini-batch
	S_dw = bata_2*S_dW + (1-bata_2)*(dW)^2
	S_db = bata_2*S_db + (1-bata_2)*(db)^2
	W := W - alpha*dW/(sqrt(S_dW)+e)
    b:= b - alpha*db/(sqrt(S_db)+e)

adam優化器

S_dW =0,S_db = 0,V_dW =0,V_db = 0 
On iteration t:
	compute dW,db on current mini-batch
	V_dW = bata_1*V_dW + (1-bata_1)*(dW)^2
	V_db = bata_1*V_db + (1-bata_1)*(db)^2
	S_dW = bata_2*S_dW + (1-bata_2)*(dW)^2
	S_db = bata_2*S_db + (1-bata_2)*(db)^2
	V^vorrect_dW = V_dW/(1-bata_1^t) V^vorrect_db = V_db/(1-bata_1^t)
	S^vorrect_dW = S_dW/(1-bata_2^t) S^vorrect_db = S_db/(1-bata_2^t)

	W := W - alpha*V^vorrect_dW/(sqrt(S^vorrect_dW)+e)
    b := b - alpha*V^vorrect_db/(sqrt(S^vorrect_db)+e)

在這裡插入圖片描述

學習率衰減

在這裡插入圖片描述
有時候使用固定學習率,在不會收斂
使用衰減的學習率,在學習初期,能承受較大的步伐,但當開始收斂的時候,小的學習率會讓步伐變小
在這裡插入圖片描述
在這裡插入圖片描述