迁移学习
由于深度网络的训练对数据要求较大,且训练成本较高,对在其他任务训练好的深度模型使用到相关任务的需求较大,主要方式有
- 使用深度模型做特征抽取(bert,word2vec等),输入到不同模型,解决不同任务
- 在方便训练的相近的任务(可能是 训练数据充足等)上训练模型,在目标任务上重用训练好的模型
- 微调预训练模型
Fine-tuning(从CV方向进行讲解)
CV领域存在很多良好的数据集(imagenet),如何将在这些大数据集上训练好的模型(学到的知识)迁移到自己的任务上来?这就是Fine-tuning要做的任务。
Pre-trained Model
如何进行Fine-Tuning
模型构建
- 直接使用预训练模型的所有参数和架构
- 只随机初始化最后一个输出层的参数
模型学习
- 使用小学习率寻找解(预训练模型已在解附近,小步探索)
Freeze Bottom Layers
深度神经网络不同层在具体任务中捕捉不同层级的特征信息,更接近输出层的网络层更加倾向于捕捉任务相关特征(task specific),底层网络更加倾向于捕捉通用的、一般的特征(图片中的曲线、边等)
针对预训练模型该特性以及要Fine-tuning目标任务,对底层和高层网络采用不同训练手段
- 底层冻结或者低学习率
- 高层正常训练
应用
Fine-tuning in NLP
NLP领域面临的问题与CV不同,NLP没有大规模良好标记的数据集,只有大量未标记的文本数据(维基百科、电子书、爬取的数据等)
只能使用自监督学习学习的方式进行模型预训练
- 生成伪标签,然后在伪标签上进行监督学习
- 主要的两种类型
- 语言模型:给定序列预测下一个词
- Masked language model:给定序列,预测序列中的某一个词
常见预训练模型
- 词嵌入模型:获得包含语义信息的词向量
- 基于transformer的预训练模型
- BERT:encoder 适用于文本分类等的NLU任务
- GPT: decoder 适用于摘要、总结等NLG任务
- T5: encoder-decoder 适用于摘要、总结等NLG任务
bert微调小技巧
在将bert应用到自己任务时,可以将bert接近输出层的几层权重默认初始化
Hugging Face 获取预训练模型