优化器——SGD

Stochastic Gradient Descent (SGD)

梯度更新规则:

SGD 更新时是对每个样本进行梯度更新,对于比较大的数据集来说,可能会有相似的样本,SGD 一次只进行一次更新,没有冗余,而且速度比较快,并且可以新增样本。

θ:要更新的参数

\eta:learning rate

 :梯度更新方向

SGD是通过每个样本来迭代更新一次,在样本量很大的情况下,可能只使用其中一部分的样本,就已经将θ迭代到最优解了。

优点:

在迭代次数上具有一定优势,与之相适应的就是模型训练速度会快一些。

缺点:

每次迭代不一定都向着整体最优化的方向,不一定达到全局最优;

因为更新比较频繁,会造成 cost function 有严重的震荡。

当我们稍微减小 learning rate,SGD 和 BGD 的收敛性是一样的。

函数定义:

for i in range(nb_epochs):
  np.random.shuffle(data)
  for example in data:
    params_grad = evaluate_gradient(loss_function, example, params)
    params = params - learning_rate * params_grad

 

你可能感兴趣的:(参数优化)