模型欠拟合怎么解决?

  1. 添加其他特征项,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。例如,“组合”、“泛化”、“相关性”三类特征是特征添加的重要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。除上面的特征之外,“上下文特征”、“平台特征”等等,都可以作为特征添加的首选项。
  2. 添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。例如上面的图片的例子。
  3. 减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。

特征交叉、交叉特征、特征组合

生成多项式:

sklearn.preprocessing.PolynomialFeatures(degree=2, interaction_only=False, include_bias=True)

参数说明:

  • degree:默认为2,多项式次数(就同几元几次方程中的次数一样)
  • interaction_only:是否包含单个自变量的幂(a**2,b**3)的特征。为True则表示去除与自己相乘的情况,只有a*b,a*c 这种不同变量相乘。默认为False,表示可以有a*a、b*b这种单个变量的幂。

多项式的代码解释:http://t.csdn.cn/oMaPd


模型训练相关知识:

什么是自适应学习率

损失通常高度敏感于参数空间中的某些方向,而不敏感于其他。动量算法可以在一定程度上缓解这些问题,但这样做的代价是引入了另一个超参数。在这种情况下,自然会问有没有其他方法。如果我们相信方向敏感度在某种程度是轴对称的,那么每个参数设置不同的学习率,在整个学习过程中自动适应这些学习率是有道理的。

什么是同步Batch Norm

BatchNorm的实现都是只考虑了single gpu。也就是说BN使用的均值和标准差是单个gpu算的,相当于缩小了mini-batch size。至于为什么这样实现,1)因为没有sync的需求,因为对于大多数vision问题,单gpu上的mini-batch已经够大了,完全不会影响结果。2)影响训练速度,BN layer通常是在网络结构里面广泛使用的,这样每次都同步一下GPUs,十分影响训练速度。但是为了达到更好的效果, 实现Sync-BN也是很有意义的。在深度学习平台框架中多数是采用数据并行的方式, 每个GPU卡上的中间数据没有关联。为了实现跨卡同步BN, 在前向运算的时候需要计算全局的均值和方差,在后向运算时候计算全局梯度。 最简单的实现方法是先同步求均值,再发回各卡然后同步求方差,但是这样就同步了两次。实际上均值和方差可以放到一起求解, 只需要同步一次就可以。
 

你可能感兴趣的:(模型训练,人工智能,算法)