zoukankan      html  css  js  c++  java
  • 机器学习之正则化技术

    前言

    机器学习中的核心问题:模型的设计不仅在训练数据上表现好,并且能在新输入上泛化好;
    正则化策略:以增大训练误差为代价,来减少测试误差(如果在训练误差上很小,可能出现过拟合的情况);
    最好的拟合模型(最小化泛化误差的意义上)是一个适当正则化的大型模型。

    正则化(regularization)的作用实际上就是防止模型过拟合,提高模型的泛化能力。其思想是在损失函数中加入刻画模型复杂程度的指标。

    正则化(regularization)技术是机器学习中十分常用的技术,它在不同的模型或者情景中以不同的名字出现,比如以L2正则化为例,如果将L2正则化用于linear regression,那么这就对应了ridge regression;如果将L2正则化用于神经网络(neural network),那么L2对应为权重衰减(weight decay)。

    范数约束

    通过对模型参数添加惩罚参数来限制模型能力,常用的就是在损失函数基础上添加范数约束。

    通常情况下,深度学习中只对仿射参数添加约束,对偏置项不加约束。主要原因是偏置项一般需要较少的数据就能精确的拟合。如果添加约束常常会导致欠拟合。

    L1、L2 正则化,是通过在损失函数中添加一项对权重的约束来实现正则化的,L1 是求权重的绝对值之和,L2 是求权重的平方和。

    L1 正则化中的很多参数向量是稀疏向量,因为很多模型导致参数趋近于 0,因此它常用于特征选择设置中。机器学习中最常用的正则化方法是对权重施加 L2 范数约束。

    如果从概率角度进行分析,很多范数约束相当于对参数添加先验分布,其中L2范数相当于参数服从高斯先验分布;L1范数相当于拉普拉斯分布。

    更多可参考:https://www.cnblogs.com/hellcat/p/7979711.html

    Dropout

    Dropout是一类通用并且计算简洁的正则化方法,在2014年被提出后广泛的使用。Dropout是指在模型训练时随机的让隐层节点的权重变成0,暂时认为这些节点不是网络结构的一部分,但是会把它们的权重保留下来(不更新)。主要是通过设置 keep_prob 参数随机让部分神经元在训练过程中不起作用来实现正则化的。

    (Dropout只用在训练时的全连接层)

    Drop Connect

     Drop Connect 是另一种减少算法过拟合的正则化策略,是 Dropout 的一般化。在 Drop Connect 的过程中需要将网络架构权重的一个随机选择子集设置为零,取代了在 Dropout 中对每个层随机选择激活函数的子集设置为零的做法。由于每个单元接收来自过去层单元的随机子集的输入,Drop Connect 和 Dropout 都可以获得有限的泛化性能 。Drop Connect 和 Dropout 相似的地方在于它涉及在模型中引入稀疏性,不同之处在于它引入的是权重的稀疏性而不是层的输出向量的稀疏性。

    DropConnect与Dropout不同的地方是在训练神经网络模型过程中,它不是随机的将隐层节点的输出变成0,而是将节点中的每个与其相连的输入权值以1-p的概率变成0。(一个是输出一个是输入)

    早停法

    为了获得性能良好的神经网络,网络定型过程中需要进行许多关于所用设置(超参数)的决策。超参数之一是定型周期(epoch)的数量:亦即应当完整遍历数据集多少次(一次为一个epoch)?如果epoch数量太少,网络有可能发生欠拟合(即对于定型数据的学习不够充分);如果epoch数量太多,则有可能发生过拟合(即网络对定型数据中的“噪声”而非信号拟合)。
    早停法旨在解决epoch数量需要手动设置的问题。它也可以被视为一种能够避免网络发生过拟合的正则化方法(与L1/L2权重衰减和丢弃法类似)。早停法背后的原理其实不难理解:

      • 将数据分为定型集和测试集
      • 每个epoch结束后(或每N个epoch后):
        用测试集评估网络性能
        如果网络性能表现优于此前最好的模型:保存当前这一epoch的网络副本
      • 将测试性能最优的模型作为最终网络模型

    简而言之,早停是通过比较验证集损失和测试集损失在适当时候提前停止训练神经网络来实现正则化的。

    数据扩增

    防止过拟合最有效的方法就是增强训练集,训练集合越大,出现过拟合的概率也就越小;
    1.在目标识别领域常用的方法是将图片进行旋转、缩放等(图片变换的前提是通过变换不能改变图片所属类别,例如手写数字识别,类别6和9进行旋转后容易改变类目);
    2. 语音识别中对输入数据添加随机噪声;
    3. NLP中常用思路是进行近义词替换;
    4. 噪声注入,可以对输入添加噪声,也可以对隐藏层或者输出层添加噪声。

  • 相关阅读:
    云原生体系下 Serverless 弹性探索与实践
    PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力
    manjaro kde系统格式化U盘
    从B站看到的资源网站(确实是很不错,推荐!)
    ERROR 2002 (HY000): Can't connect to local server through socket '/run/mysql 或 manjaro 安装 mariadb
    manjaro kde 我安装后使用到的命令
    思考了许久,博客在未来将会进行的改变(2021-10-03)
    linux 下配置 python源
    ModuleNotFoundError: No module named 'distutils.util'
    mysqlclient 安装失败
  • 原文地址:https://www.cnblogs.com/ytxwzqin/p/9011136.html
Copyright © 2011-2022 走看看