为了构建一个泛化能力很强的模型,我们需要做几项关键的事情:
- 选择正确的数据
- 选择合理的模型
- 选择合适的优化算法
- 避免模型的过拟合
第一、需要正确的数据。我们不能期待使用一个错误的数据来构建一个泛化能力强的模型。比如数据里包含了大量的噪声,这很难让我们训练出有效模型出来。
第二、需要选择合适的模型。比如图像识别,我们都知道CNN是最合适的模型; 对于构建评分卡,可能集成模型是比较合适的。这里没有一个绝对的理论,很多都是通过不断尝试得到的经验。
第三、需要选择合适的优化算法。针对于复杂的模型,这一点尤其重要。比如面对复杂的深度学习模型,我们可以选择梯度下降法,也可以选择Adam等算法。但每一种不同类型的优化算法给我们带来不同质量的解,而且这种解带来的泛化能力也是不一样的。
第四、需要避免过拟合现象。在前面所讲的条件不变的情况下,过拟合是最核心的问题。我们需要通过一些手段来避免或者降低过拟合现象。
如何避免过拟合?
- 数据量的增加(我们通过一些人工的方式或者半人工的方式来收集更多的数据,但是数据的收集本身是需要成本的,特别是对于监督学习来说,我们需要收集的是有标签的数据,这个标签可能需要人工,另外数据量的增加根技术没有太多的关系,所以这里不作重点讨论)
- 使用更简单的模型
- 加入正则项(该应用在防止过拟合上这个问题上非常常见)
正则的本质作用是什么?
总体来讲,通过正则我们可以缩小可行解空间,而且在这里被我们丢弃掉的可行解是比较容易产生过拟合的。我们知道正则的强度是由超参数lambdalambda来控制,这个值越大,所选择的可行解空间也会相应变小
对于L1和L2正则到底有什么区别呢?
L1比起L2范数具有稀疏性的特点。比如我们把L1应用在逻辑回归,则最后得出来的参数很多会变成0。所以L1范数也可以用于特征选择。