零基础神经网络优化之mini-batch

Posted cation

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了零基础神经网络优化之mini-batch相关的知识,希望对你有一定的参考价值。

一、前言

  回顾一下前面讲过的两种解决过拟合的方法:

  1)L0、L1、L2:在向前传播、反向传播后面加个小尾巴

  2)dropout:训练时随机“删除”一部分神经元

  本篇要介绍的优化方法叫mini-batch,它主要解决的问题是:实际应用时的训练数据往往都太大了,一次加载到电脑里可能内存不够,其次运行速度也很慢。那自然就想到说,不如把训练数据分割成好几份,一次学习一份不就行了吗?前辈们试了试发现不仅解决了内存不足的问题,而且网络“收敛”的速度更快了。由于mini-batch这么棒棒,自然是神经网络中非常重要的一个技术,但实际实现时你会发现“真的太简单了”。

二、batch、mini-batch、随机梯度下降

  这里先解释几个名词,可以帮助大家更好的理解mini-batch。

  1)之前我们都是一次将所有图片输入到网络中学习,这种做法就叫batch梯度下降

  2)与batch对应的另一种极端方法是每次就只输入一张图片进行学习,我们叫随机梯度下降

  3)介于batch梯度下降和随机梯度下降之间的就是我们现在要整的,叫mini-batch梯度下降

三、mini-batch大小、洗牌

  前面说,mini-batch是将待训练数据分割成若干份,一次学习一份。那每一份具体包含多少个图片合适呢?实际上是没有什么特定标准的,但这个数值又切实影响着神经网络的训练效果,一般来说就是建议“设置为2的若干次方,如64、128、256、1024等等”。你可以先随便设置一个数看看效果,效果一般再调调。

  “洗牌”是mini-batch的一个附加选项,因为我们是将训练数据分割成若干份的,分割前将图片的顺序打乱就是所谓的“洗牌”了,这样每一次mini-batch学习的图片都不一样为网络中增加了一些随机的因素。具体原理上不知道有啥特别的,但实践中确实优化了网络。

四、mini-batch实现与对比

  完整的实现代码是基于之前“深层神经网络解析”的,下载方式见文末。这里我做了个简单的实验,下图中分别是无mini-batch、不带洗牌的mini-batch、带洗牌的mini-batch运行效果。

无mini-batch:

技术图片

不带洗牌的mini-batch:

技术图片

带洗牌的mini-batch:

技术图片

  可以看到,使用mini-batch后网络可以迅速收敛。使用了mini-batch的网络仅用了400次就达到了普通网络2000次的训练效果。由于求解的问题不算很难,所以使用了洗牌的mini-batch与普通的mini-batch似乎没啥差别,不过还是能看出来效果还是好了一点的(不过会使用更长的时间来训练)。

完整实现代码可以关注公众号“零基础爱学习”回复“AI11”获取。

技术图片

 

以上是关于零基础神经网络优化之mini-batch的主要内容,如果未能解决你的问题,请参考以下文章

零基础神经网络优化之Adam

SEO优化视频搜索引擎优化教程零基础到高级

吴恩达 — 神经网络与深度学习 — L2W2练习

零基础使用Tensorflow实现神经网络

送书 | 从零开始学习 PyTorch:多层全连接神经网络

深度学习基础之优化器(optimizer)的介绍