-
1 # CynthiaLee95
-
2 # 北航秦曾昌
神經網路猶豫其複雜的結構和眾多的引數,往往很難訓練和最佳化。甚至是用幾百臺機器投入幾天到幾個月來解決單個神經網路訓練問題,也是很常見的。
比如2012年Google Brain專案就使用了16000個CPU來訓練由十億多個連線點構成的神經網路。
其中對神經網路進行最佳化的大方向有兩個,一個就是從演算法層面;另外則是從硬體方面。這裡主要從演算法層面來介紹訓練神經網路的方法。
最佳化通常是一個極其困難的任務。在傳統的機器學習專案中,會精心設計目標函式和約束,以確保最佳化問題是凸的,從而降低一般最佳化問題的複雜度。在訓練神經網路時,一般的遇到的都是非凸情況。而在非凸函式中就可能會存在多個區域性極小值,從而使得神經網路無法收斂到全域性最優點。此外,對於神經網路還存在著梯度爆炸和梯度消失的問題。
現有能夠幫助神經網路加快訓練的演算法有:
1)小批次梯度下降(mini-Batch gradient descent),即每次只使用少量訓練樣本,因此在理論上比隨機梯度下降有更好的收斂率;
2)動量方法(Momentum),旨在加速學習,特別是處理高曲率、小但一致的梯度,或是 帶噪聲的梯度。動量演算法積累了之前梯度指數級衰減的移動平均,並且繼續沿該方向移動。
3)權重的初始化方法。權重的初始化的選擇同樣會對神經網路的最佳化過程產生重要影響。傳統的初始化方法從高斯分佈中隨機初始化引數。甚至直接全初始化為1或者0。這樣的方法暴力直接,但是往往效果一般。
4)自適應的學習率演算法。合適的學習不進能夠加快訓練速度,還可以幫助神經網路跳出區域性最優。如AdaGrad、RMSProp以及Adam
5)批標準化(batch normalization)能夠解決梯度消失的問題,讓梯度變大,這就意味學習收斂速度快,能大大加快訓練速度。
回覆列表
如果是CNN的話,重要的事情說三遍 : 加batch normalization層,加batch normalization層,加batch normalization層!