1、 首先我们要大概了解一下什么是梯度下降法:

梯度下降法的基本思想可以类比为一个下山的过程。
假设这样一个场景:一个人被困在山上,需要从山上下来(找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。怎么做呢,首先以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处;同理上山也是如此,只是这时候就变成梯度上升算法了
简单来说,就是找一个函数的极值点,不一定是最值。

 

例如上面两图,都是去慢慢寻找极小点。

这和我们认识的batch和epoch有什么关系呢?  如图一的箭头,它不是直接一次性用一个长箭头指向极值点,而是很多个小箭头慢慢传递下去直到极值点的位置,整个函数可以看作一整个数据集在图上的位置,并不是由一整个数据集去直接计算得到最小值,而是每次取一个batch去计算它的局部极值点,这样每次取一个batch,计算记起来就很快,每一个小箭头都是由一块batch计算后的结果,如此遍历完一整个数据集,得到极值点,然后一个过程我们成为epoch。

为什么我们还要进行多次epoch呢,因为通常我们得到的线性函数不会这么简单,可能有多个凸点,遍历多次之后才有可能找到最小点而不是极小点。

换算关系:\LARGE numbers of batch=\frac{numbers of data}{size of batch}

我们由数据数量求出batch块数。epoch参数是指这个求grad的次数多少次。

那也就可以理解了为什么说梯度下降的几种方式的根本区别就在于上面公式中的batch不同

当batch size是整个训练集时,就是纯正的梯度下降法

当batch size为1时,就是纯正的随机梯度下降法。

当batch size介于1和整个训练集时,就是实际程序里用到的,那么我就此推测,batch越大应该才越接近于真正的梯度下降算法,结果应该会更好些。

一个batch size地样本走一遍后,每个样本都会算出一个损失函数值,把这些损失函数值相加再处以batch size值可以得出这一个batch地平均损失函数值,最后是拿这个平均损失函数值去梯度下降更新参数值。

2、epoch

epoch是什么呢,epoch是要设定的一个参数,可以设定为从1到无穷大,一个epoch意味着训练集中每一个样本都参与训练了一次。

比如训练集有50000个样本,而我设定的batch size是50,也就是说每50个样本才更新一次参数,那么也就意味着一个epoch里会提取1000次bach,这样才会把每个样本都提取了一遍,更新了1000此参数。这是一个epoch里做的,一次类推,我要设定2000个epoch意味着把这个过程重复2000次。也就是训练集里的每个样本都被提取了2000次。
例子:

 

 

自己大概能理解到,自己总结给自己看的+++++++不在乎大家看不看得懂了就。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