自然语言处理

L1, L2 正则化

2020-02-05  本文已影响0人  潘旭

Regularizer

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

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

原理 L2

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

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

搜寻参数

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

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

这个含义是说:

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 结果。

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

上一篇下一篇

猜你喜欢

热点阅读