《Understanding and Stabilizing GANs’ Training Dynamics using Control Theory》阅读笔记
1 总结
这是一篇从控制论角度分析GAN的稳定性的文章,主要利用到控制论中非常经典的负反馈思想,将目标函数进行拉氏变换投影到频域,根据迁移函数分析系统是否稳定,对于不稳定的系统再根据负反馈的原理进行设计和改进。
2 控制论前瞻
2.1 拉氏变换简介
本节简要介绍这篇文章里用到的控制论方法的一些知识,非常之基础,没有控制论相关背景也可以理解。
函数建立的是一个输入、输出之间的关系,将输入记为 u \boldsymbol{u} u,输出记为 y \boldsymbol{y} y,假如输入是一个随时间变化的值,记为 u ( t ) \boldsymbol{u}(t) u(t),那么输出也将是随时间变化的值,同样可以记为 y ( t ) \boldsymbol{y}(t) y(t),我们可以把这种随时间变化的变量记为信号(Signal)。接着,可以给出输出 y ( t ) \boldsymbol{y}(t) y(t)与时间 t t t之间的微分方程:
上式中的 f ( ⋅ , ⋅ ) f(·,·) f(⋅,⋅)就可以视为输出关于时域的微分方程表达式,如果想要转换到频域,可以进行拉氏变换:
拉氏变换最大的一个便捷性就是可以把时域中的求导或积分运算变成频域中的乘除法,比如求导运算:
在频域上就相当于原始函数的拉普拉斯表达式乘上了一个拉普拉斯算子。
此外,对于函数:
y
(
t
)
=
h
(
u
(
t
)
)
\boldsymbol{y}(t) = h(\boldsymbol{u}(t))
y(t)=h(u(t))
其在频域中的关系为:
Y
(
s
)
=
T
(
s
)
⋅
U
(
s
)
\boldsymbol{Y}(s) = \boldsymbol{T}(s)·\boldsymbol{U}(s)
Y(s)=T(s)⋅U(s)
这里的
T
(
s
)
\boldsymbol{T}(s)
T(s)被称为迁移函数,是控制论分析中非常重要的一个东西,基本上做系统的稳定性设计都是对它进行各种操作。
2.2 系统稳定性条件
我们一直在说稳定,到底一个系统怎么样才算稳定呢?在控制论的定义里,随着 t t t不断变化, y ( t ) \boldsymbol{y}(t) y(t)最终将趋近于一个固定的值,那么这个系统就是稳定的;而如果不管时间过了多久, y ( t ) \boldsymbol{y}(t) y(t)始终在某一个区间内来回摆动,那这个系统就是震荡的,最典型的就是正余弦函数;反之,如果一个系统随着时间的增大, y ( t ) \boldsymbol{y}(t) y(t)的绝对值也越来越大,那这个系统就是发散的。
那么如何判断一个系统是不是稳定的呢?这完全取决于我们的迁移函数 T ( s ) \boldsymbol{T}(s) T(s),通常,迁移函数会被写成一个关于 s s s的分式,其极点为使分母表达式为0的点,假如:
- 所有极点的实部都是负的,那么这个系统是稳定的(理想系统);
- 至少存在一个极点的实部为0,那么这个系统是震荡的(某些情况面前能用);
- 至少有一个极点存在正实部,那么这个系统的发散的(用不了)。
2.3 负反馈
从上一节的分析,可以知道一个系统稳不稳定,取决于其迁移函数
T
(
s
)
\boldsymbol{T}(s)
T(s),因此,我们只需要设计合理的迁移函数,使其所有极点的虚部均为负值即可,而实际情况中,很多时候这种迁移函数是难以获得的,后面引入了一个负反馈的思想,使用系统的输出对输入进行矫正,最终获得一个相对更加稳定的输出:
Y
(
s
)
=
T
(
(
s
)
⋅
U
(
s
)
−
T
b
(
s
)
Y
(
s
)
)
\boldsymbol{Y}(s) = \boldsymbol{T}((s)·\boldsymbol{U}(s)-\boldsymbol{T}_b(s)\boldsymbol{Y}(s))
Y(s)=T((s)⋅U(s)−Tb(s)Y(s))
上面那个式子是一个经典的负反馈表达式,
T
b
(
s
)
\boldsymbol{T}_b(s)
Tb(s)是额外施加在输出上的一个迁移函数,通过这么一通操作,我们的输出表达式就变成了:
相当于我们通过负反馈改变了原始的迁移函数,从而提供了构造稳定迁移函数的可能。负反馈有很多优点,不过我们的重点是分析GAN的稳定性,在此略过。
3 从控制论看GAN的优化
3.1 参数信号化
作者给出了GAN的通用优化函数表达式:
其中, c c c表示输入,也就是真实数据, ϕ \phi ϕ代表 D \mathcal{D} D的参数, θ \theta θ代表 G \mathcal{G} G的参数, h 1 − h 3 h_1-h_3 h1−h3表示不同的函数,对于不同的GAN,有不同的选择和设计。上面的两个公式定义了 ϕ \phi ϕ和 θ \theta θ的表达式,这里作者直接给出了他们的微分方程表达式:
此处没有太看明白推理的逻辑,按照作者描述的理由是因为参数的更新来自于梯度下降法,因此两个微分方程等价,留个坑,我们先按照他的这个表达式继续往下走,进一步分解这两个微分方程:
关于 D \mathcal{D} D:
关于 G \mathcal{G} G:
对于Dirac GAN, D ( x ) = ϕ x D(x)=\phi x D(x)=ϕx,从而有:
根据上面的公式,只需要知道 h 1 − h 3 h_1-h_3 h1−h3的表达式,就可以得出关于GAN网络参数的拉氏变换,进而能够通过迁移函数判断系统的稳定性。
作者对几个经典的GAN网络的稳定性进行了相关分析,表中的Dirac GAN是一种GAN的改进方案。
作者发现几种模型从控制论角度都无法稳定。
3.2 GAN的稳定性策略
基于上面的分析,这篇文章希望可以使用负反馈方法实现GAN模型的稳定性训练,负反馈控制也称为闭环控制,也就是论文里反复用到的CLC。
具体来说,作者希望应用CLC提升模型稳定性时需要满足以下要求:
- 应用CLC之后 G \mathcal{G} G, D \mathcal{D} D的参数微分方程需要是稳定的;
- 引入闭环控制后,不能改变 G \mathcal{G} G的平衡点,也就是说,加入闭环控制只可以改变模型的稳定性,而不能改变原有的模型效果。
3.2.1 基于DiracGAN的稳定性策略
如果使用DiracGAN的架构,根据 G \mathcal{G} G, D \mathcal{D} D的关系,只要 D \mathcal{D} D的参数稳定了, G \mathcal{G} G就能同时满足稳定性条件,因此无需进行额外的闭环控制。对于Dirac-WGAN,直接令 T b ( s ) = λ \boldsymbol{T}_b(s)=\lambda Tb(s)=λ为一个常数,可以将鉴别器的迁移函数变成:
如此,其极点由 λ \lambda λ的值所调控,只要 λ \lambda λ大于0,那么极点就只有负实部。
3.2.2 通用GAN网络的稳定性策略
对于一般的GAN网络,将 G \mathcal{G} G, D \mathcal{D} D分别定义为 G = G ( z , t ) \mathcal{G}=\mathcal{G}(z,t) G=G(z,t), D = D ( x , t ) \mathcal{D}=\mathcal{D}(x,t) D=D(x,t),目标函数可以写为:
使用变分法求解微分方程:
这里的等价关系和前面分析DiracGAN的逻辑是一致的,比较这个公式和前面DiracGAN的公式:
两者在形式上的高度一致的,区别只有一般的GAN的微分方程中带有概率,对于 G \mathcal{G} G,同样不进行处理,对于 D \mathcal{D} D,采用同样的方法,使用放大器 λ \lambda λ作为负反馈部分的迁移函数。最后 D \mathcal{D} D的微分方程写为:
因此,对于 D \mathcal{D} D的优化函数,就是上面那个式子的积分:
所以绕了这么一大圈,最后只是给鉴别器加了一个很简单的正则化项。这里需要注意一点,就是 X \mathcal{X} X是输入进 D \mathcal{D} D的整个数据空间,同时包括了真实数据和生成数据,在具体实现时,用了一个很简单的方法来采样和计算正则化,直接看伪代码:
这里使用了类似Memory Bank的思想,分别使用两个记忆单元 B r , B f B_r,B_f Br,Bf存储真实数据和生成数据,每次迭代时更新一部分记忆单元中的数据,在计算正则化项时,再分别从 B r , B f B_r , B_f Br,Bf中各采一个Batch的数据,以提供更加稳定的更新。
4 实验
根据作者给出的结果,加了CLC的WGAN在控制论下的系统确实从震荡趋于稳定了,一定程度上说明他们的方法实现了理论期望达到的目标:
并且根据对IS和FID的测评,模型训练过程中的震荡确实更小了:
最后的生成效果还不错,IS和FID都取得了比较好的效果,但是现在应该有很多方法超过它了,可惜的是没有对Mode Collapse进行进一步分析。
IS:
FID:
生成效果:
总结一下,角度比较新颖,理论比较复杂,有些公式没有解释的很明确,可能需一定数学功底,但是具体的实验方案很easy,非常易于理解,汇报的结果也不错,可以在后续通过更多的实验验证一下效果。