zoukankan      html  css  js  c++  java
  • 【零基础】神经网络优化之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”获取。

  • 相关阅读:
    JavaScript基础语法及字符串相关方法(1)
    matplotlib实现三维柱状图
    前端入门CSS(3)
    博客页面练习
    前端入门CSS(2)
    前端入门CSS(1)
    前端入门html(表单)
    Longest Palindromic Substring
    Wildcard Matching
    Spiral Matrix II
  • 原文地址:https://www.cnblogs.com/cation/p/11741740.html
Copyright © 2011-2022 走看看