社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

AI | 算法工程师必备的深度学习--正则化(上)

运筹OR帷幄 • 3 年前 • 595 次点击  
↑↑↑↑↑点击上方蓝色字关注我们!





『运筹OR帷幄』原创


作者:华校专

作者信息:

华校专,曾任阿里巴巴资深算法工程师、智易科技首席算法研究员,现任腾讯高级研究员,《Python 大战机器学习》的作者。

编者按:

算法工程师必备系列更新啦!继上次推出了算法工程师必备的数学基础后,小编继续整理了必要的机器学习知识,全部以干货的内容呈现,哪里不会学哪里,老板再也不用担心你的基础问题!

正则化

  1. 正则化常用于缓解模型过拟合。过拟合发生的原因是模型的容量过大,而正则化可以对模型施加某些限制,从而降低模型的有效容量。

  2. 目前有多种正则化策略。

  • 有些正则化策略是向模型添加额外的约束,如增加对参数的限制。这是对参数的硬约束。
  • 有些正则化策略是向目标函数增加额外项。这是对参数的软约束。
  • 正则化策略代表了某种先验知识,即:倾向于选择简单的模型。

  • 在深度学习中,大多数正则化策略都是基于对参数进行正则化。正则化以偏差的增加来换取方差的减少,而一个有效的正则化能显著降低方差,并且不会过度增加偏差。

  • 在深度学习的实际应用中,不要因为害怕过拟合而采用一个小模型,推荐采用一个大模型并使用正则化。

  • 一、参数范数正则化

    1. 一些正则化方法通过对目标函数 J 添加一个参数范数正则化项 来限制模型的容量capacity

      正则化之后的目标函数为

    •  为正则化项的系数,它衡量正则化项和标准目标函数 J 的比重。
      • 则没有正则化。

      • 越大则正则化项越重要。

      • 如果最小化 ,则会同时降低 J 和参数 的规模。

      2. 参数范数正则化可以缓解过拟合。

      如果 设置的足够大,则参数就越接近零。这意味着模型变得更简单,简单的模型不容易过拟合(但是可能欠拟合)。

      对于神经网络,这意味着很多隐单元的权重接近0,于是这些隐单元在网络中不起任何作用。此时大的神经网络会变成一个小的网络。

      在  从 零逐渐增加的过程中存在一个中间值,使得参数的大小合适,即一个合适的模型。

      3. 选择不同的 的形式会产生不同的解,常见的形式有正则化和正则化。

      1.1 L2 正则化

      1. L_2 正则化通常被称作岭回归或者Tikhonov正则化。

      • 正则化项为。系数 是为了使得导数的系数为 1。

      • 该正则化形式倾向于使得参数 更接近零。

    1. 假设参数就是权重,没有偏置参数,则:

      对应的梯度为:

      使用梯度下降法来更新权重,则权重的更新公式为:。即:

      正则化对于梯度更新的影响是:每一步执行梯度更新之前,会对权重向量乘以一个常数因子来收缩权重向量。因此L2正则化也被称作“权重衰减”。

    2. 1.1.1 整体影响

      1. ,它就是无正则化项时使得目标函数最小的权重向量。

        根据极小值的条件,有。于是在 的邻域内泰勒展开

        其中:处的海森矩阵; 处的一个邻域。则 的梯度为:

      2. 2. 令 ,它就是有正则化项时使得目标函数最小的权重向量。

        假设 , 即 的一个邻域内,则有:

        根据极小值条件:,则有: 时,

        3. 因为 是实对称矩阵,对其进行特征值分解:。其中特征值组成对角矩阵,对应的特征向量组成正交矩阵

        于是有:

        其中:
        1. 正则化对模型整体的影响:沿着的特征向量所定义的轴来缩放

        • 的第 i 个特征向量对应的 分量根据 因子缩放。

        • 沿着 特征值较大的方向受到正则化的影响较小。

        • 的方向对应的权重分量将被缩小到几乎为零。

      1.1.2 物理意义

      1. 如下所示:实线椭圆表示 的等值线,虚线圆表示正则化项 的等值线。

        点, J 取得最小值;在 点(也就是图中的 和正则化项达到平衡(使得二者之和最小)。

        沿着 方向(横向)的 J 的曲率半径较大;曲率半径越大,曲率越小,特征值越小。

      • 曲率刻画曲线的弯曲程度。弯曲越厉害,则表示曲率半径越小、曲率越大。

        直线的曲率半径为  ,曲率为0。

      • 曲率半径是曲率的倒数。对于椭圆 

        • 在左右顶点:沿着 方向(纵向)的曲率半径为

        • 在上下顶点:沿着 方向(横向)的曲率半径为

        • 海森矩阵的特征值为:

        2.在上图中:

          • J 的海森矩阵第一维 ( )的特征值很小。所以当从 点水平移动时, 不会增加太多。因为 对这个方向没有强烈的偏好。所以正则化项对于该轴具有强烈的影响:正则化项将 拉向零。

          • 的海森矩阵第二维的特征值较大。

            对于 的变化非常敏感,因此正则化项对于该轴影响较小。

          • 因为沿着水平方向,一个较大的偏移只会对 产生一个较小的变化。因此正则化项倾向于从 点水平向零点移动。

          3. L_2 正则化表明:

            • 只有显著减小目标函数 的那个方向的参数会相对保留下来。

            • 无助于减小目标函数 的方向(该方向上 特征值较小,或者说该方向上 的曲率较小,或者说该方向上 的曲线更接近于直线),因为在这个方向上移动不会显著改变梯度,因此这个不重要方向上的分量会因为正则化的引入而被衰减掉。

            1.1.3 示例

            1. 考虑线性回归的 正则化,采用平方误差作为代价函数:


              这里忽略了线性回归的 的影响,这是为了便于说明解的性质。

            2. 的解析解为:

              的解析解为:

              样本的协方差矩阵为 (这里已经将样本进行了标准化:减去了均值), N 为样本数量。因此 的对角线对应于每个输入特征的方差, 在对角线上增加了

              因此, 正则化使得:

            • 方差较小的特征对应的权重被收缩。
            • 方差远大于 的特征受影响较小。
            • 只有方差接近甚至小于 的特征受影响较大。

            1.2 L1 正则化

            1. 模型参数 的正则化形式为: 。即各个参数的绝对值之和。

            2. 正则化后的目标函数

              对应的梯度为

              其中 函数取自变量的符号:

              如果自变量大于零,则取值为 1;如果自变量小于零,则取值为 -1;如果自变量为零,则取值为零。

              使用梯度下降法来更新权重,给出权重的更新公式为:

              正则化对于梯度更新的影响是:不再是线性地缩放每个 正则化项的效果),而是减去与 同号的常数因子。

            1.2.1 整体效果

            1. ,它就是无正则化项时使得目标函数最小的权重向量。

              正则化中的推导相同,在 的邻域内泰勒展开:

              其中: 处的海森矩阵; 的邻域 内。

            2. 由于 正则化项在一般的海森矩阵情况下无法得到直接的代数表达式。因此我们进一步假设海森矩阵是对角矩阵。即:


            其中

            如果用于线性回归问题的数据已经被预处理(如使用PCA),去除了输入特征之间的相关性,则这一假设成立。

            于是:

            3. 考虑定义式,有:

            对于 来讲 ,为常量。因此 的最小值由 决定。

            考虑每一个维度 i,可以考虑最优化目标:

            得到解析解:

            4.考虑 的情况。此时有两种可能:

              • :则 。表示 正则化项将 推向 0 。

              • :则 。此时 正则化项并不会将 推向 0,而是向零的方向推动了 的距离。

              1. 考虑 的情况。此时有两种可能:

              • :则 。表示 正则化项将 推向 0 。

              • :则 。此时 正则化项并不会将 推向 0,而是向零的方向推动了 的距离。

              如果使用 正则化,则解为

              1.2.2 物理意义

              1. 如下所示:实线椭圆表示 J 的等值线,实线菱形表示正则化项 的等值线。

                点, J 取得最小值;在 点(也就是图中的 点),J 和正则化项达到平衡(使得二者之和最小)。

              可以看到 J 的等值线更容易与 正则化项的等值线在坐标轴相交从而取得整体极小值。

              2.  正则化项更容易产生稀疏(sparse)解,而 正则化并不会导致稀疏解。

                • 正则化中, 的绝对值越小,该维的特征越容易被稀疏化。

                • 正则化的这一性质已经被广泛地用作特征选择: 正则化使得部分特征子集的权重为零,表明相应的特征可以被安全地忽略。

                1.3 L1/L2正则化与最大后验估计

                1. 许多正则化策略可以被解释为最大后验估计MAP: 


                  最大化后验估计等价于最小化代价函数。

                • 正则化项:参数的先验分布为高斯分布:

                  忽略 项,因为它们与 无关。

                • L_1 正则化项:参数的先验分布为各向同性拉普拉斯分布 :

                  忽略 项,因为它们与 无关。

              1. 更复杂的正则化项可以通过先验分布为混合高斯分布得到。

              2. 二、显式约束正则化

                1. 可以通过添加一个显式约束来实现正则化: 。其中 k 为一个常数。

                2. 可以通过构建广义拉格朗日函数来求解该约束最优化问题。

                  定义广义拉格朗日函数: 。则上述约束最优化问题的解由下式给出:

                  假设 的解为 ,固定 则:

                  这和参数范数正则化是相同的,因此可以将参数范数正则化视为对参数强加的约束:

                • 如果 范数,则权重就是被约束在一个 球中。

                • 如果 范数,则权重就是被约束在一个 限制的区间中。

              3. 也可以通过重投影来求解该约束最优化问题。此时需要修改梯度下降算法:首先计算 的下降步,然后将 投影到满足 的最近点。

              4. 使用显式约束,而不是使用范数正则化有两个好处:

                • 采用范数正则化后,当  较小时容易使得非凸优化的过程陷入局部极小值。

                  • 当使用权重范数的正则化时,较小的权重可能是局部最优的。

                  • 当使用显式约束时,算法不鼓励权重接近原点,因此工作的较好。

                  • 使用显式约束对优化过程增加了一定的稳定性。
                    如:当使用了较高的学习率时,很可能进入了正反馈:较大的权重产生了较大的梯度,较大的梯度诱发权重的更大的更新。
                    如果这些更新持续增加了权重的大小,则 就会迅速增大直到溢出。显式约束可以防止这种反馈环引起的权重的无限制持续增加。

                  5.Srebro and Shraibman提供了一种正则化策略:约束神经网络的权重矩阵每列的范数,而不是限制整个权重矩阵的Frobenius范数。分别限制每一列的范数可以防止某一个隐单元有非常大的权重。

                  在实践中,列范数的限制总是通过重投影的显式约束来实现。

                  三、数据集增强

                  1. 提高模型泛化能力的一个最直接的方法是采用更多的数据来训练。但是通常在现实任务中,我们拥有的数据量有限。

                    解决该问题的一种方法是:创建一些虚拟的数据用于训练。

                  2. 数据集增强仅仅用于模型的训练,而不是用于模型的预测。即:不能对测试集、验证集执行数据集增强。

                  3. 当比较机器学习算法基准测试的结果时,必须考虑是否采用了数据集增强。

                    通常情况下,人工设计的数据集增强方案可以大大减少模型的泛化误差。当两个模型的泛化性能比较时,应该确保这两个模型使用同一套人工设计的数据集增强方案。

                  4. 注意数据集增强和预处理的区别:数据集增强会产生更多的输入数据,而数据预处理产生的输入数据数量不变。

                  3.1 线性变换

                  1. 对于某些任务来说,创建虚拟数据非常困难。如:在密度估计任务中,除非预先知道了密度函数,否则无法产生新的虚拟数据。

                    对于分类问题来说,创建虚拟数据非常简单。对于一个分类器,它将高维的输入 映射到类别 y 。这意味着这种映射规则是不随坐标系的改变而改变的。因此可以通过线性变换,将训练集中的 变换为 从而产生了新的数据

                    对图像分类问题,数据集增强特别有效。数据集增强也可以应用于语音识别任务。

                  2. 常见的图片数据集增强方法:

                  • 将训练图像沿着每个方向平移几个像素产生新的图像。

                  • 对训练图像进行旋转、翻转或者缩放。

                  • 对训练图像进行随机裁剪。

                    实际上,随机裁剪图像的操作也可以被认为是预处理步骤,而不是数据集增强。

                  • 对训练图像进行颜色抖动:调整饱和度、调整亮度、调整对比度、调整锐度。

                  • 对比度:图像画面的明暗反差程度。对比度越高,则图片亮的地方更亮,暗的地方越暗。

                  • 亮度:图像的明暗程度。亮度越高,则图像整体越亮。

                  • 饱和度:图像颜色种类的多少。饱和度越高,则图像的颜色种类越多,图像越鲜艳。

                  • 锐度:图像的边缘轮廓的锐利程度。锐度越高,则图像的边缘越清晰。

                1. 在使用线性变换执行数据集增强时需要注意:

                  • 某些线性变换会改变正确的类别。

                    如:字符识别任务中, b/d以及6/9 的图像, 不能执行水平翻转变换和旋转 180 度变换。

                  • 某些线性变换难以执行。

                    如:平面外的绕轴旋转(类似于翻页)难以通过简单的几何运算在输入图片上实现。

                  3.2 输入噪声注入

                  1. 在神经网络的输入层注入噪声也可以视作数据增强的一种形式。如:在图像识别任务中,对训练图像注入高斯噪声。

                    事实上输入噪声注入也可以用于无监督学习,如:降噪自动编码器。

                  2. 通常一个训练好的神经网络对噪声鲁棒性较差,改善其噪声鲁棒性的常用方法是:简单地将随机噪声施加到输入上,再进行训练。

                  • Poole et al.(2014)表明:当仔细调整噪声的幅度之后,该方法非常高效。

                  • 噪声被添加到每层隐单元的输入(而不仅仅是整个网络的输入)也是可行的,这被视为在多个抽象层上进行数据集增强。
                    本章后面的dropout正则化策略可以被看作是通过对隐单元的输入乘上噪声。

                  四、噪声鲁棒性

                  1. 有三种添加噪声的策略:输入噪声注入、权重噪声注入、输出噪声注入。

                  4.1 输入噪声注入

                  1. 输入噪声注入:将噪声作用于输入的数据集,这也是前文介绍的一种数据集增强方法。

                  2. 对于某些模型,在输入上注入方差极小的噪音等价于对权重施加参数范数正则化(Bishop,1995a,b)。

                    但是输入噪声注入远比简单地收缩参数强大,尤其是噪声被添加到隐单元的输入上时。

                  4.2 权重噪声注入

                  1. 权重噪声注入:将噪音作用于权重。这项技术主要用于循环神经网络。

                  2. 权重噪声注入可以解释为:将权重视作不确定的随机变量(拥有某个概率分布),向权重注入噪声是对该随机变量采样得到的一个随机值。

                  3. 在某些假设下,权重噪声注入等价于传统的参数正则化形式。

                  4. 假设有一个 l 层的标准的深度前馈神经网络,我们将噪声注入到该网络的权重。

                    假设 ,则有:

                    常数项包含了高斯分布的方差(与 无关)。

                    于是目标函数重写为:

                  5. 假设每个权重添加一个随机扰动 , 它是一个均值为0、方差为 的标准正态分布。
                    假设添加扰动之后的模型为

                    假设有 ,即:模型对于增加扰动之后的期望等于原来的模型。

                    于是:

                    根据:

                    于是有:

                  6. 处泰勒展开,有: 。则有: 

                    于是有:

                    这说明:权重噪声注入的代价函数等于非权重噪声注入的代价函数加上一个参数正则化项。

                  • 该正则化项就是 ,其中 为噪声的方差。

                    噪声方差越大,则正则化项越大。

                  • 该形式的正则化将鼓励参数进入对小扰动不敏感的区域。即:找到的点不仅是极小点,还是由平坦区域包围的极小点。

                    平坦区域意味着梯度很小,意味着对小扰动不敏感。

                2. 如果是简单的线性回归,即 ,则权重噪声注入等价的参数正则化项退化为

                  该正则化项与模型的参数无关,因此对 关于 的梯度没有贡献,因此目标函数可以重写为:

                3. 4.3 输出噪声注入

                  1. 有些数据集存在少量的 y 标签是错误的,此时通过最大似然准则来最大化 是不正确的。

                    输出噪声注入显式地对标签上的噪音进行建模:假设某个很小的常数 , 标签 y 是正确的概率为 、是错误的概率为

                  1. 基于 k 个输出的softmax单元的标签平滑正则化label smoothing regularize:将真实的标签从 {0,1} 替换为

                    原始的标签:k-1 个为 0, 一个为1 。注入噪声之后的标签:k-1 个为

                  五、早停

                  1. 当训练一个容量较大的模型时会经常发现:训练误差逐渐降低,但是验证误差先下降后上升。

                    当验证误差没有进一步改善时,算法就提前终止。这种策略被称作早停early stopping

                  2. 早停是深度学习中最常用的正则化形式,因为它简单、有效。

                  3. 当训练终止时,返回的不是最新的模型参数,而是验证误差最小的模型参数,因此需要频繁存储模型参数。

                  5.1 早停算法

                  1. 早停算法
                  • 输入:

                    • 当前验证集的误差非最小值的次数 p
                    • 验证集验证的间隔 n
                    • 初始参数
                  • 输出:

                    • 最佳参数
                    • 获得最佳参数时迭代的步数
                  • 算法步骤:

                    • 初始化:

                      • 参数变量

                      • 迭代步数变量 i=0

                      • 验证次数变量 j=0

                      • 验证集的最小误差

                      • 最佳参数

                      • 最佳迭代步数

                      • 循环,循环条件为:

                      • 学习模型 n 步(每隔 n 步验证一次)

                      • 更新 i=i+n

                      • 记录最新的验证集误差

                      • 如果 ,则:  。
                        如果 ,则: 。
                        若当前验证集误差是最小的,则 j 清零。这意味着必须连续 p 次  ,才说明算法到达终止条件。

                  2. 可以认为早停是一个非常高效的超参数选择算法:训练步数是一个超参数,该超参数在验证误差上具有 U形曲线。

                    • 早停策略通过控制训练步数来控制模型的有效容量capacity

                    • 早停策略只需要跑一轮训练就能够得到很多的超参数(即:训练步数)及其对应的验证误差。

                      3.早停策略的代价有两个:

                        • 需要在训练期间定期评估验证集。

                        • 可以通过并行的执行训练和验证来加速这一过程。
                        • 也可以选取一个较小的验证集、或者不那么频繁地评估验证集来减小评估代价。
                        • 需要保持最佳的参数的副本。

                          这种代价一般可以忽略不计。

                        4. 早停是正则化的一种非常不起眼的形式,其优点有:

                        * 它几乎不需要干涉基本的训练过程,适合任何模型。

                        * 可以单独使用,或者与其他的正则化策略相结合。

                        * 早停不仅有正则化的好处,还有降低计算成本的好处。

                        5. 以泛化误差的偏差方差分解角度来看,早停试图同时解决偏差和方差,其结果很可能导致得到的模型并不是一个最优的模型。

                        如下图中所示的验证误差曲线。因为提前停止了训练,所以使得代价函数的值可能不够小,即:偏差可能还可以继续降低。方差(即:验证误差与训练误差之间的gap ) 虽然处于上升趋势,但是它们叠加的结果可能导致验证误差呈现波动走势。

                        5.2 二次训练

                        1. 早停需要验证集,这意味着某些样本不能用于模型的训练过程,这会造成数据的浪费。

                          为了更好地利用验证集的样本,可以在早停之后进行额外的训练。在第二轮额外的训练中,所有的训练数据都被包括在内(包括验证集)。

                          有两个基本的策略可以用于第二轮训练过程 :

                        * 保留迭代步:再次初始化模型,然后使用所有数据再次训练。此时使用第一轮早停确定的最佳步数作为第二轮的迭代步数。

                        该策略重新训练模型,成本较高,但是效果较好。

                        * 保留参数:保持从第一轮训练中获得的参数,然后使用全部的数据继续训练。此时观察原始验证集的损失函数,直到它低于第一轮停止时的原始训练集的损失函数值。

                             根据早停策略,第一轮结束时原始验证集的损失函数值是较大的

                            该策略避免了重新训练模型的高成本,但是表现一般。
                        这是因为一旦将 合并到训练集,则对它们评估的结果就是训练误差(而不再是验证误差)。新的训练误差小于原来的验证误差,并不能说明模型的泛化能力得到了提升。

                        2.保留迭代步二次训练算法:

                          输入:训练集  ,  ;
                          步骤:将 分割为
                          ;随机选择参数的初始化值 作为训练集, 将 作为验证集,运行早停算法,返回最佳训练步数
                          ;再次选择参数的另一个初始化值 ,在 上再次训练 步。

                        3. 保留参数二次训练算法:

                        • 输入:
                          训练集  ,  
                        • 步骤:
                          • 分割为
                          • 随机选择参数的初始化值 作为训练集, 将 作为验证集,运行早停算法,返回算法停止时的目标函数的值
                          • 迭代:
                          • 上训练 n 步 (每隔 n 步检查一次,为了降低评估代价)

                          5.3 早停与 L2 正则化

                          1. 早停将优化过程的参数空间限制在初始参数值 的一个小的邻域内。

                          2. 假设参数 。令 ,它就是无正则化项时使得目标函数最小的权重向量。

                            正则化中的推导相同,有:

                            处的海森矩阵, 其中 的一个邻域内。

                          • 令参数向量的初始值为原点: ,并且选择 的特征值)。则经过 次参数更新之后:
                          • 根据梯度下降法,参数的迭代过程为:

                            注意:这里并没有加入任何正则化项,而是使用 J

                          • 进行特征分解: ,其中 为对角矩阵, 为特征向量的一组标准正交基。则有:

                        1. 根据 正则化项中的推导结果,有:

                          通过直接写出逆矩阵的形式可以证明等式

                          如果超参数 满足: ,则 正则化等价于早停。

                        2. 为了求得三个超参数满足的条件,求解:

                        3. 则有:

                          两边取对数,然后使用 的级数展开有(假设 ,且

                          由于 的最小点,因此海森矩阵 是半正定的,因此其特征值

                          则有: 。即: 的倒数与 正则化系数的作用类似。

                          在给定 的条件下:

                            • 越小,则正则化系数越大。这与以下事实吻合: 从原点出发开始迭代,如果 越小,则 越靠近原点。

                            • 越大,则正则化系数越小。这与以下事实吻合:此时 迭代足够多步之后会逐渐远离原点。

                            5.假设用学习率 进行了 个优化步骤(对应于 个训练迭代), 可以视作模型的有效容量 effective capacity 的度量。

                            假设梯度有界,则限制迭代的次数和学习率,会限制 能够到达的范围。 的行为就像是 正则化项的系数的倒数。

                            6.早停比 正则化更有优势:

                              • 早停能够监控验证误差,从而自动在某个较好的参数解的位置终止。

                                训练一次就相当于得到了多个超参数 的结果。

                              • 采用 正则化需要多次训练,从而选择合适的超参数 的值。

                                这种方式的计算成本太高。

                              本文福利

                              可以在 公众号后台 回复关键词:“ DS 获取大量由我平台编辑精心整理的学习资料,如果觉得有用, 请勿吝啬你的留言和赞哦!


                              —— 完 ——



                              文章须知

                              文章作者:华校专 

                              责任编辑:周岩 Logic 破茧

                              审核编辑:阿春

                              微信编辑:破茧

                              本文由『运筹OR帷幄』原创发布

                              如需转载请在公众号后台获取转载须知

                              原文链接:3_regularization (huaxiaozhuan.com)






                              Python社区是高质量的Python/Django开发社区
                              本文地址:http://www.python88.com/topic/120909
                               
                              595 次点击