loss如果大,训练资料没有学好,此时有两个可能:
1.model bias太过简单(找不到loss低的function)。
**解决办法:**增加输入的feacture,设一个更大的model,也可以用deep learning增加弹性。
2.optimization做得不好(合适的function确实存在但是无法正确选择出来)。
如何判断是上面的哪种情况?
- 比较图像信息。(例如如果20层的network已经可以做得很好有很低的loss了,56层的明显错误便并不是model bias弹性不够导致的,是optimization做得不好)
- 可以先看比较浅的network(model),因为它们不太会有optimization的问题。
- 如果深层的model并没有包含更小的数据差,那就是optimization的问题。(例如↓)
看testing data
1.依旧很小,那很完美。
2.如果training data的loss小(并且确定model bias没有问题,optimization够大了)但是testing data的loss大有可能是overfitting。
- 上面是个特例极端情况。
- 正常来说:没有给足够的资料做为训练,因为model自由度很大就会导致overfitting。
解决方法:
1.增加训练资料。
2.data augmentation(用自己对问题的理解自己创造一些资料)。
注意:不能随便做,要是有道理的数据。根据对资料的特性,基于自己的理解,增加 data augmentation。
3.缩减弹性,写极限。
比如:减少神经元数目 或者 让model公用参数 或者 用比较少的features 或者 early stopping 或者 regularization 或者 drop out。
但是注意不要给模型太多的限制。限制太大了在测试上就没有好结果,也就导致了model bias。