谱范数正则(Spectral Norm Regularization)的理解

本文深入探讨了谱范数正则化(Spectral Norm Regularization,SNR)在深度学习中的应用,特别是在大规模GAN训练中的稳定性提升作用。SNR通过约束神经网络参数矩阵的谱范数,增强网络对输入扰动的鲁棒性,从而改善泛化性能。文章介绍了扰动指数的概念和谱范数的计算方法,以及如何将其作为正则项加入损失函数,以限制网络的整体扰动影响。此外,还讨论了使用幂迭代法近似最大奇异值的技巧,并提供了谱正则化的实现算法总结。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近来,DeepMind的一篇论文《LARGE SCALE GAN TRAINING FOR
HIGH FIDELITY NATURAL IMAGE SYNTHESIS》(arXiv:1809.11096v1)[1](通过大规模Gan训练,得到高精度的合成自然图像)引起了广泛的关注。其中,为保证其大批次(batch够大)Gan训练的稳定性,[1]引入了谱范数正则技术(Spectral Norm Regularization)。该技术从每层神经网络的参数矩阵的谱范数角度,引入正则约束,使神经网络对输入扰动具有较好的非敏感性,从而使训练过程更稳定,更容易收敛。
谱范数正则(Spectral Norm Regularization,简称为SNR)最早来自于2017年5月日本国立信息研究所Yoshida的一篇论文[2],他们后续又于2018年2月再再arXiv发了一篇SNR用于Gan的论文[3],以阐明SNR的有效性。因为当SGD(统计梯度下降)的批次(Batch size)一大的时候,其泛化性能却会降低,SNR能有效地解决这一问题。

SNR的讨论是从网络的泛化((Generalizability))开始的。对于Deep Learning而言,泛化是一个重要的性能指标,直觉上它与扰动(Perturbation)的影响有关。我们可以这样理解:局部最小点附近如果是平坦(flatness)的话,那么其泛化的性能将较好,反之,若是不平坦(sharpness)的话,稍微一点变动,将产生较大变化,则其泛化性能就不好。因此,我们可以从网络对抗扰动的性能入手来提升网络的泛化能力。

一、扰动的表示

对应多层神经网络而言,扰动(Perturbation)的来源主要有两个:1)参数的扰动;2)输入的扰动。[2]是从输入扰动的角度来进行讨论的。假设一个前馈网络的第 lll 层有如下关系:
xl=fl(Wlxl−1+bl)(1) \mathbf x^l=f^l(W^l\mathbf x^{l-1}+\mathbf b^l)\qquad(1) xl=fl(Wlxl1+bl)(1)
(1)中,xl\mathbf x^lxl 表示第 lll 层的输出,xl−1\mathbf x^{l-1}xl1 表示第 lll 层的输入,Wl,blW^l,\mathbf b^lWl,bl 分别表示该层神经网络的参数矩阵和偏置向量,fl(⋅)f^l(\cdot)fl() 表示网络的非线性激活函数,l=1,⋯ ,Ll=1,\cdots,Ll=1,,L 即整个网络有L层。于是,整个网络的参数集合可用Θ={ Wl,bl}l=1L\Theta = \{ W^l,\mathbf b^l\}^L_{l=1}Θ={ Wl,bl}l=1L 表示。
对于给定训练集:(xi,yi)i=1K(\mathbf x_i, \mathbf y_i)^K_{i=1}(xi,yi)i=1K,其中xi∈Rn0,yi∈RnL\mathbf x_i \in \mathbb R^{n_0},\mathbf y_i \in \mathbb R^{n_L}xiRn0,yiRnL,则Loss 函数可以表示为:
Loss=1K∑i=1KL(fΘ(xi),yi)(2) Loss=\frac{1}{K}\sum^K_{i=1}L(f_{\Theta}(\mathbf x_i),\mathbf y_i)\qquad(2) Loss=K1i=1KL(fΘ(xi),yi)(2)
其中,L(⋅)L(\cdot)L() 表示我们常用的优化目标函数,如:交叉熵用于分类(Classification)任务、最小平方差l2l_2l2用于回归(Regression)任务。
所谓输入扰动,就指:输入有一个很小的变化,引起的输出变化:
x→x+ξf(x)→f(x+ξ)So we define:P=∥f(x+ξ)−f(x)∥∥ξ∥(3) \mathbf x\rightarrow \mathbf x+\mathbf \xi \\ f(\mathbf x) \rightarrow f(\mathbf x +\mathbf \xi )\\ \text{So we define:}\\ P=\frac{\Vert f(\mathbf x +\mathbf \xi )-f(\mathbf x)\Vert}{\Vert \mathbf \xi \Vert} \qquad(3) xx+ξf(x)f(x+ξ)So we define:P=ξf(x+ξ)f(x)(3)
我们要考察输入扰动的影响,可通过扰动指数——PPP,定量分析。对于多层神经网络,其非线性的引入是由于非线性激活函数。对于常见的非线性函数,如:ReLU、maxout、maxpooling等,我们可以将它看作是分段线性函数,因此,对于 x\mathbf xx 的邻域来说,可看成是线性函数,如:ReLu。输入扰动发生在 x\mathbf xx 的邻域中,对于单层神经网络(未经激活函数)有以下关系:
∥f(x+ξ)−f(x)∥∥ξ∥=∥WΘ,x(x+ξ)+bΘ,x−WΘ,xx−bΘ,x∥∥ξ∥=∥WΘ,xξ∥∥ξ∥≤σ(WΘ,x)(4) \frac{\Vert f(\mathbf x +\mathbf \xi )-f(\mathbf x)\Vert}{\Vert \mathbf \xi \Vert} = \frac{\Vert W_{\Theta,x}(\mathbf x +\mathbf \xi )+\mathbf b_{\Theta,x}-W_{\Theta,x}\mathbf x -\mathbf b_{\Theta,x}\Vert}{\Vert \mathbf \xi \Vert}\\ =\frac{\Vert W_{\Theta,x} \xi \Vert}{\Vert \mathbf \xi \Vert} \le \sigma(W_{\Theta,x}) \qquad(4) ξ

