梯度下降优化算法
梯度下降优化算法
写这篇博客其实是为了记录所读的这篇论文的笔记An overview of gradient descent optimization algorithms
Batch gradient descent
他每次为整个数据集计算梯度,然后进行一次更新。
for i in range(nb_epochs):
params_grad = evaluate_gradient(loss_function, data, params)
params = params - learning_rate * params_grad
Stochastic gradient descent(SGD)
他对于每个样本都会计算一次梯度,然后进行一次更新。
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
SGD 因为更新比较频繁,会造成 cost function 有严重的震荡
Mini-batch gradient descent
MBGD每一次梯度更新是作用于一小批样本n,n取50~256,收敛更稳定。
for i in range(nb_epochs):
np.random.shuffle(data)
for batch in get_batches(data, batch_size=50):
params_grad = evaluate_gradient(loss_function, batch, params)
params = params - learning_rate * params_grad
Momentum
在当前更新向量中加入了上一次梯度更新因子,γ(伽马)的值一般设为0.9左右.
加入的这一项,可以使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡。
Adagrad
g _t,i 为t 时刻参数 θ_i 的梯度
如果是普通的 SGD, 那么 θ_i 在每一时刻的梯度更新公式为:
对于每个参数、时间,都对应不同的学习率
G_t,ii是个对角矩阵,元素G_t,ii表示到t时刻为止参数 θ_i所有梯度的平方和,E(不好意思这个不知道怎么打也不知道怎么读[捂脸])是平滑参数,避免出现除0的情况。
其中 η 一般取 0.01。
Adagrad 的优点是减少了学习率的手动调节。它的缺点是分母会不断积累,这样学习率就会收缩并最终会变得非常小。
RMSprop
RMSprop 是 Geoff Hinton 提出的一种自适应学习率方法。
RMSprop 为了解决 Adagrad 学习率急剧下降问题的。
Hinton 建议设定 γ 为 0.9, 学习率 η 为 0.001。
Adam
这个算法是另一种计算每个参数的自适应学习率的方法。
除了像 Adadelta 和 RMSprop 一样存储了过去梯度的平方 vt 的指数衰减平均值 ,也像 momentum 一样保持了过去梯度 mt 的指数衰减平均值:
建议 β1 = 0.9,β2 = 0.999,ϵ = 10e−8
实践表明,Adam 比其他适应性学习方法效果要好。
上一篇: 梯度下降优化算法概述