接下来我们来研究如何使损失减小。
当损失函数不可导时,可用次导数代替。
我们将采用的方式是,使用一个随机的W作为开始,然后找到使损失优化的方法,然后不断迭代。
将一维函数的导数推广到多维函数就是梯度,梯度即偏导数组成的向量。
有两种计算梯度的方式:
- 数值方式:在当前W下,对每个参数增加一个很小的变动如0.00001,计算新的损失,即可得到偏导数。得到梯度后,我们把W在梯度反方向上做变动,但变动幅度,或称为步长、学习率,是一个需要小心选择的超参数。学习率太小则效率低下,学习率太大则容易使损失反而增大。这种梯度计算方法的问题是,计算量与参数量成正比,无法应用在参数量巨大的现代神经网络上。
- 分析方式:基于表达式的微分得出梯度公式并计算,计算量要少很多。
得到梯度后,我们就可以对W做一个变动,沿着梯度反方向使损失下降,不断循环直接收敛。
这一优化方式称为梯度下降。
在实践中,由于训练集巨大,我们不会每次计算梯度都使用所有数据,而是只选择一个小的batch,以提高收敛速度。由于每个类别都有众多图片,数据之间存在关联性,所以一个小的batch就能够代表整体。
如果每个batch只有一张图片,则称为随机梯度下降,Stochastic Gradient Descent (SGD)
每个batch的大小也是一个超参数,通常取显存上限或2的幂。
数据流如下:
下一课我们将介绍利用链式法则通过分析方式计算梯度,也称为反向传播。
