神经网络既有记忆能力又有泛化能力,这对应了我们现实世界的情况,既有多样性又有规律性,所以神经网络能够学习现实世界很多领域的问题。(多说一句,我认为现实世界的规律性是由宇宙的同源性(宇宙大爆炸,基本粒子不可再分)引起的,多样性是由随机性效应(量子力学、混沌效应等)引起的。)
下面通过shuffle label试验来感受LeNet的记忆能力。
1、shuffle label试验
shuffle label的方法在Bengio大神的文章《A Closer Look at Memorization in Deep Networks》https://arxiv.org/abs/1706.05394中提到。就是在训练时把标签完全打乱,样本和标签之间失去联系,然而此时仍然是可以训练的,网络完全是死记住了所有样本和标签之间的关联。当然这种记忆没有任何的泛化能力,在验证集上表现为完全随机预测。
我们在LeNet上进行shuffle label试验,注意torch中没有shuffle功能,所以我们需要在numpy中shuffle,试验在我之前的代码https://blog.csdn.net/Brikie/article/details/112253975上修改,仅对get_data部分修改如下。
def get_data():
train_img, train_label = _read(
'train-images-idx3-ubyte.gz',
'train-labels-idx1-ubyte.gz')
train_img = train_img[:10000]
train_label = train_label[:10000]
np.random.shuffle(train_label)
...
LeNet在Mnist数据集上shuffle label的训练结果如上图,acc表示在训练集上的精度。可见,模型有很强的记忆能力,即使是标签完全打乱,模型也能学到东西。如果训练样本较多,模型记忆的过程会较慢,如果样本数量较少,比如只有5000个时,不到100epoch就能够全部都记住,精度几乎达到100%。
2、去掉卷积层之后的对比
去掉LeNet的两个卷积层之后,把全连接层的输入尺寸改为28*28,参数量还变大了,从61706变为105214。但从下图可以看出,没有卷积层时记忆能力显著下降。这说明即使是“死记”,卷积层也仍可以对特征进行提取,相当于图片压缩了,仍可以减少需要记忆的信息量。