1.训练集、测试集、验证集
在做一个训练任务的时候,能获取的所有的数据包含两类, 一类有特征和标签;另一类有特征没有标签需要预测标签,即测试集。在第一类有特征有标签的数据中, 一 般会分为训练集和验证集。训练集就是课本,验证集就是模考卷子,测试集就是考试。
最常见的问题就是验证集究竟是否参与到训练过程中。如果不参与,那么岂不是浪费 了这些有标签的数据吗?这里引入n-fold 的方法。把所有的给了标签的数据三等分,然后每一份都作为一个验证集,这样每一个验证集对应的训练集应该占全部有标签数据的三分之二,而且每一个训练集和对应的验证集之间的数据不重复。训练3个模型,每一个模型只用训练集数据训练,然后用对应的验证集进行检验,判断模型是否训练完成。最后在预测测试集标签时将3个模型的输出求均值。这样的方法可以增强模型的泛化能力,而且可以利用所有的可用数据并且防止数据泄露问题。
2.epoch 、batch 、mini-batch
讲到机器学习神经网络,绕不开的就是这几个基础概念。现在假设要处理的是图片分 类任务,总共有10张图片作为全部的训练集。
(1)sample 每一张训练集中的图片,称为一个样本,总共有十个样本。
(2)Epoch 假想一个人在背书学习的时候,只看一遍书够吗?不够的,要翻来覆去反复多次地看。这里也是一样,10张图片模型看过一遍称为一个 Epoch, 但是模型没学好又 看了一遍,就是2个Epoch 。Epoch 就是全部训练集的学习次数。
(3)batch (批) 计算机的内存是有限的, 一般是不能把全部的训练数据集同时放到内存中进行计算。只能从十张图片中拿五张出来,进行训练,更新参数,之后把内存中的数据清空,再放入另外五张图片。这样, 一个Epoch 中就有两个 batch, 每一个batch 会更新一次 模型的参数。
(4)mini-batch 在论文中应该会出现这个概念。这个是用在多处理器同时训练的情况下的。依然是上面的例子,假设为了加快训练速度,准备了5个处理器并行训练,这样一 个Batch 就 会 被 分