L1, L2 正则化

Regularizer

原理解释,请参考 回归系列之L1和L2正则化

这里主要介绍,在pytorch中如何进行 正则化计算的。

原理 L2

\tilde{J}(\theta) = J(\theta) + \lambda \sum_{i=1}^{n}{w^2}

  • w: 是参数

所以对于 regularizer 来说,主要是提取参数,然后计算.

搜寻参数

有些时候,我们并非想让所有的参数进行 Regularize, 那么,对特定参数的搜寻就是有必要的。在 pytorch中参数名字,就是 参数变量的名字。而在 Allen nlp中,regularize 的配置 example 如下:

"regularizer": [ [ ".*", { "type": "l2", "alpha": 0.00001 } ] ]

这个含义是说:

  • regularizer 可以是多个
  • 每一个 regularizer,包含两部分,分别是: 参数名字的正则表达式(这里是 ".*"),以及 regularizer 配置 (这里是 l2)。

pytorch的搜寻代码如下:

    def __call__(self, module: torch.nn.Module) -> torch.Tensor:
        """
        Parameters
        ----------
        module : torch.nn.Module, required
            The module to regularize.
        """
        accumulator = 0.0
        # For each parameter find the first matching regex.
        for name, parameter in module.named_parameters():
        
            # 便利所有的 regularizer
            for regex, regularizer in self._regularizers:
            
                if re.search(regex, name): # 正则匹配 参数名字
                    # 计算正则化结果regularizer 就是计算函数, 比如L2
                    penalty = regularizer(parameter) 
                    accumulator = accumulator + penalty
                    break

        return accumulator

allen nlp 处理方式

allen nlp在处理 L2 的时候,并非是直接在loss中加上的,而是 如果配置了 RegularizerApplicator 会自动在训练的时候,将 model.forward() 返回的 loss 自动加上 RegularizerApplicator 运算的 loss 结果。

而在预测的时候,这个动作是不生效的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 正则化是一种回归的形式,它将系数估计(coefficient estimate)朝零的方向进行约束、调整或缩小。也...
    suwi阅读 57,081评论 0 20
  • 文章内容来源:CSDN 需要正则化的原因: 监督机器学习问题无非就是“minimize your error wh...
    Even_Wang阅读 1,489评论 0 1
  • 本期作业主要涉及深度学习中的几个技巧:L1, L2正则化以及dropout。 1. L1, L2正则化 1.1 正...
    小新_XX阅读 3,734评论 0 0
  • 1.正则化 Regularization 机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有...
    鲸鱼酱375阅读 497评论 0 1
  • 1、分析事情避开自己的感受,客观理智全面分析,首先找到问题所在,再做问题分析。 2、一切外向是自己内心的映射,不要...
    肉肉爱肉肉阅读 248评论 0 0