Train sets 用来训练你的算法模型
Dev sets 用来验证不同算法的表现情况,从中选择最好的算法模型
Test sets 用来测试最好算法的实际表现,作为该算法的无偏估计
这 3 个集合在数量不大,如:100,1000,10000 的时候,设置为 60%、20%、20%,或者 70% 和 30%(无 dev);
大数据时代,对于 100 万的样本,往往也只需要 10000 个样本就够了,对于大数据样本,Train/Dev/Test sets 的比例通常可以设置为 98%/1%/1%,或者 99%/0.5%/0.5%。样本数据量越大,相应的 Dev/Test sets 的比例可以设置的越低一些。
上述这么划分数据的一个前提假设是:训练样本和测试样本来自于相同分布。
举个例子,假设你开发一个手机 app,可以让用户上传图片,然后 app 识别出猫的图片。在 app 识别算法中,你的训练样本可能来自网络下载,而你的验证和测试样本可能来自不同用户的上传。从网络下载的图片一般像素较高而且比较正规,而用户上传的图片往往像素不稳定,且图片质量不一。因此,训练样本和验证 / 测试样本可能来自不同的分布。
我们在参加比赛的时候,一般不需要去设置 testset,Test sets 的目标主要是进行无偏估计。我们可以通过 Train sets 训练不同的算法模型,然后分别在 Dev sets 上进行验证,根据结果选择最好的算法模型。
high bias。 减少 high bias 的方法通常是增加神经网络的隐藏层个数、神经元个数,训练时间延长,选择其它更复杂的 NN 模型等。
high variance。减少 high variance 的方法通常是增加训练样本数据,进行正则化 Regularization,选择其他更复杂的 NN 模型等。
传统机器学习算法中,Bias 和 Variance 通常是对立的,减小 Bias 会增加 Variance,减小 Variance 会增加 Bias。而在现在的深度学习中,通过使用更复杂的神经网络和海量的训练样本,一般能够同时有效减小 Bias 和 Variance。
问题优化方法高偏差增加复杂度高方差正则化,增加数据
问题:为什么只对 w 进行正则化而不对 b 进行正则化呢?
答:因为 w 维数高,复杂度远超 b。
L1 优点:节约存储空间,因为大部分 w 为 0。
缺点:微分求导方面比较复杂。
结论:选择 L2 regularization。
问:为什么 L2 正则化有效?
答:可以这么理解。
加入正则化后,参数 w 的更新变为:
此处显然
也就意味着加入 L2 后,参数 w 的衰减加快,而我们在古玩论坛神经网络中一般会有一个激活函数,我们以 tanh 为例:
如果 w 小话,意味着输出小,而 tanh 在 0 附近接近于线性,也就意味着网络的非线性整体减小了。
但是如果 w 过小,意味着某些神经元会不起作用,网络变为:
此时网络的拟合能力变弱,因此我们要选择一个合适的 ,防止 w 衰减过快。
Dropout 有不同的实现方法,下面介绍:
Inverted dropout
keep_prob=0.8# 保留0.8dl=np.random.rand(al.shape[0],al.shape[1])