Figure 1.1 神经网络中全连接层示意图
第一章 基于流形复数神经网络的混合波束成形
1.1 流形复数神经网络原理
在如1.1所示的全连接神经网络中,对于一个接 m 长度输入产生 n 度输出的
全连接层,其内部运算形式为
y = ψ(xA
T
+ b), (1.1)
其中 x C
1×m
, A C
n×m
, b C
1×n
, ψ, y C
1×n
分别网络输入、络权参数、
络偏置参数、网络激活函数、网络输出。通过堆叠多个全连接层,得到多层前馈全连接
神经网络,其对信号的处理方式表示为
y =
i=1,...,s
ψ
i
(x
i
A
T
i
+ b
i
), (1.2)
其中 s 示网层数,
表示复上程以成数在多网络的传播。积神
经网络内部具有相似的数据处理流程,对于一个具有多个卷积层的神经网络,其数据处
理方式可以表示为
y =
i=1,...,s
ψ
i
(W
i
X
i
+ b
i
), (1.3)
其中 W
i
表示卷积核权重。
1
东南大学硕士学位论文
在普通神经网络中不存在对网络参数 A, W 的约束,流形复数神经网络通过在创建
全连接层或卷积层时指定流形种类,从而使得权重参数 A, W 满足特定的流形约束,
A 使 Complex Stiefel 约束时,使 A
H
A = I W 使 Complex Circle
流形约束时,使得 |[W ]
i,j
| = 1通过这种方式可以对全连接网络或者卷积网络的参数添
加流形约束条件,并使用流形网络优化器更新网络参数,使得网络参数始终满足流形约
束条件。
接下来讲解流形复数神经网络的优化步骤。在开始优化之前需要生成一个随机数据
P ,需要注意的是由于 P 随机生成,并不保证满足特定的流形约束条件,所以
们需要额外的操作来生成优化起始点 u
0
u
0
= rand(P). (1.4)
u
j
O
T
u
j
O
grad
u
j
f
u
j
f
proj(·)
Figure 1.2 流形切空间与梯度投影操作
[1]
u
j
u
j+1
O
T
u
j
O
µ
j
δ
j
µ
j
retr(·)
Figure 1.3 切空间步进搜索和缩放
[1]
在优化的某一时刻,流 O u
j
处的切空间定义为包含流形 O u
j
处的
有切向量的空间,如图1.2所示,每个切向量都是流形 O 在点 u
j
处的一条切线形成的向
量。流形 O 在点 u
j
处的切空间记为
T
u
j
O =
v C
M
| [vu
H
j
]
m,m
= 0, m M
, (1.5)
其中 v u
j
的一线。在 u
j
的所线中,使目标 f 块的
量被称为黎曼梯度 grad
u
j
f,该梯度可以通过将 u
j
处的欧几里得梯度
u
j
f 投影到切
空间 T
u
j
O 得到
grad
u
j
f = proj(u
j
,
u
j
f). (1.6)
该点的黎曼梯度的反方向,即目标函数下降最快的方向作为搜索下一个迭代点的方
µ
j
= grad
u
j
f,搜索步长为当前神经网络的学习率 δ
j
= lr。如图1.3所示,可以获得
在切空间上的下一个搜索点
u
j+1
= u
j
+ δ
j
µ
j
. (1.7)
并通过缩放操作将切空间 T
u
j
O 上的点转移到流形 O 上,获得下一步迭代点
u
j+1
= retr(u
j+1
). (1.8)
2
第一章 基于流形复数神经网络的混合波束成形
完成一次参数更新。综合式1.61.71.8网络参数的更新准则表示为
u
j+1
= retr
u
j
δ
j
proj(u
j
,
u
j
f)
. (1.9)
u
j
的欧里得度可以通机器习框架的动求机制得,不同的形拥
有不同的随机初始化函数、投影函数和缩放函数
[2]
。我们定义 P , X, U, X
分别为随机
初始值、当前所在的点、欧几里得梯度、切空间里下一个迭代点。Complex Stiefel 流形
常用的随机初始化函数、投影函数和缩放函数分别为
rand(P ) = Q , (1.10)
proj(X, U) = U X
(X
H
U + U
H
X)
2
, (1.11)
retr(X
) = LR
H
. (1.12)
其中 Q 为对 P 进行 QR 分解得到的正交矩阵,L, R 为对 X
进行奇异值分解得到的左
奇异矩阵和右奇异矩阵,然后取 L, R k 重新赋值 L, Rk X
行数和列
的最小值。Complex Circle 流形常用的随机初始化函数、投影函数和缩放函数为
rand(P ) =
P
|P |
, (1.13)
proj(X, U) = U R(U
X) X, (1.14)
retr(X
) =
X
|X
|
. (1.15)
Complex Sphere 流形常用的随机初始化函数、投影函数和缩放函数为
rand(P ) =
P
P
F
, (1.16)
proj(X, U) = U X R
sum(X
U )
, (1.17)
retr(X
) =
X
X
F
. (1.18)
Complex Euclid 流形常用的随机初始化函数、投影函数和缩放函数为
rand(P ) =
P
2
, (1.19)
proj(X, U) = U , (1.20)
retr(X
) = X
. (1.21)
3
东南大学硕士学位论文
ۨմ
torch.nn.Linear
ManifoldLinear
torch.nn.Parameter
ManifoldParameter
ComplexSphere
ComplexStiefel
ComplexCircle
৐܈
৐܈
ۨմ
૿ҵ
૿ӟ
ManifoldConv
ManifoldAdagrad
torch.optim.Adagrad
Manifold
৐܈
৐܈
޾ޏ
߶঎
ৠৌ
ComplexEuclid
torch.nn.Conv2d
৐܈
ManifoldRMSprop
torch.optim.RMSprop
৐܈
Figure 1.4 流形复数神经网络优化框架
1.2 流形复数神经网络工程实现
整个流形复数神经网络优化框架如图1.4所示,流形复数神经网络框架基于 PyTorch
[3]
开发,针对网络的参数类、网络结构类和优化器类进行修改以适应流形约束。同时定义
流形类,规定了各类流形的随机初始化、投影和缩放操作。
首先定义了流形基类Manifold,对流形需要实现的方法进行了规定,但并不包含具
体的方法实现。接着定义了具体的流形类,它们继承基类Manifold并根据不同流形的
定义,实现自己的随机初始化方法rand()、投影方法proj()和缩放方法retr()
然后定义流形参数类ManifoldParameter它继承自 PyTorch 中的参数类torch.nn.
Parameter象,束。
接网ManifoldLinearManifoldConv
承自 PyTorch 全连络类torch.nn.Linear卷积络类torch.nn.Conv2d
同时它们内部持有一个流形参数类的实例对象,表示该网络内部的参数满足流形约束。
最后定义了三个流形网络优化器类:流形随机梯度下降优化器类ManifoldSGD流形
自适应梯度优化器ManifoldAdagrad以及流形均方根传播优化器类ManifoldRMSprop
PyTorch torch.optim.SGDtorch.optim.Adagrad
torch.optim.RMSprop
proj()和缩放方法retr(),保证参数在更新后仍旧满足流形约束条件。
流形随机梯度下降优化器为最简单优化器,其更新准则和式1.9相同。流形均方根传
播优化器借鉴 l
2
正则化的思想,每次更新参数时可以自适应的调整每个参数的学习率,
并通过指数衰减移动平均避免学习率早衰的问题
[4]
其更新规则如1.1所示,其中输入参
数为学习率 δ 和衰减率 β,衰减率一般取值 0.9
流形自适应梯度优化器和流形均方根传播优化器更新步骤相似,唯一的区别是将黎
曼梯度的指数衰减移动平均替换为累计衰减移动平均。
4
第一章 基于流形复数神经网络的混合波束成形
算法 1.1 流形均方根传播优化器参数更新准则
1: 输入:学习率 δ,衰减率 β
2:
根据
PyTorch
的自动求导机制获得当前迭代点
X
t
的欧几里得梯度
U
t
3: 根据式1.6将欧几里得梯度 U
t
投影到切空间获得黎曼梯度 G
t
4: 计算黎曼梯度 G
t
的指数衰减移动平均 M
t
= (1 β)
t
τ =1
β
tτ
G
τ
G
τ
5: 计算衰减修正后梯度
ˆ
G
t
=
1
M
t
G
t
6: 根据式1.6将衰减修正后梯度
ˆ
G
t
投影到切空间,得到衰减修正后黎曼梯度 G
t
7: 根据式1.7计算切空间中的下一迭代点 X
t+1
,并根据式1.8投影到流形上,得到下一个时刻
迭代点 X
t+1
8: 输出:下一个时刻迭代点 X
t+1
1.3 使用示例
使ManifoldLinearManifoldConv块,
建自己的流形复数神经网络。由于流形复数神经网络中的重要组件继承 PyTorch,并
封装了底层实现,使得框架的使用方式和普通神经网络框架基本一致。下面我们简单展
示使用流形复数神经网络求解正交普鲁克问题
[5]
min
C
B AC
F
s.t. C
H
C = I.
(1.22)
其中 A, B C
m×n
已知,C C
n×n
为待求解参数,且满足正交约束。构建的流形神
层,使数,
即表示 C,由于 C 满足正交约束,所以使用 Complex Stiefel 流形对全连接层添加约束。
使用 B AC
F
作为损失函数,同时使用 Manifold RMSprop 优化器优化网络,求解示
例代码如下:
1 import ManiflodComplexNeuralNetwork as mcnn
2 import torch
3
4 class OPPNet(torch .nn. Module ):
5 def __init__ ( self ,n):
6 self.C = mcnn. ManifoldLinear (n, n, manifold = mcnn.ComplexStiefel , bias=False )
7 def forward(self , A,B):
8 return torch.linalg.norm ( self.C(A)-B)
9
10 net=OPPNet (n)
11 optimizer = mcnn . ManifoldRMSprop (net.parameters (), lr=lr)
12
13 for epoch in range (epoches ):
14 optimizer . zero_grad ()
15 loss=net (A,B)
16 loss. backward ()
17 optimizer . step ()
5
东南大学硕士学位论文
18
19 C=net.C.weight.T
Listing 1.1 求解正交普鲁克问题示例代码
6
参考文献
参考文献
[1] Xu D, Yu X, Sun Y, et al. Resource allocation for secure IRS-assisted multiuser MISO systems[C]. In:
2019 IEEE Globecom Workshops (GC Wkshps). Waikoloa, USA. 2019. 1–6.
[2] Boumal N. An introduction to optimization on smooth manifolds[M].[S.l.]: United Kingdom: Cambridge
University Press, 2023: 154–173.
[3] Paszke A, Gross S, Massa F, et al. PyTorch: An Imperative Style, High-Performance Deep Learning
Library[C]. In: Advances in Neural Information Processing Systems. Vancouver Canada. 2019. 32.
[4] Tieleman T, Hinton G, et al. Lecture 6.5-rmsprop: Divide the gradient by a running average of its recent
magnitude[J]. COURSERA: Neural networks for machine learning, 2012, 4(2):26–31.
[5] Schönemann P H. A generalized solution of the orthogonal procrustes problem[J]. Psychometrika, 1966,
31(1):1–10.
参考文献 7