一、keras优化器类别
二、算法详解
2.1 SGD
这里的随机梯度下降,从严格意义上说应该是Mini-batch梯度下降,即每次用一小批样本进行计算,这样一方面具有梯度下降更新参数时低方差的特性,同时也兼顾了随机梯度下降参数更新的效率。
θ=θ−η⋅∇θJ(θ;x(i;i+n);y(i;i+n))
伪代码:
for i in range(nb_epoches):
np.random.shuffle(data)
for batch in get_batches(data,batch_size=64):
params_grad = evaluate_gradient(loss_function,batch,params)
params = params - learning_rate*params_grad
缺点:
随机梯度下降不能保证很好的收敛性,如果learning rate选择过大会在极小值点震荡,如果选择过小收敛速度太慢,而且对于非凸函数而言该算法容易陷入局部最优。
SGD在ravines容易被困住,momentum通过加入动量因子,可以加速SGD,并且抑制震荡。
vt=γvt−1+η∇θJ(θ)
θ=θ−vt
加入moment(动量因子)可以使得梯度方向不变的维度上速度下降的更快,梯度方向发生改变的方向上更新速度更慢,从而加快收敛,减小震荡,一般动量取值0.9左右。
2.2 Adagrad
这个算法可以对低频的参数做较大的更新,对高频的参数做较小的更新,因此,对于稀疏数据它的表现很好,很好的提高了SGD的鲁棒性,例如Youtube视频里的猫,训练Glove word embedings,因为它们都需要在低频的特征上有更大的更新
梯度更新规则:
θt+1,i=θt,i−ηGt,ii+ϵ‾‾‾‾‾‾‾‾√⋅gt,i
g是t时刻参数 θi 的梯度
gt,i=∇θJ(θi)
如果是随机梯度下降,那么