pytorch的一种高效酉神经网络实现
torch-eunn的Python项目详细描述
火炬
这个存储库包含一个简单的pytorch实现 酉神经网络(eunn)单元。
该实现松散地基于本文中提出的可调eunn 纸张:https://arxiv.org/abs/1612.05231。
安装
pip install torch_eunn
用法
fromtorch_eunnimportEUNN# feed forward layerfromtorch_eunnimportEURNN# recurrent unit
注意
正如“与原始实现的区别”一节中所述,eunn的hidden_size
^{em1}}$和的capacity
需要是偶数。
示例
- 00:Simple Tests
- 01:Copying Task
- 02:MNIST Task
要求
- PyTorch>;=0.4.0:
conda install pytorch -c pytorch
与原始实现的差异
eunn的这个实现与原来的有很大的不同 执行建议 https://arxiv.org/abs/1612.05231,这是 概述如下。
在最初的实现中,顶部定向耦合器的第一个输出
一个容量-2子层跳过第二层定向耦合器
(在下面的ascii图中用点表示)连接到下一个
EUNN的Capacity-2子层。相反的情况发生在底部,
跳过Capacity-2子层的第一层。这边,A
(2*n+1)
创建多维酉矩阵表示,使用n
在每个容量-1子层中的混合单元的数目。
__ __......
\/
__/\____ __
\/
__ ____/\__
\/
__/\____ __
\/
......__/\__
对于每个有N=2*n+1
输入(N
奇数)的capacity-1子层,我们有N-1
参数(每个混合单元有2个参数)。从而得到酉矩阵
跨越整个酉空间的表示,需要N
容量-1
附加到容量后面的层和N
extra阶段-N
子层使酉矩阵中的参数总数
表示为N**2
(
酉矩阵)。
在这里提出的实现中,每个capacity-2子层中的点是
连接到它们自己(周期性边界)。这意味着
对于每个带有n
定向耦合器的capacity-1子层,有N=2*n
输入和尽可能多的独立参数。这意味着我们只需要N
容量-1子层和noextra相位以跨越整个酉空间
使用N**2
参数。
然而,这意味着 酉矩阵应该总是偶数。另外,因为前传是 按容量定义-2子层(与 最初的实现)容量也必须是even。
许可证
©弗洛里斯·拉波特,2018-2019年。
在麻省理工学院的许可下提供。