L1, L2 正则化

Regularizer

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

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

原理 L2

  • : 是参数

所以对于 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 结果。

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

你可能感兴趣的:(L1, L2 正则化)