神经网络基础知识点自学整理(2)

文章目录

  • 一、过拟合和欠拟合
    • 1.过拟合
    • 2.欠拟合
  • 二、正则化方法
    • 1.定义
    • 2.基于数据的正则化方法
    • 3.基于网络结构的正则化方法
    • 4.在损失函数中增加正则化项的方法
    • 5.基于optimization进行正则化


一、过拟合和欠拟合

1.过拟合

参考博客

  • 定义
    过拟合是指模型在训练集上表现很好,到了验证和测试阶段就很差,即模型的泛化能力很差。(泛化是指训练好的模型在前所未见的数据(测试集)上的性能好坏)

  • 原因
    (1)建模样本选取有误,如样本数量太少,选样方法错误,样本标签错误等,导致选取的样本数据不足以代表预定的分类规则
    (2)样本噪音干扰过大,使得机器将部分噪音认为是特征,扰乱了预设的分类规则
    (3)假设的模型无法合理存在,或者说是假设成立的条件实际并不成立
    (4)参数太多,模型复杂度过高
    (5)对于决策树模型,如果我们对于其生长没有合理的限制,其自由生长有可能使节点只包含单纯的事件数据(event)或非事件数据(no event),使其虽然可以完美匹配(拟合)训练数据,但是无法适应其他数据集
    (6)对于神经网络模型:a)对样本数据可能存在分类决策面不唯一,随着学习的进行,BP算法使权值可能收敛过于复杂的决策面;b)权值学习迭代次数足够多拟合了训练数据中的噪声和训练样例中没有代表性的特征

  • 解决
    (1)增加训练数据
    发生过拟合最常见的现象就是数据量太少而模型太复杂。注意保证训练数据的分布和测试数据的分布要保持一致,二者要是分布完全不同,那模型预测真可谓是对牛弹琴了。

    (2)使用正则化约束
    代价函数后面添加正则化项,可以避免训练出来的参数过大从而使模型过拟合。使用正则化缓解过拟合的手段广泛应用,不论是在线性回归还是在神经网络的梯度下降计算过程中,都应用到了正则化的方法。常用的正则化有l1正则和l2正则,具体使用哪个视具体情况而定,一般l2正则应用比较多。

    (3)减少特征数:去除那些非共性特征,可以提高模型的泛化能力

    (4)调整参数和超参数

    (5)降低模型的复杂度

    (6)使用Dropout

    (7)提前结束训练:比如训练误差一直在降低但验证误差却不再降低甚至上升,便可以结束模型训练了。

2.欠拟合

  • 定义
    模型描述能力太弱,以至于不能很好地学习到数据中的规律。

  • 原因
    (1) 模型复杂度过低
    (2) 特征量过少

  • 解决
    (1)模型复杂化
    例如回归模型添加更多的高次项,增加决策树的深度,增加神经网络的隐藏层数和隐藏单元数等,弃用原来的算法,使用一个更加复杂的算法或模型。例如用神经网络来替代线性回归,用随机森林来代替决策树等

    (2)增加更多的特征,使输入数据具有更强的表达能力
    特征挖掘十分重要,尤其是具有强表达能力的特征,往往可以抵过大量的弱表达能力的特征。特征的数量往往并非重点,质量才是,总之强特最重要。能否挖掘出强特,还在于对数据本身以及具体应用场景的深刻理解,往往依赖于经验。

    (3)调整参数和超参数
    神经网络超参数包括:学习率、学习衰减率、隐藏层数、隐藏层的单元数、Adam优化算法中的β1和β2参数、batch_size数值等。

    (4)增加训练数据往往没有用

    (5)降低正则化约束,考虑是否降低正则化参数λ或者直接去除正则化项

二、正则化方法

参考博客

1.定义

传统的定义可能定义为在模型的损失函数增加惩罚项来增强模型的泛化能力。

但是,在最新的Goodfellow和Bengio出的deep learning一书中,给出了 “正则化” 较为广义的定义:能够提高模型在test上的准确率,能够提高模型的泛化能力所做的任何改动,我们都可以称之为正则化。

2.基于数据的正则化方法

  1. data augmentation
    通过对输入层或者隐层特征进行转换,从而获得一个更大的数据集,提高模型在训练样本较少情况下的效果
  2. dropout

3.基于网络结构的正则化方法

  1. 权重共享
    不同的任务共享网络模型结构的部分,则称作权重共享,从而减少模型参数。
  2. 正确选择激活函数
  3. 随机在模型中注入噪声
  4. Multi-task learning
    它可以结合半监督学习,在辅助task任务中充分利用无标签的数据
  5. 模型选择
    从我们训练的多个模型中选择最佳的模型,所以我们需要一份数据集进行评估,往往通过对训练集进行划分validation数据集,通过模型在validation集的预测效果作为评判准则。但由于不同的划分结果模型在validation的表现波动较大,如果划分不好,可能无法选择到最好的模型与参数。
    为了解决这个问题,有人提出了交叉验证(cross-validation),通过将样本分成k份,依次取其中的一份作为validation验证集,其它作为训练集,最终取k次预测结果的平均作为模型的最终预测预结果。

4.在损失函数中增加正则化项的方法

损失函数主要是保证模型的输出和目标label一致性,而加入的正则化项是独立于label标签,可以对数据的先验知识进行建模,如果数据是稀疏的或者服从某种分布,我们可以在损失函数中加入这种先验知识限制,提高模型的效果。

  1. L1
  2. L2

5.基于optimization进行正则化

  1. 模型参数的初始化
    目前最常见的对参数的初始化方法是(a)已知的数据分布中采样(例如正态分布等)初始化模型参数,有利于减缓梯度消失或者梯度爆炸问题。(b)通过在相同领域上的数据集做pre-training得到的模型参数初始化fine-tuning中的模型,通常可以加快模型收敛,而且可以学习到一些基础特征。(c)课程学习 (curriculum learning)也称作warm-start methods,核心思想是模仿人类学习的特点,先学简单,再学较难的,会更有利于学习。所以在机器学习中,先学习简单的样本,再学习较困难的样本,能够提高模型的表现。

  2. 梯度更新
    有两方面影响最终权重的计算,(a)梯度更新规则,包括SGD,momentum,Adam等(b)权重和梯度的值的更改,比如在梯度上注入噪声值等

  3. Early Stopping

你可能感兴趣的:(入门神经网络,(python),神经网络)