使用小批量可以
①提高模型的训练速度,不用过于频繁地计算参数。通过经验风险最小化由一组样本并行计算并共同决定这批数据的梯度方向
②引入随机性以避免陷入局部极值
具体到设计网络,以RNN为例(RNN与CNN相比的输入是反常的)
输入节点为$x$,隐藏层节点为$h$,输出节点为$o$。设vec_size = v, hidden_size = h, batch_size = 2,则设定参数矩阵(省略偏移)
于是一个mini-batch为
对其进行迭代,则$t_0$时刻输入矩阵
注意这里在python中的表示用数学表示形式是一个二维矩阵,
于是一次循环:
由此可看出,在矩阵相乘的规则下,相当于将不同的$seq$样本同时加载进网络中同时并行计算。
通过一段时间将mini-batch全部加载进循环神经网络,通过loss function再平均作为mini-batch的loss,再作BPTT,就可以求出此mini-batch的梯度。
对于CNN,也是一样的原理同时处理一个mini-batch的所有图片,只不过其输入方式与处理方式有所不同。