DL 中常⽤的三种K-Lipschitz 技术
⽂章⽬录
在进⼊到正题前,⾸先来了解下什么是 K-Lipschitz 以及它在 DL 中能起到什么作⽤
Lipschitz continuity
利普希茨连续。满⾜如下性质的任意连续函数  称为 K-Lipschitz:
这⾥的  常⽤2-范。直观上看,Lipschitz 条件限制了函数变化的剧烈程度。在DL中,由于 Lipschitz continous 的函数的梯度上界被限制,因此函数会更平滑。因此利⽤梯度下降进⾏参数更新时,参数的变化不会太⼤/剧烈从⽽降低梯度爆炸的发⽣概率,使模型的更新更稳定。 称为 Lipschitz constant。
那么在 DL 中,有哪些⽅法可⽤于将  限制在 K-Lipschitz 空间中?这⾥介绍三种:weight clipping、gradient penality、spectral normalization,⼀般⽽⾔,第三种的效果最佳
Weight clipping
由 提出。
在利⽤ gradient descent 进⾏参数更新后,在对所有参数进⾏如下操作:
其中  是⼈为设定的阈值。注意,Weight cplipping 并⽆法保证  位于 1-Lipschitz,⽽只能保证其是 K-Lipschitz的(K具体⽆法确定)
Gradient penalty
由 提出。
理论⽀持:⼀个可微函数  是 1-Lipschitz 当且仅当它对所有的输⼊  均满⾜ ,即,
在具体实现时,即在 Objective function 中添加如下正则项:
公式中的  即为 Loss/Objective function,⽽  为 Score function。注意,优化该⽬标函数后,所解出的  并⽆法保证⼀定满⾜
,但  会偏向具有该属性
Spectral Normalization
谱归⼀化,由提出,是⽬前三种⽅法中效果最优的⽅法。
下⾯简要介绍其⾮严格的理论推导,主要来⾃,再添加上⾃⼰的⼀些理解
f ∥f (x )−1f (x )∥≤2K ∥x −1x ∥, ∀x ,x ∈212dom f
∥⋅∥K f w =⎩
⎪⎨⎪⎧c ,
−c ,w ,
if w >c if w <−c otherwise c f f x ∥∇f (x )∥≤x 1f ∈1-Lipschitz ⟺∥∇f (x )∥≤x 1,∀x ∈dom f
{L (x ,θ)+θ
min
λmax(0,∥∇f (x )−1)∥}
x L f f ∥∇f (x )∥≤x 1f
理论推导
对于复合函数,存在如下定理:
neutral network 正是由多个复合函数嵌套⽽成,最常见的嵌套⽅式如下:,其中 f 表⽰激活函数, 表⽰卷积操作(以CNN为例)。⽽  常选取 LeakyRelu,Relu,Sigmoid,Tanh,⽽它们均为 1-Lipschitz。因此 ,故要使得复合函数  为 1-Lipschitz,即需保证卷积操作  是 1-Lipschitz,就可以保证整个⽹络都是 1-Lipschitz continous 的。在图像上每个位置的卷积操作,正好就是做如下“局部区域“的变换:
其中  为 local receptive field, 为卷积核, 为对应位置的卷积输出, 将  按⾏展开成⾏向量,
将  按列展开成列向量。因此,只需保证  是 1-Lipschitz,就可以使得整个 network 是 1-Lipschitz。
对任意矩阵  ( 是  的⼀个具例),存在如下定理:
因  为实对称矩阵,故不同特征值对应的特征向量两两正交,⼜因  为半正定阵,故其所有特征值⾮负。不妨假设 的特征向量为 ,各⾃对应的特征值为 。因为  两两互相正交(不严谨,因为不⼀定有 个),不妨令  已经单位化,则它们构成  空间的⼀组单位正交基。因此 ,则续 (1):
故续 (2)
∥f ∘g ∥≤Lip ∥f ∥⋅Lip ∥g ∥Lip
f (
g (f (g (⋯))))g f ∥f ∘g ∥≤Lip ∥f ∥⋅Lip ∥g ∥=Lip ∥g ∥Lip ∥unfold (M )⋅raw unfold (x )∥=col y
x ∈R f ×f M ∈R f ×f y unfold (⋅)raw ⋅unfold (⋅)col ⋅unfold (M )raw A unfold (M )raw A ⟺⟺⟺⟺
A ∈K-Lipschitz,∀A :R →R /∀A ∈R n m m ×n
∥A ∥≤K ∥∥,∀∈R x x x n ⟨A ,A ⟩≤K ⟨,⟩x x 2x x (A A −K I )≤0x T T 2x ⟨(A A −K I ),⟩≤0
T 2x x (1)
A A T A A T A A ∈T R n ×n  for i =v i 1,2,⋯,n λ for i =i 1,2,⋯,n v i n v i R n =x x , for ∀x ∈∑i =1n
i v i R n ⟺⟺⟺
⟨(A A −K I ),⟩≤0
T 2x x ⟨(A A −K I )x ,x ⟩≤0T 2∑i =1n
i v i ∑i =1n
i v i x x ⟨(A A −K I ),⟩≤0
∑i =1n
∑j =1n
i j T 2v i v j x x (A A −K I )≤0
∑i =1n
∑j =1n i j [T 2v i ]
T
v j (2)
(A A −
K I )=(A A −K I )=A A −K [T 2v i ]
T
v j v i T T 2v j v i T T v j 2v i T v j
={0,(λ−K )⟨,⟩=λ−K ,i 2v i v i i 2
if i =j
if i =j x (A A −K I )≤n
n
(λ−
n
其中  为  的第  个特征值。
不妨令 ,则必有  成⽴,因此:
⽽要令  从 K-Lipschitz 变为 1-Lipschitz,仅需对  作如下缩放即可:。即,。
于是问题的关键就转变成如何求解  的最⼤特征值  了(不妨令 ),最经典的算法为 Power iteration
Power iteration
Power iteration 是⽤于近似计算⽅阵最⼤特征值和其对应特征向量的常⽤⽅法,其具体步骤如下:
1. 令  ,假设  是⼀个  的满秩⽅阵,其单位特征向量为 ,对应特征值为
(因  实对称,故 相互正交)。那么对任意向量  均可写成 ,有:
经过  次迭代后:
不妨假定 (不考虑特征值相等的情况,因为这在实际中很少见),因此,,故式 (5) 可进⼀
步化为:
即经过  次迭代后,我们将得到特征向量  的线性缩放,只要将  归⼀化就可得到主特征向量 ,进⽽再利⽤  解得 。
上述为 Power iteration 的理论部分,⽽伪代码如下:
x x (A A −K I )≤i =1∑n
j =1
n
weight的所有形式
i j [T
2
v i ]
T
v j
0⟺
x (λ−i =1
n
i 2
i K )≤20
A ∈K-Lipschitz,∀A :R →n R /∀A ∈m R
m ×n
x (K −
i =1∑
n
i 22λ)≥i 0
(3)
λi A A T i K =max (λ)2i i x (K −∑i =1n
i 2
2λ)≥i 0K =
(λ)⇒
x (K −
λ)≥0⟺A ∈K-Lipschitz,∀A :R →R /∀A ∈R
2
i
max
i (i =1∑
n
i 2
2i n m m ×n
)
(4)
A A A :=K A
矩阵 A 除以它的 spectral norm (∥A ∥=
)可以使其具有1-Lipschitz continuity 2A A 的最⼤特征值T A A T λ1λ≥1λ≥2⋯≥λn B =A A ∈R T n ×n B n ×n ,,⋯,∈v 1v 2v n R n ,,⋯,λ1λ2λn B ,⋯,v 1v n ∈x R n =x x ∑i =1n
i v i B x
==B x ∑i =1n
i v i x λ∑i =1n i i v i
k B =k x x λ=i =1∑
n
i i k v i λx +1k
1v 1x i =2∑
n
i (λ1λi )k
v i
(5)
λ>1λ>2⋯>λn =k →∞lim
(λ1λi )k
0B ≈k x λx 1k
1v 1
(6)
k v 1B k x v 1B =v 1λ1v 1λ1
u , v = 随机初始化, None for  k iteration :
v = A ^T u / |A ^T u |_2  # (1) u = A v / |A v |_2      # (2)sqrt_lambda_1 = u ^T A v    # (3)
其中 ,,其中  分别属于输⼊,输出空间的维度伪代码中的 (1) 等价于公式 (6) 的原因:
,该公式在迭代了  次后,与上⾯的式 (6) 仅多乘了⼀个常数系数
,这并不影响主特征向量  的⽅向,因此对  归⼀化后即可得到 。⽽在实际上,在每步迭代后,都会对  进⾏归⼀
化,因此 伪代码中的 (3) 可求解  的原因:
Tensorflow 实现
def  spectral_norm (W , is_training , iteration =1): '''
W: [f, f, in_c, out_c] '''
shape = W .get_shape ().as_list ()    # [f, f, in_c, out_c]
W = tf .reshape (W , [-1, shape [-1]]) # [N, out_c], 其中 N=f*f*in_c
# reshape ,即理论推导⾥所说的展开操作——以通道为单位将 M 展开 u = tf .get_variable (shape =[1, shape [-1]],      trainable =False ,      initializer =...) # power iteration
u_norm , v_norm = u , None  for  k in  range (iteration ):
v_norm = tf .matmul (u_norm , W , transpose_b =True )  # [1, N]  v_norm = tf .math .l2_normalize (v_norm )  u_norm = tf .matmul (v_norm , W )  # [1, out_c]  u_norm = tf .math .l1_normalize (u_norm ) lambda_sqrt = tf .matmul (v_norm , W )
lambda_sqrt = tf .matmul (u_norm , lambda_sqrt , transpose_b =True ) # spectral norm
W_sn = W / lambda_sqrt
# update estimated 1st singular vector while training  with  tf .control_dependencies ([tf .cond (is_training ,            lambda : u .assign (u_norm ),            lambda : u .assign (u ))]):
W_norm = tf .reshape (W_norm , shape ) return  W_norm
A :R →n R /A ∈m R m ×n v ∈R ,u ∈n R m n ,m =
v =∥A ∥T
u 2A T u A
/A =T ∥A ∥v
2A v
∥∥∥T u ∥∥∥2α(A A )=i T v αB i v k α=α∏i =1k
i v 1v v 1v =v 1v
λ1∵∴即⼜∴
A A =λ,且∥v ∥=1T v 1v 2A A =λ=λv T T v 1v T v 1=∥A ∥λ1v 2
=→=→1=u ∥A ∥v 2A v u T u ∥A ∥v 2A u T v
∥A ∥v 2
A u T v
=A λ1u T v

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。