1、Bias(偏差) & Variance(方差)
bias就是衡量训练集和我们的最小误差的差距
variance是指你的验证集和你训练集的效果的差别,而不是某个绝对的值。
2、如何解决bias和variance的问题
如果你的模型训练结果是high bias,我们一般用以下几种方法来改进:
1)尝试使用更复杂更大的网络结构(增加单元数、增加层数,或者更改结构)
2)训练更长的时间(增加迭代次)数
因为high bias意味着我们训练的还不够,连训练集的内容都无法很好的识别。所以这种情况下不用去想增加数据量,因为这个没关系,是模型太差了。
如果你的模型训练结果是high variance,那我们可以这样改进:
1)收集更多的训练样本去训练
high variance意味着你的训练集和验证集的效果有很大差别,很可能是因为你的训练集里面的数据并不能很好地反映验证集里面的特征,或者说验证集中有一些需要学习到的东西在你的训练集中却没有,所以模型无论如何学习你的训练集,也无法很好地预测验证集的数据,因此我们应该收集更多的数据,学习更多的特征。
2)使用 正则化手段
如果你增加了数据量去训练之后,variance还是很大,那说明我们遇到了典型的 over fitting,我们就需要考虑用 正则化手段了。
3、正则化(Regularization)
正则化,就是给损失函数加一个正则化项
1)L2正则化
就是给J加上一个 (λ/2m) * sum(w^2),也就是所有w的平方和,再乘以λ/2m,m是样本量。 综合起来就是:J(w,b)=avg(L(y,y’)) + (λ/2m) * sum(w^2)
这样一来,我们在用梯度下降的时候,求J对w的偏导,你会发现dw变大了,而我们的更新法则为w–>w-α·dw,因此最终选择的 参数w会变得更小。参数更小,对于模型来说,就意味着更加简单,于是我们的目的就达到了。
2)dropout 丢弃法
在训练过程中,随机地“丢弃”一些神经元,强行简化模型! 具体的操作方法通常是:在一层神经网络之后,随机按照一定概率“敲掉”一部分神经元,然后再将激活值传给下一层,下一层如果有必要,再敲掉一些,再传给下一层…
训练模型实际上就是学习参数,参数就是每个神经元的权重。 现在 每个神经元都有可能被丢掉,因此模型训练的时候,模型不敢给任何神经元过大的参数,因此这样风险太大,万一给某个神经元的权重很大,结果下一回这个神经元就被敲掉了,那这个模型肯定会表现很差。因此,在dropout机制下,每个神经元最后的参数都会比较小。
在训练的时候,采用dropout敲掉神经元,但并不是真的把它敲没了,而是暂时“失活”,等训练完毕,在预测的时候,我们又会使用它们。dropout只是让我们在训练的时候让参数变小。
如果该层神经网络的神经元很多,可以设置drop掉0.5甚至更多比例的神经元,对于神经元不多的,一般设置为0.25左右。
3)early-stopping
不要训练那么久
【1】正则化