深度学习笔记(二)—— 梯度下降[Gradient Descent]

  这是深度学习笔记第二篇,完整的笔记目录可以点击这里查看。
  
  为了在权重空间中找到一个方向来改进我们的权重向量(并降低loss),我们可以计算出最佳方向,这个向量(也就是梯度)在数学上保证是最陡的下降方向(至少在步长趋于零的极限范围内)。关于梯度计算的相关知识,可以参考这篇博客。梯度下降就是取我们计算出来的梯度值的相反方向(因为梯度告诉我们的是增长方向,但我们需要减小loss),然后将其乘以一个步长,一步步减小loss,从而不断优化网络。

1. Vanilla Gradient Descent

  Vanilla梯度下降代码如下:

# Vanilla Gradient Descent

while True:
  weights_grad = evaluate_gradient(loss_fun, data, weights)
  weights += - step_size * weights_grad # perform parameter update

  这个简单的循环是所有神经网络库的核心。还有其他的优化方法(如LBFGS),但梯度下降是目前为止最常见和最成熟的优化神经网络损失函数的方法。

2. Mini-batch gradient descent

  在大规模应用中(如ILSVRC挑战),训练数据可以有数百万个例子。因此,为了只执行一个参数更新而在整个训练集上计算所有的损失函数似乎是浪费的。解决这个问题的一个非常常见的方法是计算每个batch训练数据的梯度。例如,在ConvNets中,一个典型的batch包含来自120万个完整训练集的256个示例。然后使用此批处理代码执行参数更新:

# Vanilla Minibatch Gradient Descent

while True:
  data_batch = sample_training_data(data, 256) # sample 256 examples
  weights_grad = evaluate_gradient(loss_fun, data_batch, weights)
  weights += - step_size * weights_grad # perform parameter update

  在实践中,通过计算每个batch的梯度来执行更频繁的参数更新,可以实现更快的收敛。
  Mini-batch梯度下降方法中的极端情况是每个batch只包含一个样本,这样,这个过程被称为随机梯度下降(Stochastic Gradient Descent,SGD)。这种情况不太常见,因为在实践中,由于矢量化的代码优化,一次计算100个样本的梯度比计算100次一个样本的梯度要快得多。尽管SGD在技术上是指一次使用一个样本来评估梯度,但你会听到人们在提到Mini-batch梯度下降时使用术语SGD(即很少提到“Minibatch Gradient Descent”的MGD,或“Batch Gradient Descent”的BGD)。Mini-batch的大小是一个超参数,但对这个参数进行交叉验证并不常见。batch的大小通常基于内存限制(如果有),或设置为某个值,例如32、64或128。我们在实践中多使用2的幂,因为许多向量化操作实现在输入的大小为2的幂时工作得更快。
  需要注意的是,梯度告诉我们函数增长率最大的方向,但它不能告诉我们应该沿着这个方向走多远。因此,选择步长(也称为学习速率,learning rate)将成为训练神经网络时最重要(也是最令人头痛的)超参数设置之一。比如我们蒙着眼睛下山,我们感觉脚下的山丘向某个方向倾斜,但我们应该采取的步长是不确定的。如果我们小心地伸脚,我们就可以期望取得一致但非常小的进展(这相当于有一个小的步幅)。相反,我们可以选择迈出一大步,信心十足地尝试更快地下降,但这可能不会有回报。正如我们在上面的代码示例中所看到的,在某些情况下,当我们“越界”时,迈出更大的一步会带来更大的损失。



*本博客翻译总结自CS231n课程作业网站,该网站需要翻墙才能访问。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值