小批量梯度下降算法
事實上,我們在實際的生產活動中,最經常使用的便是小批量梯度下降法,這種方法綜合了隨機梯度下降法和批量梯度下降法兩種算法,一定程度上避免了他們的缺點,這種算法實現的思路便是每次計算優化的方向既不是查看所有的樣本也不是查看單一的樣本,而是每次抽取K個樣本,把這k個樣本的梯度作爲優化方向。這樣有兩個優點:
(1)較之批量梯度下降法,小批量梯度下降法運行速度更快。
(2)較之隨機梯度下降法,比之更穩定,更能接近批量梯度下降算法的優化方向。
實現代碼已更新到GitHub中。
GitHub
梯度下降法的其他思考
我們有幾個問題待解決,那便是我們在BGD和SGD中具體封裝實現的時候,計算梯度的方法是使用的推導公式,但是如何去確定梯度下降法的準確性這一問題需要解決,因爲有時候我們推導出來的公式可能會有一些錯誤。
我們使用數學嚴格公式的方式推導的計算導數的公式爲:
代碼封裝如下:
def dJ_debug(theta,X_b,y,epsilon):
res = np.empty(len(theta))
for i in range(res):
theta_1 = theta.copy()
theta_1[i] += epsilon
theta_2 = theta.copy()
theta_2[i] -= epsilon
res[i] = (J(X_b,theta_1,y) - J(X_b,theta_2,y)) / (2*epsilon)
return res