### 拉格朗日乘子法中的 L1 范数优化 #### 什么是拉格朗日乘子法? 在约束优化问题中,拉格朗日乘子法是一种寻找函数局部极值的有效方法。当目标是在满足某些等式或不等式的条件下最小化(或最大化)给定的目标函数时,这种方法尤为有用。 对于带有 L1 范数正则化的优化问题,其形式通常为: \[ \min_x f(x) + \lambda \|x\|_1 \] 其中 \(f(x)\) 是损失函数,而 \(\lambda\) 控制着正则项的影响程度[^4]。 #### 如何引入拉格朗日乘子? 为了处理上述带 L1 正则化的优化问题,可以通过定义拉格朗日函数来转换原问题: \[ L(x, \alpha) = f(x) + \sum_i{\alpha_i (g_i(x))} \] 这里假设 \(g_i(x)=0\) 表达的是原始问题里的某个特定类型的约束条件;但在实际应用到 L1 范数的情况下,则不需要显式写出这些约束条件,因为它们已经被编码进了绝对值的形式之中。因此,针对 L1 的情况,可以直接写作: \[ L(x,\lambda) = f(x)+\lambda|x| \] 这里的表达实际上简化了很多细节,真实情况下会涉及到更复杂的推导过程以及如何有效地解决这个问题的具体技术。 #### 迭代阈值算法的应用 考虑到 l1 范数的特点及其诱导的稀疏性,一种常用的技术称为迭代软阈值算法被广泛应用于此类问题求解过程中。该算法通过不断更新变量估计并施加适当大小的收缩操作以逼近全局最优解。这种策略特别适合高维数据集上的大规模计算任务,并且已被证明能够有效提升许多领域内模型的表现效果[^1]。 ```python def soft_thresholding(z, threshold): """Soft-thresholding operator.""" return np.sign(z) * np.maximum(np.abs(z)-threshold, 0) def ista(y, A, lambda_, max_iter=1000, tol=1e-8): """ Iterative Soft Threshold Algorithm. Parameters: y : array-like of shape (n_samples,) Observation vector. A : ndarray of shape (n_features, n_samples) Design matrix. lambda_: float Regularization parameter. max_iter: int Maximum number of iterations. tol: float Tolerance for stopping criterion. Returns: x_hat : array-like of shape (n_features,) Estimated coefficient vector. """ import numpy as np # Initialize the solution with zeros or any other initial guess x_k = np.zeros(A.shape[0]) t_k = 1 / np.linalg.norm(A.T @ A, ord=2)**2 # Step size based on spectral norm for _ in range(max_iter): z = x_k + t_k * A.T@(y-A@x_k) x_next = soft_thresholding(z, t_k*lambda_) if np.linalg.norm(x_next-x_k)/max(1,np.linalg.norm(x_k))<tol: break x_k = x_next return x_k ``` 此代码实现了 ISTA(Iterative Shrinkage/Thresholding Algorithm),这是一种简单却非常有效的求解含 L1 正则项线性回归等问题的方法之一[^3]。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值