深度学习网络设计流程
Step 1:定义问题收集数据
- 确定问题是什么:即输入与预测分别是什么;
- 确定分类问题:是二分类问题、多分类问题、标量回归问题、向量回归问题, 还是多分类、多标签、聚类、生成、强化学习等;
- 假设输出是可以根据输入进行预测的(排除不可预测问题,Eg: 根据夏装销量预测冬装销量的非平稳问题;)
- 假设数据包含足够多信息,足以学习出输入和输出的关系;
Step 2:选择衡量成功的指标
观测是否成功的标志:
- 平衡分类问题:精度(accuracy)和接收者操作特征曲线下面积(ROC AUC)?
- 类别不平衡问题:准确率(precision)和召回率(recall)
- 排序或多标签分类:平均准确率均值(Mean Average Precision)
Step 3:确定评估方法
衡量当前进展(只选其一):
- 留出验证集:数据量大时可以采用;
- 折交叉验证:用于流出验证样本量太少;
- 重复的K折验证:如果可用的数据很少,同时模型评估又需要非常准确;
Step 4:准备数据
知道训练什么、要优化什么以及评估方法基础上,格式化数据使其可以输入到模型:
- 将数据处理为张量;
- 张量数值保持在较小范围,比如 (0,1) (-1,1);
- 不同的特征具有不同的取值范围(异质数据),那么应该做数据标准化;
- 对小数据问题,需要做特征工程;
Step 5:开发比基准更好的模型
开发一个小模型,打败纯随机基准(dumb baseline),获得统计功效(Statistical power):
- 假设输出是可以根据输入进行预测的;
- 假设数据包含足够多的信息,足以学习输入和输出之间的关系;
构建
- 最后一层激活函数:对网络的输出进行限制;
- 损失函数:匹配要解决的问题的类型;
- 优化配置:使用的 优化器、学习率 【一般使用rmsprop与默认的学习率】
Step 6:扩大模型规模:开发过拟合的模型
获得统计功效模型,判断模型是否足够强大,增加模型规模;
(1)添加更多层;
(2)让每一层变得更大;
(3)训练更多的轮次;
出现过拟合后,准备正则化和调节模型;
Step 7:模型正则化与调节超参数
尝试以下几项,达到模型最佳性能:
(1)添加 Dropout;
(2)尝试不同的架构:增加或减少层数;
(3)添加 L1 和/或 L2 正则化;
(4)尝试不同的超参数(比如每层的单元个数或优化器的学习率),以找到最佳配置;
(可选)反复做特征工程:添加新特征或删除没有信息量的特征;
【验证过程中,使用同一数据验证模型效果,会出现模型对验证过程过拟合,降低验证过程的可靠性;】
最后开发出满意的模型,在所有可用数据(训练数据+验证数据)训练最终模型,并用测试数据评估;若结果不理想,表明验证流程不可靠,可能需要更换可靠的评估方法,如重复的K折验证;