我们在训练神经网络的时候,总是希望网络能够有很强的抗干扰能力,对参数,对数据波动不敏感。因此我们需要引入约束项,规范参数的分布。

扰动敏感

很多时候我们希望得到一个稳健的模型,稳健的含义一是对参数扰动稳定性强,即当模型参数变为$f_w + \Delta x$

二是对输入的稳定性强。即当x变成$x+\Delta x$作为输入的时候,网络结果不该发生比较大的变化。

Lipschitz约束

当我们希望网络足够稳定,当$||x_1 - x_2||$ 很小时,我们希望$\left|f_{w}\left(x_{1}\right)-f_{w}\left(x_{2}\right)\right|$ 也尽可能小,尽可能谁也说不准,于是Lipschitz提出了一个具体的约束,即存在某个常数C(仅仅与参数有关),
$$
\left|f_{w}\left(x_{1}\right)-f_{w}\left(x_{2}\right)\right| \leq C(w) \cdot\left|x_{1}-x_{2}\right|
$$
上诉便是L约束,我们希望C越小越好。

进一步简化公式,可以将公式转化为如下:
$$
\left|W\left(x_{1}-x_{2}\right)\right| \leq C\left|x_{1}-x_{2}\right|
$$

矩阵范数

我们可以将上诉的参数C转换为矩阵范数问题,矩阵范数相当于向量的模长。定义矩阵的范式来表示常量C,进而实现L约束。

F范数

F范数指的是将矩阵视为一个向量,求解向量的欧式模长:
$$
|W|_{F}=\sqrt{\sum_{i, j} w_{i j}^{2}}
$$
通过柯西不等式可以得到F范数是W的一个上界,当我们不要求高的精度的情况下,选择F模是一个比较好的选择(计算量比较小)。

L2 范数

L2范数指的是参数的平方和:
$$
\lambda\left(\sum_{i, j} w_{i j}^{2}\right)
$$
L2正则项能够很好的满足L约束,从而降低模型对输入扰动的敏感性,将L2正则项加入loss中。

L2范数将参数控制在比较小的水平,使得网络能够快速收敛,L2参数不会变为0,将选择比较多的特征,同时避免网络的过拟合。

L1 范数

L1范数指的是参数的和:
$$
\sum_{i, j} ||w_{i j}||
$$
优化L1的目标将导致参数趋于0,使得参数变得稀疏化,使得模型自动选择特征,降低网络的复杂度。

正则化操作可见:https://perper.site/2019/07/24/normalization/