1 网络架构
一个神经网络一般可以分两块:
- 特征抽取,将原始像素变成容易线性分割的特征
- Softmax回归,线性分类器做分类
2 微调步骤
- Pretrain: 在源数据集(例如ImageNet数据集)上预训练神经网络模型,即源模型。
- Copy: 创建一个新的神经网络模型,即目标模型。复制源模型上的所有模型设计及其参数(输出层除外)。
- Random Initialization: 向目标模型添加输出层,输出数是目标数据集中的类别数。随机初始化该层的模型参数。
- Fine-tune, Train from scratch: 在目标数据集(如椅子数据集)上训练目标模型。输出层将从头开始进行训练,而所有其他层的参数将根据源模型的参数进行微调。
3 训练
- 是目标数据集上一个正常的训练任务,但使用更强的正则化(更小的学习率,更少的数据迭代)
- 源数据集远复杂于目标数据集(类别数、样本数大很多),通常微调效果更好
4 常用技术
重用分类器权重
如果源数据集也有标号A(表示车辆),目标数据集也有标号A;
可以用预训练好的模型中分类器对应标号对应向量初始化新模型
固定一些层
神经网络通常学习有层次的的特征表示,低层次更通用,高层次特征跟数据集更相关;可以固定底层一些参数,不参与更新。
5 总结
- 微调通过使用在大数据上得到的预训练好的模型来初始化模型参数,来完成精度提升
- 预训练模型质量很重要,看重其训练的数据集
- 微调通常更快更好