1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai
1.12 改善你的模型的表现 Improving your model performance
我们已经学过
我们现在把它们全部组合起来写成一套如何提高学习算法性能的指导方针。
1.如果想要让一个监督学习算法达到实用,基本上需要你完成两件事情。
- 首先,你的算法对训练集的拟合很好,这可以看成是你能做到可避免偏差很低。
- 第二,在训练集中做得很好,然后推广到开发集和测试集也很好,这就是说方差不是太大。
在正交化的精神下,你可以假设有二组旋钮
- 一组可以修正可避免偏差问题,比如训练更大的网络或者训练更久
- 还有一组独立的技巧可以用来处理方差问题,比如正则化或者收集更多训练数据。
2.如果你想提升ML系统的性能,我建议
- 你们看看训练错误率和贝叶斯错误率估计值之间的距离,让你知道可避免偏差有多大。换句话说,就是你觉得还能做多好,你对训练集的优化还有多少空间。
- 然后看看你的开发错误率和训练错误率之间的距离,就知道你的方差问题有多大。换句话说,你应该做多少努力让你的算法表现能够从训练集推广到开发集,算法是没有在开发集上训练的。
3.如果你想用尽一切办法减少可避免偏差,我建议试试这样的策略:
- 比如使用规模更大的模型,这样算法在训练集上的表现会更好,或者训练更久。
- 使用更好的优化算法,比如说加入momentum或者RMSprop,或者使用更好的算法,比如Adam。
- 你还可以试试寻找更好的新NN架构,或者说更好的超参数。这些手段包罗万象
- 你可以改变激活函数
- 改变层数或者隐藏单位数,虽然你这么做可能会让模型规模变大。
- 或者试用其他模型,其他架构,如循环NN和卷积NN。
新的神经网络架构能否更好地拟合你的训练集,有时也很难预先判断,但有时换架构可能会得到好得多的结果。
4.当你发现方差是个问题时,你可以试用很多技巧,包括以下这些:
- 你可以收集更多数据,因为收集更多数据去训练可以帮你更好地推广到系统看不到的开发集数据。
- 你可以尝试正则化,包括正则化,dropout正则化或者我们在之前课程中提到的数据增强。
- 同时你也可以试用不同的NN,超参数搜索,看看能不能帮助你,找到一个更适合你的问题的NN架构。
我想这些偏差、可避免偏差和方差的概念是容易上手,难以精通的。如果你能系统全面地应用本周课程里的概念,你实际上会比很多现有的机器学习团队更有效率、更系统、更有策略地系统提高机器学习系统的性能。