
# 增量预训练典型问题
1. **训练过程中loss偶尔出现突刺。**
   可以同时监控模型训练过程中的grad norm数值，如果grad norm也同步发生跳变，那么说明模型在此阶段的学习不平稳，可能是因为训练数据的质量较差，模型难以学习，建议对训练数据进行再次更为精细的加工。
   
2. **训练loss逐步降到0。**
   可能是模型训练轮数过多，产生过拟合现象，应减少训练轮次。通常来说预训练的训练轮次在1-2之间即可，不需要训练太多轮次。
   
3. **模型loss迟迟不下降，或隐约有上升的趋势。**
   可能是学习率设置的过大，导致模型在训练初期就已经偏离最优路线，难以学到最优点。建议减小学习率重新训练。
   
4. **训练初期loss波动较大，grad norm的值也较大。**
   可能是模型warmup的步数太少。由于训练初期Adam优化器的动量参数需要重新设定，所以初期的loss波动较大，因此需要warmup来进行缓解，随着数据量的增加，模型的warmup步数也应该随之增加。
   
5. **训练过程中loss波动较大。**
   如果loss的上下波动较大，可以检查训练过程中的Batch Size设置是否合理，可以适当增加Batch Size的大小来让模型的训练过程更加平稳。
   
#### 无监督的领域知识数据，量级无法支持增量预训练，如何让模型学习
一般来说，我们建议采用增量预训练的方式让模型学习领域知识，但预训练对数据量的要求较大，如果您的无监督文档量级过小，达不到预训练要求，您可以通过一些手段将其转换为有监督数据，再将转换后的领域知识与目标任务数据混合，使用微调的方式让模型学习。
这里提供了一些将无监督数据转换为有监督数据的方案，供您参考：
- **基于规则构建：** 您可以通过采用一些简单的规则来构建有监督数据。比如：
  表1采用规则将无监督数据构建为有监督数据的常用方法 
  | **规则场景**                             | **说明**                                                                                                  |
  |:---|:---|
  | **文本生成：**根据标题、关键词、简介生成段落             | 若您的无监督文档中含义标题、关键词、简介等结构化信息，可以将有监督的问题设置为"请根据标题xxx/关键性xxx/简介xxx，生成一段不少于xx个字的文本。"，将回答设置为符合要求的段落。           |
  | **续写：**根据段落的首句、首段续写成完整的段落            | 若您的无监督文档没有任何结构化信息，可以将有监督的问题设置为"以下是一篇文章的第一个句子：xxx/第一段落：xxx。请根据以上的句子/段落，续写为一段不少于xx个字的文本。"，再将回答设置为符合要求的段落。 |
  | **扩写：**根据段落的其中一句或者一段续写成完整的段落         | 若您的无监督文档没有任何结构化信息，可以将有监督的问题设置为"以下是一篇文章的某个句子：xxx/某个段落：xxx。请根据以上的句子/段落，扩写成一段不少于xx个字的文本。"，再将回答设置为符合要求的段落。  |
  | **填空：**从段落随机掩盖一个或多个词语、句子、段落，再将段落完形填空 | 若您的无监督文档没有任何结构化信息，可以将有监督的问题设置为"以下的文章中有一些词语/句子/段落缺失，文章如下：xxx。请结合文章内容，将缺失的信息补充完整。"，再将回答设置为符合要求的信息。        |
     
  
使用规则构建的优点是快速且成本低，缺点是数据多样性较低。
- **基于大模型的数据泛化：**您可以通过调用大模型（比如盘古提供的任意一个规格的基础功能模型）来获取有监督场景。一个比较常见的方法是，将无监督的文本按照章节、段落、字符数进行切片，让模型基于这个片段生成问答对，再将段落、问题和答案三者组装为有监督数据。使用模型构建的优点是数据丰富度更高，缺点是成本较高。
![](https://support.huaweicloud.com/bestpractice-pangulm/public_sys-resources/note_3.0-zh-cn.png)
当您将无监督数据构建为有监督数据时，请尽可能保证数据的多样性。比如：不要将所有文本都构建为单一的续写场景，一个比较好的经验是，将不同文本构建为不同的场景，甚至将同一段文本构建为多个不同的场景。
不同规格的模型支持的长度不同，当您将无监督数据构建为有监督数据时，请确保数据长度符合模型长度限制。
