小批量梯度下降算法
事实上,我们在实际的生产活动中,最经常使用的便是小批量梯度下降法,这种方法综合了随机梯度下降法和批量梯度下降法两种算法,一定程度上避免了他们的缺点,这种算法实现的思路便是每次计算优化的方向既不是查看所有的样本也不是查看单一的样本,而是每次抽取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