Analysis
Coreset 是带有权重的数据子集,目的是在某个方面模拟完整数据的表现(例如损失函数的梯度,既可以是在训练数据上的损失,也可以是在验证数据上的损失);
给出优化目标的定义:
$w^t$ 是 t 轮得到的 coreset 权重,$X_t$ 是 t 轮得到的 coreset,$L$ 既可以是在训练数据上的损失,也可以是在验证数据上的损失,$L_T$ 是在 coreset 上的损失函数,$theta_t$ 是 t 轮得到模型参数;
最小化 ERR 来使 Coreset 最好地模拟损失函数(训练集或验证集)的梯度。
如何优化这个问题
将其转化为次模函数:
之后可以用贪心算法快速解决。
Tricks
- 只计算最后一层的梯度;
- 现在完整的数据集上跑几个 epoch,获得一个较为靠近的模型权重(类似于 warm-up 和 pre-training);
- 每过 R 个 epoch 再更新 coreset。