Complex valued Neural Network
几个复数概念:
- 共轭:两者互为共轭,将其中一个视为复变量,另一个就是共轭。
- 复变函数:自变量为复数的函数。
- 实值复变函数:结果为实数的复变函数,,或。
- 复值复变函数:结果为复数的复变函数,,或。
- Wirtinger Calculus/Derivatives:一种适用于实值/复值复变函数的微分/求导法则。鉴于该法则在实数和复数形式的微积分间切换频繁,又称-calculus。
- 复可微/复可导:Complex Differentiable/Complex Derivable,-differentiable/-derivable,是基于定义的。
- 实可微/实可导:Real Differentiable/Real Derivable,-differentiable/-derivable,是基于或定义的,将复数的实部和虚部分开对待。复变函数通常是实可微的,但未必复可微。
- 复梯度:Complex Gradient,复可导得到的。
- 实梯度:Real Gradient,实可导得到的。
- 全纯函数:Holomorphic,在定义域上复可导的复变函数。全纯函数是可解析的,反之亦然。全纯函数同复分析中的解析函数。
- CVNN:Loss为实值复变函数的神经网络,非全纯。
几个概念的价值和定位:
- 全纯函数可像实变函数一样求导,链式法则也同实数链式法则一样。Wirtinger Calculus和CVNN链式法则是对全纯或非全纯复变函数统一的理论,比全纯函数的求导和链式法则要复杂,但用于全纯函数时结果一致。
- Wirtinger Calculus是将复数的实部和虚部分开处理的,适用于实值复变函数及复值复变函数,是一种复数求导法则。
- CVNN链式法则是将复数看做一个整体处理的,求导过程可能依赖前者,是一种计算CVNN(实值Loss)梯度的反向传播法则。
- 复数导数和CVNN梯度不同,后者为对共轭的导数。
- CVNN实际应用中,要同时关注求导和链式法则两方面。全纯函数直接求导,对共轭的导数为0,非全纯函数使用Wirtinger导数。
复数导数
复变函数,其中为实数,为实变函数,取自的实部和虚部。之于如之于。复数导数的极限定义为:
柯西-黎曼方程
柯西-黎曼方程(Cauchy–Riemann equations, CR)核心思想导数极限定义中沿实轴或虚轴逼近(实部或虚部)所得导数相等,即复可微。
假设在点处可微/可导(不必连续可微/可导),偏导数存在(这是后续所有结论的前提条件)。当且仅当偏导数满足下列CR方程时(充要条件),(两者等价)复可微。
实数形式:
复数形式:
结合复数形式和Wirtinger Calculus 可得下列形式,即独立(无关)于变量(的共轭):
全纯函数
复变函数在定义域上(复数域的一个连续开放子域,开集)处处可微(满足CR等式),则全纯。
- 全纯:Holomorphic,即复可导。
- 非全纯:Nonholomorphic,非复可导。
若复变函数和相关,则一定非全纯。如实值复变函数(非常函数),,因此,而,不满足CR不等式。
几个等价的陈述:
- 存在。
- 全纯(即可分析)。
- 满足CR方程
- 的所有导数存在,且有收敛的幂级数(Power Series)。
Wirtinger Calculus
对任意(不必全纯)必然可以转换为(注意此处两个函数不同,但是等价)。转换方法:
若将中的一个视为常量,则变为形式上的全纯函数,因而存在偏导数。“形式上”是因为中一个为常量时,另一个不可能为变量。“全纯”是因为中一个为常量时,“形式上”变成一个复值复变函数,所以“全纯”。另一种理解思路是“-differentiable”,相当于从坐标系切换到坐标系。如:
对分别利用链式法则求偏导,得到:
由上式可得到Wirtinger Calculus/Derivatives:
也可通过链式法则...得出Wirtinger Derivatives。注意几个导数的存在情况(存在即可导):
- 未必存在,仅全纯时存在。
- 存在,
- 存在。
- 存在。
- 存在,的类推。
- 存在,因为存在。
由Wirtinger Derivatives可得下述关系,说明是不相关的变量,对其一求导时,另一个可看做常量。
符合CVNN所需梯度形式,忽略系数,将其规约到学习率中,可用于复数权重参数更新。
当为全纯函数时,根据CR方程,Wirtinger derivatives变为(和上面复导数定义一致):
复导数对共轭运算的特性:
- 全纯时导数:
- Wirtinger导数:
链式法则
对于全纯函数,链式法则同实数的链式法则。对于损失函数为实值的CVNN,因为不存在,故需利用Wirtinger derivatives(形式上存在)进行链式法则。
给定CVNN,实值损失函数为,为前向输出,为前向输入,为反向输入grad_output,求反向输出(梯度),链式法则如下:
CVNN中目标函数/Loss值是实数,为每层的“梯度”,用于更新权重。
这一约定和TensorFlow的复数微分相同,和JAX不同(梯度为)。
根据CR方程,当全纯时,。
为该法则的特殊情况,依然遵循该法则。
对于:
- 对于:
举个例子
全纯函数,:
- 直接求导:
- 通过Wirtinger求导:
- 通过CR方程求导:
全纯函数,:
- 直接求导:
- 通过Wirtinger求导:
- 通过CR方程求导:
全纯函数,:
- 直接求导:
- 通过Wirtinger求导:
- 通过CR方程求导:
参考资料
- Autograd mechanics — PyTorch 1.10.0 documentation
- The Complex Gradient Operator and the CR-Calculus
- Appendix A: Wirtinger Calculus - Precoding and Signal Shaping for Digital Transmission
- Theory of Complex Functions