
东南大学硕士学位论文
ۨմ
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,持有一个流形实现类的实例对象,表示参数类被该流形约束。接下来定
义了流形全连接网络类ManifoldLinear和流形卷积网络类ManifoldConv,它们分别继
承自 PyTorch 中的全连接网络类torch.nn.Linear和二维卷积网络类torch.nn.Conv2d,
同时它们内部持有一个流形参数类的实例对象,表示该网络内部的参数满足流形约束。
最后定义了三个流形网络优化器类:流形随机梯度下降优化器类ManifoldSGD,流形
自适应梯度优化器类ManifoldAdagrad以及流形均方根传播优化器类ManifoldRMSprop,
它 们 分 别 继 承 自 PyTorch 中 的 优 化 器torch.optim.SGD、torch.optim.Adagrad以
及torch.optim.RMSprop。 在 流 形 网 络 优 化 器 中 手 动 调 用 流 形 实 例 对 象 的 投 影 方
法proj()和缩放方法retr(),保证参数在更新后仍旧满足流形约束条件。
流形随机梯度下降优化器为最简单优化器,其更新准则和式1.9相同。流形均方根传
播优化器借鉴 l
2
正则化的思想,每次更新参数时可以自适应的调整每个参数的学习率,
并通过指数衰减移动平均避免学习率早衰的问题
[4]
。其更新规则如1.1所示,其中输入参
数为学习率 δ 和衰减率 β,衰减率一般取值 0.9。
流形自适应梯度优化器和流形均方根传播优化器更新步骤相似,唯一的区别是将黎
曼梯度的指数衰减移动平均替换为累计衰减移动平均。
4