咱们在训练网络的时候常常会设置 batch_size,这个 batch_size 到底是作什么用的,一万张图的数据集,应该设置为多大呢,设置为 一、十、100 或者是 10000 究竟有什么区别呢?算法
# 手写数字识别网络训练方法 network.fit( train_images, train_labels, epochs=5, batch_size=128)
梯度降低算法通常用来最小化损失函数:把原始的数据网络喂给网络,网络会进行必定的计算,会求得一个损失函数,表明着网络的计算结果与实际的差距,梯度降低算法用来调整参数,使得训练出的结果与实际更好的拟合,这是梯度降低的含义。网络
批量梯度降低是梯度降低最原始的形式,它的思想是使用全部的训练数据一块儿进行梯度的更新,梯度降低算法须要对损失函数求导数,能够想象,若是训练数据集比较大,全部的数据须要一块儿读入进来,一块儿在网络中去训练,一块儿求和,会是一个庞大的矩阵,这个计算量将很是巨大。固然,这也是有优势的,那就是由于考虑到全部训练集的状况,所以网络必定在向最优(极值)的方向在优化。函数
与批量梯度降低不一样,随机梯度降低的思想是每次拿出训练集中的一个,进行拟合训练,进行迭代去训练。训练的过程就是先拿出一个训练数据,网络修改参数去拟合它并修改参数,而后拿出下一个训练数据,用刚刚修改好的网络再去拟合和修改参数,如此迭代,直到每一个数据都输入过网络,再从头再来一遍,直到参数比较稳定,优势就是每次拟合都只用了一个训练数据,每一轮更新迭代速度特别快,缺点是每次进行拟合的时候,只考虑了一个训练数据,优化的方向不必定是网络在训练集总体最优的方向,常常会抖动或收敛到局部最优。性能
小批量梯度降低采用的仍是计算机中最经常使用的折中的解决办法,每次输入网络进行训练的既不是训练数据集全体,也不是训练数据集中的某一个,而是其中的一部分,好比每次输入 20 个。能够想象,这既不会形成数据量过大计算缓慢,也不会由于某一个训练样本的某些噪声特色引发网络的剧烈抖动或向非最优的方向优化。优化
对比一下这三种梯度降低算法的计算方式:批量梯度降低是大矩阵的运算,能够考虑采用矩阵计算优化的方式进行并行计算,对内存等硬件性能要求较高;随机梯度降低每次迭代都依赖于前一次的计算结果,所以没法并行计算,对硬件要求较低;而小批量梯度降低,每个次迭代中,都是一个较小的矩阵,对硬件的要求也不高,同时矩阵运算能够采用并行计算,屡次迭代之间采用串行计算,总体来讲会节省时间。code
看下面一张图,能够较好的体现出三种剃度降低算法优化网络的迭代过程,会有一个更加直观的印象。blog
梯度降低算法的调优,训练数据集很小,直接采用批量梯度降低;每次只能拿到一个训练数据,或者是在线实时传输过来的训练数据,采用随机梯度降低;其余状况或通常状况采用批量梯度降低算法更好。内存