机器学习的基本问题是利用模型对数据进行拟合,学习的目的并不是是对有限训练集进行正确预测,而是对不曾在训练集合出现的样本可以正确预测。模型对训练集数据的偏差称为经验偏差,对测试集数据的偏差称为泛化偏差。模型对训练集之外样本的预测能力就称为模型的泛化能力,追求这种泛化能力始终是机器学习的目标算法
过拟合(overfitting)和欠拟合(underfitting)是致使模型泛化能力不高的两种常见缘由,都是模型学习能力与数据复杂度之间失配的结果。“欠拟合”经常在模型学习能力较弱,而数据复杂度较高的状况出现,此时模型因为学习能力不足,没法学习到数据集中的“通常规律”,于是致使泛化能力弱。与之相反,“过拟合”经常在模型学习能力过强的状况中出现,此时的模型学习能力太强,以致于将训练集单个样本自身的特色都能捕捉到,并将其认为是“通常规律”,一样这种状况也会致使模型泛化能力降低。过拟合与欠拟合的区别在于,欠拟合在训练集和测试集上的性能都较差,而过拟合每每能较好地学习训练集数据的性质,而在测试集上的性能较差。在神经网络训练的过程当中,欠拟合主要表现为输出结果的高误差,而过拟合主要表现为输出结果的高方差数据库
图示
网络
欠拟合出现缘由机器学习
欠拟合的状况比较容易克服,常看法决方法有函数
过拟合出现缘由性能
过拟合的解决方案学习
正则化测试
在模型训练的过程当中,须要下降 loss 以达到提升 accuracy 的目的。此时,使用正则化之类的方法直接将权值的大小加入到 loss 里,在训练的时候限制权值变大。训练过程须要下降总体的 loss,这时候,一方面能下降实际输出与样本之间的偏差,也能下降权值大小spa
正则化方法包括 \(L0\) 正则、 \(L1\) 正则和 \(L2\) 正则,而正则通常是在目标函数以后加上对于的范数。可是在机器学习中通常使用 \(L2\) 正则:
\[ C = C_0 + \frac{\lambda}{2n} . \sum_i w_i^2 \].net
\(L2\) 范数是指向量各元素的平方和而后求平方根。可使得 \(W\) 的每一个元素都很小,都接近于0,但不会让它等于0,而是接近于0。 \(L2\) 正则项起到使得参数 \(W\) 变小加重的效果,关于它为何能防止过拟合简答的理解为:更小的参数值 \(W\) 意味着模型的复杂度更低,对训练数据的拟合刚恰好,不会过度拟合训练数据,从而使得不会过拟合,以提升模型的泛化能力
数据扩增
这是解决过拟合最有效的方法,只要给足够多的数据,让模型「看见」尽量多的「例外状况」,它就会不断修正本身,从而获得更好的结果
如何获取更多数据,能够有如下几个方法
Dropout
在训练时,每次随机(如50%几率)忽略隐层的某些节点;这样,咱们至关于随机从 \(2^n\)(n个神经元的网络) 个模型中采样选择模型
Early stopping
Early stopping即是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛以前中止迭代来防止过拟合
具体作法是,在每个Epoch结束时计算validation data的accuracy,当accuracy再也不提升时,就中止训练。固然咱们并不会在accuracy一下降的时候就中止训练,由于可能通过这个Epoch后,accuracy下降了,可是随后的Epoch又让accuracy又上去了,因此不能根据一两次的连续下降就判断再也不提升。通常的作法是,在训练的过程当中,记录到目前为止最好的validation accuracy,当连续10次Epoch(或者更屡次)没达到最佳accuracy时,则能够认为accuracy再也不提升了。此时即可以中止迭代了(Early Stopping)。这种策略也称为“No-improvement-in-n”,n即Epoch的次数,能够根据实际状况取,如十、20、30……