深度神经网络的优化都是基本都是基于梯度下降的,梯度下降的过程就是寻找函数值下降速度最快的方向,沿着该方向迭代,快速到达局部最优解的过程。

梯度下降更新参数的方式最常见的有三种:

1. 批量梯度下降(Batch Gradient Descent)

每一次迭代时使用整个训练集的数据计算Cost Function来进行梯度更新。

由于每一次参数更新都用到所有的训练集数据,当样本数量很大的时候,计算开销大,速度慢。

2.随机梯度下降(Stochastic Gradient Descent)

每一次迭代时,针对单个样本计算Loss Function,然后计算梯度更新参数。这种方法速度比较快,但是收敛性能不好,可能造成目标函数剧烈震荡,并且大数据集的相似样本会造成梯度的冗余计算。

3.小批量梯度下降(Mini-Batch Gradient Descent)

每次迭代时,采用一小批样本,一方面这样可以降低参数更新时的方差,收敛更加稳定,另一方面可以充分利用深度学习库中的高度优化的矩阵操作进行有效的梯度计算。

Mini-Batch Gradient Descent并不能保证很好的收敛性,Learning Rate 如果选择的太小,收敛速度会很慢;如果选择的太大,Loss Function可能在局部最优解附近不停地震荡甚至偏离。有一种措施是先设定大一点的学习率,当两次迭代之间的变化低于某个阈值后,就减小Learning Rate。

在大规模的神经网络训练中,一般采用小批量梯度下降的方式。Batch Epoch Iteration就是其中的重要的概念。

1.Batch

每次迭代时使用的一批样本就叫做一个Batch,样本的数量称为Batch Size。Batch大小是一个超参数,用于定义在更新内部模型参数之前要处理的样本数。深度学习每一次参数的更新的Loss Function并不是由一个样本得到的,而是由一个Batch的数据加权得到。

2. Iteration

使用Batch Size个样本训练一次的过程叫做一个Iteration。

3. Epoch

一个epoch就是使用训练集中的全部样本训练一次。通俗的讲,Epoch的值就是整个训练数据集被反复使用几次。

Epoch数是一个超参数,它定义了学习算法在整个训练数据集中的工作次数。一个Epoch意味着训练数据集中的每个样本都有机会更新内部模型参数。Epoch由一个或多个Batch组成。

相关文章