)
11.1迁移学习深度神经网络需要大量标注数据才能训练好从头训练大模型计算资源消耗巨大时间、GPU、电费把一个任务上学到的知识迁移到另一个相关任务上三种实现方式1做好一个模型将其做成一个特征提取的模块用预训练模型的中间层输出作为固定特征不更新模型参数Word2Vec词向量、ResNet-50提取图像特征2在一个相关的任务上训练一个模型然后在另一个任务上直接用它先在一个数据丰富的大任务上训练再直接用于目标任务3训练好一个模型然后在一个新的任务上对其做微调使模型能更好的适应新的任务加载预训练权重然后在目标任务上继续训练本讲重点在计算机视觉上的应用在CV中存在了很多大规模标好的数据集特别是分类问题因为标号容易在CV的迁移学习我们是希望存在很多数据的一些应用上比较好的模型能将它的知识拓展到我们自己的任务上去使用预训练好的模型预训练模型 在大规模通用数据集上训练好的神经网络可以将神经网络分成两块一块编码器一块解码器在一个比较大的数据上训练好的一个模型会具有一定的泛化能力放到新模型上或新的数据集上这个模型还是有效果的微调 (Fine-Tuning)的技术要点将预训练好的模型用在新任务上叫fine-tuning微调通常在深度学习里面微调能带来最好的效果但是也有一定的开销微调是怎么做的1在新的任务上构建一个新的模型新的模型的架构要更预训练的模型的架构是一样的2在找到合适的预训练模型之后要初始化我们的模型将预训练模型的除了最后一层之外特征提取器的权重都复制给我们的模型最后一层的解码器用的还是随机的权重冻结底层 (Freeze Bottom Layers)神经网络通常有一个层次化的最底层一般是学习了底层的特征上层的更与语义相关所以一般来说底层与上面层没有太多的关系在换了数据集之后泛化性都很好冻结底层 用预训练模型的眼睛看世界只重新训练大脑怎么理解你的任务。冻结底层Layer 1 ~ 某中间层不更新梯度保留通用视觉知识训练顶层上层 输出层正常训练学习任务特定表示正则化作用大幅减少可训练参数量 防止过拟合加速训练预训练权重让优化起点接近最优训练轮数大幅减少如果源域和目标域差异太大预训练知识可能反而是噪声11.2NLP自然语言处理领域中的微调NLP与CV在微调中的区别NLP里面不存在特别大的标好的数据集在NLP中更多是说有大量的没有标注的文档但是比较难的是去给这些文档做标号。在NLP中我们一般用自监督的一个预训练标号是由自己产生的也就是伪标号。然后用这些伪标号来参与进一个正常的可以监督学习的任务之中用于完成预训练在NLP中有两个常见的应用来生成这样的伪标号语言模型Language ModelLM给出前面的一些词去预测下一个词带掩码的语言模型Masked Language ModelMLM在一个句子里面随机的扣掉一些字然后让你去预测这个字有点像是完型填空完型填空比预测下一个字容易些因为完型填空能看到左右的信息而预测比较开放两种预训练模型1词嵌入Word Embeddings要预测的值用u来表示上下文的词用v来表示v加起来再与u做内积得到u与v之间的关系这个算法叫CBOW选取一个y使得CBOW的值最大来做预测2基于 Transformer 的预训练模型BERTEncoderMLM NSP下一句预测双向编码适合理解任务GPTDecoder自回归 LM单向生成适合文本生成T5Encoder-DecoderSpan Corruption填充文本片段统一 seq2seq 框架BERTFeatures表示各个词语的向量需要预测就放入dense层Label标签表示两个句子是否有关联以及预测的输出利用BERT模型根据不同的任务做不同的微调BERT 微调 冻结预训练知识 轻量任务层 小学习率快速适应让同一个预训练模型通过不同的头部解决各种 NLP 任务。