1. 降低模型过拟合/欠拟合风险
1.1 提高数据数量
- 收集更多真实数据
对于图像、文本、视频类型的数据,可以通过网络爬虫或者搜寻公开数据集的方法,得到更多真实数据。
- 创造更多数据
对于图像,采用数据扩增的一系列方法:旋转、平移、拉伸、裁剪、加噪声等;
对于数值,采用添加噪声方式
- mixup
使用任意两个类别的数据单样本,进行线性差值,得到新的数据和新的标签。使得原本离散粒度为1的数据集,离散粒度小于1,数据分布更平滑。
1.2 设计合适的模型
- 模型参数量适中
首先搭建一个简单的网络模型,然后尝试初步加宽或者加深
- 模型参数初始化方案
尝试几种不同类型的初始化方法,Gaussian(高斯分布),Xavier(均匀分布),MSRA(高斯分布)
尝试从已有的预训练模型中进行参数迁移
- 使用合适的激活函数
中间层一般使用ReLU
图像生成任务的输出层一般使用tanh
- 使用合适的规范化层
当前流行的有BN、LN、IN、GN方法,根据自身任务的类型,例如分类、检测、分割、生成任务,挑选合适的功能层。
- 借鉴最前沿的模型方法
例如,residual block, inception block, shuffle block, dense block等功能模块
2. 提高模型泛化性能
2.1 正确的损失约束
对于多分类问题,最常用的方法是softmax,其改进版本L-softmax(添加乘性margin),A-softmax(归一化权值,margin),可以比较好的拉大类间的距离。
对于细粒度分类问题,facenet提出的triplet loss是一个广为使用的方法,可以约束正负样本对之间的距离间隔,十分适用于开集验证问题。
最新的方法,当属arcface中提出的方法,并有相应的工具insightface。
2.2 合适的优化方法
- adam
- sgd
- RMSprop
- …
2.3 提前停止迭代
通过观察训练集和验证集上性能指标的变化情况,在性能下降之前及时停止。
2.4 多模型融合
- bagging
- boosting
3. 避免梯度消失或爆炸
3.1 激活函数ReLU系列
ReLU,LeakyReLU,ELU
3.2 Normalizition方法
BN,IN,LN,GN