对于Batch_size肯定都不陌生,是机器学习中的一个重要参数
多数时候使用Batch的训练效果会比设置Batch_size=1的训练效果要好。
通俗的理解一下,Batch_size=126时模型一次看了126个样本再来决定梯度下降往哪个方向降,而Batch_size=1时,模型进行了126次横冲直撞的梯度下降,单样本更新参数的随机性太大,显然可以看出使用Batch的模型效果会更好。
同时CNN中的Batch相对比较好理解,一次读取Batch_size个图片,然后依次输入CNN,前向传播Batch_size次后更新权重即可,但是在RNN中由于数据多了一个时间维度time_step,对Batch的理解会有些不动,这里以NLP举一个简单的例子:
首先我们都知道RNN能展开成这样:
然后有一个数据集包含五句话(天气真好)(你是谁啊)(我是小明)(明天打球)(武汉加油)
数据集的维度就是(batch_size, time_step, feature_dim)= (5, 4, word_embedding)
time_step1 | time_step2 | time_step3 | time_step4 | |
batch_size1 | 天 | 气 | 真 | 好 |
batch_size2 | 你 | 是 | 谁 | 啊 |
batch_size3 | 我 | 是 | 小 | 明 |
batch_size4 | 明 | 天 | 打 | 球 |
batch_size5 | 武 | 汉 | 加 | 油 |
对于这样一个数据集,输入RNN的时候是什么情况?
RNN是每个time_step输入一次数据,那么for循环time_step1时,进入网络的数据就是(天,你,我,明, 武)每句话的第一个字进入网络,然后依次往后,这里我们最简单的理解就是同时有batch_size个RNN在处理数据,每个RNN处理一个字,那么time_step1的输出就是(batch_size, hidden_size),整个batch处理完输出为(batch_size, time_step, hidden_size)。