参考:
文献《连续学习研究进展》
文献《Deep Class-Incremental Learning: A Survey》
一、微调vs.预训练
1、预训练
- 假设你现在需要搭建一个NN完成图像分类的任务
- 首先,你需要随机初始化参数,接着使用训练数据开始训练网络,不断对网络进行调整直至网络的损失值越来越小
- 当你觉得训练结果达到一个满意的状态后,就可以将模型的参数保存下来,以便在下次执行类似任务时拿出来可以直接使用,并且能够获得较好的结果
- 这个过程就是pre-training预训练。
2、微调
- 在某天,你想在一个新的数据集上进行图像分类工作。这个时候,你可以直接调用之前保存下来的模型参数作为该任务的初始化参数
- 然后在训练过程中,根据训练结果不断调整,使结果达到预期状态。
这个过程就是fine-tuning微调 - 即你使用pre-trained模型在初始化参数,然后进行fine-tuning微调
二、知识蒸馏
- 知识蒸馏是一种从一个复杂模型(教师模型)中提取、精简“知识”并转移到另一个简化模型(学生模型)的方法。
- 实现方法:教师模型的暗知识会被用作学生模型的训练目标或辅助信息
1、软化目标
- 软化目标:输出概率分布(eg:softmax)或特定的模型层表示
- 硬目标:模型最终输出的类别标签/真实标签
- 暗知识:模型学习到的软化目标分布、类别相关性、数据分布特征等难以直接观察或解释的知识
- 在知识蒸馏中,使用教师模型产生的软化的目标来指导学生模型的训练
2、温度参数
- 调整教师模型输出的概率分布,使其更平滑
- 例子: s o f t m a x ( z i T ) softmax({z_i \over T}) softmax(Tzi)中的 T T T就是温度参数
3、蒸馏损失函数
- 通常,蒸馏损失函数由两部分加权求和组成
- 一部分是用于学习硬目标的传统损失函数
- 另一部分是用于学习暗知识的损失函数
- 一般是基于教师模型输出和学生模型预测之间的差异
- 一种常见的损失函数是KL散度: K L ( P ∥ Q ) = ∑ i P ( i ) ⋅ log ( P ( i ) Q ( i ) ) \mathrm{KL}(P \| Q)=\sum_i P(i) \cdot \log \left(\frac{P(i)}{Q(i)}\right) KL(P∥Q)=∑iP(i)⋅log(Q(i)P(i)), P P P 是教师模型输出的软化目标分布, Q Q Q是学生模型预测的概率分布,KL散度衡量两个概率分布之间的相似程度
三、漂移
参考:机器学习中的漂移
1、概念漂移
P ( Y ∣ X ) P(Y|X) P(Y∣X)分布变化,意味着模型的输入和真实标签之间的关系发生了变化
2、预测漂移
预测标签分布 P ( y ~ ∣ X ) P(\tilde{y}|X) P(y~∣X)变化,意味着模型的输入和模型的预测之间的关系发生了变化
3、标签漂移
标签 P ( Y ) P(Y) P(Y)的概率变化
4、特征漂移
P ( X ) P(X) P(X)概率的变化,意味着模型输入的分布发生了变化