机器学习模型设计后,还仅仅只是第一步,模型后期的调整也是机器学习非常重要的部分
在说模型后期调整前,再整理一下机器模型设计的基本步骤
1. 分析数据:分析、处理数据
2. 设计模型:神经模块叠加,激活函数选择
3. 损失函数:评估模型是否优秀
4. 优化函数:通过最小化损失函数,调整神经模块中的参数,一般为GD(梯度下降)、SGD(随机梯度下降)、Adam(Ada+Momentum 自适应+动量)
5. 训练集:使用训练集,通过循环执行优化函数对设计模型进行参数调整
6. 验证集:使用训练集训练好的参数,进行检测,看输出损失函数如何
7. 测试集:与验证集一样,分出验证集主要是由于测试集可能不会给出,所以需要自己划分验证集
当模型表现不好时,我们需要怎么改进模型呢?
训练集改进
首先,我们得问自己,模型在训练集(Training Set)中表现的好不好!
之前我就只看测试集中的表现,但其实如果模型在已有训练集中都表现不好,基本不太可能在测试集得到好结果
所以训练集获得的效果不太好时,我们有哪些方法对模型进行改进呢?
神经元个数
在每一层网络中,调整适合的神经元个数。理论上,一个拥有很多个神经元层可以表示任何的关系,可以适当增加神经元个数。但是也不能设置的太大,物极必反。
激活函数
sigmod、relu、tanh、softplus、softsign、linear
特殊的映射函数
损失函数
MSE(均方差)、交叉熵
优化函数
GD: 计算全部数据后,进行更新
SGD: 获取一个数据,更新一次
mini_batch: 可以当作是特殊的SGD, 获取一个batch后进行参数更新呢,而不是SGD每个数据都更新
Adam: 是自适应调整学习率,距离最佳值越远,学习率越大,距离最佳值越小,学习率越小
测试集改进
当训练集效果很好,测试集效果不好时,就说明现在的模型overfiting了
我们应该在训练出能让测试集overfiting的参数后,再考虑下面这些改进测试集的方法
Early Stopping
当测试集出现损失函数值随着训练次数先下降,到一定点后又上升的情况时,我们就在验证集中寻找出最佳损失值的训练次数,提早停止
正则化
在损失函数后添加参数的约束项,通常为参数的第一范式和第二范式
Dropout
在训练集训练时,丢掉一些神经元,然后在测试集中正常训练
相当于是比赛中,平时训练增加难度,正真上场时就会轻松