深度学习笔记:为什么(预)特征提取不能与数据增强结合使用

目录

1. 前言

2. 解释


1. 前言

        在F.chollet《Deep Learning with Python》#5.3.1中提到利用预训练模型进行特征提取然后再训练分类器时有两种做法:

        方法一:用预训练模型的卷积基对数据集进行处理生成原数据集的特征,我称之为预特征提取。然后,基于预提取的特征训练最后的密集连接层分类器。关于这个方法的实验参见:深度学习笔记:利用预训练模型之特征提取训练小数据集上的图像分类器https://blog.csdn.net/chenxy_bwave/article/details/122287236

        方法二:在卷积基的基础上进行扩展,追加最终的密集连接分类器。然后在冻结卷积基的系数的条件下基于数据增强技术对整个模型进行训练。由于卷积基被冻结,其系数没有更新,所以卷积基的作用也仅仅是用于特征提取,但是它是在线(on-the-fly)进行的,所以我称之为在线特征提取,以区别于上面的预特征提取。

        原书中提到方法一不能与数据增强技术结合使用,但是没有解释具体的原因。一开始读到这里没有理解,有些困惑。原因在于没有真正理解数据增强技术的处理过程。

2. 解释

        后来在【Ref1】中的讨论中找到了更为详细具体的解释。

        这是因为,在采用数据增强技术时,每一轮(epoch)训练所使用的样本不是完全一样的(虽然都是基于原始样本集进行变换而得);而不采取数据增强时,每一轮(epoch)训练所使用的样本是完全一样的(可能只是使用的顺序不同,因为mini-batch生成的随机性)。而因为预特征提取是一次性地用卷积基对样本集进行处理,在后面训练中的每一轮中都是使用相同的预提取特征(对应于使用相同的原始样本集)。

        也因为同样的理由,方法一(预特征提取)速度快,计算代价低,因为对于每一个数据样本只运行了一次卷积基,而卷积基的计算代价是远远大于最后的密集连接层的。而方法二(在线特征提取+数据增强)则是每一轮都要针对(数据增强产生的)不同的数据样本进行卷积基特征提取,因此其训练时的计算代价要远远大于方法一。

        当然,在[ref1]中有人解释了理论上也是可以做到(预)特征提取与数据增强结合使用。那就是,假如你要训练M轮,原始样本集大小为N。则基于原始样本集利用数据增强技术先生成∗N∗M个样本。然后利用卷积基对这个大小为∗N∗M的增强数据样本集进行预特征提取。然后在后续的M轮训练,每一轮训练中从这∗N∗M个样本中无放回(without replacement)地采N个样本进行训练。

        这样做的效果就与方法二(在线特征提取+数据增强技术)完全一样了,计算量和训练效果都一样。但是这种做法就比方法二要麻烦多了,所以就没有什么实质性的意义,不如直接采用后者。

        当然,进一步的实验表明 F.chollet《Deep Learning with Python》#5.3.1的方法二所得到的性能提升可能只是一个乌龙。。。这个将来下一篇进行解释。

【Ref1】machine learning - feature extraction: freezing convolutional base vs. training on extracted features - Cross Validated (stackexchange.com)

你可能感兴趣的:(深度学习,深度学习,cnn,预训练模型,特征提取,数据增强)