深度学习各优化算法
深度學習中,在進行損失函數J的優化及參數尋優時,用到的均是梯度下降法。而其他優化算法均是在此基礎上進行的一定改進。
- 批梯度下降(BGD):就是沒有任何優化的梯度下降,我們每一次循環都是對整個訓練集進行學習。用此方法計算量較大,迭代時間長。
- 隨機梯度下降(SGD):相比于批量梯度下降而言,隨機梯度下降每次從樣本中隨機抽取一個樣本,進行其損失函數并對參數進行更新。此方法計算速度快,但不太穩定,損失函數的起伏較大,且未用到向量化方法。
- mini-batch梯度下降:是對上述兩種方法的一個改進,將數據集中的樣本數隨機的分為t份,其中t介于0到m之間,一般為2的n次方,這樣既可以保證每次迭代更新的穩定性,又提高運行速度。
部分代碼及圖解如下:
#僅做比較,不運行。#批量梯度下降,又叫梯度下降 X = data_input Y = labelsparameters = initialize_parameters(layers_dims) for i in range(0,num_iterations):#前向傳播A,cache = forward_propagation(X,parameters)#計算損失cost = compute_cost(A,Y)#反向傳播grads = backward_propagation(X,Y,cache)#更新參數parameters = update_parameters(parameters,grads)#隨機梯度下降算法: X = data_input Y = labels parameters = initialize_parameters(layers_dims) for i in (0,num_iterations):for j in m:#前向傳播A,cache = forward_propagation(X[:,j],parameters)#計算成本cost = compute_cost(A,Y[:,j])#后向傳播grads = backward_propagation(X[:,j],Y[:,j],cache)#更新參數parameters = update_parameters(parameters,grads)??????
?
??此外,還產生了動量梯度下降法(β越大越好)、RMSprop及adam等優化算法,其中adam優化算法是前兩者的一個結合,這三種優化算法均是采用了指數加權平均的方法來更新權重,以此減少震蕩,增加水平方向的步長,達到更快收斂的目的。
總結
- 上一篇: javascript删除数组,索引出现问
- 下一篇: React开发(255):react项目