“使张量操作的可读”;的编程工具,开源3年标准星4.3k,现在终于ICLR2022接收-量子比特,
- 时间:
- 浏览:0
它是GitHub标星4.3k的张量操作工具Einops,开源3年后终于碰上了顶峰会议!
同时,Einops支持Pytorch、TensorFlow、Chainer、Jax、Gluon等多个深度学习框架,以及Numpy、Cupy等张量计算框架。
ICLR2022作为Oral论文收到的消息一出,常年嫖娼的“精神股东”们就表示,Einops确实是“当之无愧”。
爱因斯坦比和合的约定更容易使用的表记法我们首先来理解一下Einops的基本原理吧。
其设计思路来自于爱因斯坦1916年提出的爱因斯坦求和约定,也被称为爱因斯坦表记法(Einstein notation)
该方法的规定是:在一组积中,当两个变量的足标相同时,对相同的两个足标求和。例如,下图中的aibi:
Numpy的Einsum是模仿爱因斯坦寻求约定的方法,可以说这个想法已经被广泛使用。
Einops正是在Einsum的基础上进行了许多改进,为张量操作过程中一些以前难以解决的问题提供了更方便的方案。
例如,如果仅通过Pytorch结合两种方法(Einops、来实现超分辨率(Super-resolution),则后者将大大降低代码冗余:
△上:原版下:结合Einops
Einops组合的代码不需要特别的指令PixelShuffle。您还可以看到,还使用了模块调用nn.ReLU和nn.Sequential。
最后得到的输出结果不包含虚假坐标,也可以在帧之间迁移。
为什么能做这个?
这取决于Einops的本质:这是一种用于变换模式的新标记方法,可以确保元素在张量中的位置和坐标变量的值的一对一映射。
△Numpy与Einops动作的对应关系
爱因斯坦与加法约定(Einsum)相比,Einops有几个附加特征:
通过减少仅存在于输入中的坐标(例如,可以使用max-reduction方法)的重复输出中的坐标(张量、值对于新坐标的索引是相同的),使式两侧的所有坐标的标记唯一(Einsum、在这些特征中输入和输出描述为张量的维和坐标的预期顺序,这使得基于Einops的代码可读性和可修改性非常高,用户也不必每次操作都存储或估计张量的形状。
同时,将输入坐标(或其组成)与输出坐标连接,从而在设计上不破坏结构。
括号所示坐标的组成和分解也是Einops的主要创新点:
根据上述特征,模式有利于更灵活地处理高维数据。
例如,注意力机构函数接受形状为[batch,seq,channel]的[张量]kqv,并且Einops可将其高度、宽度和深度合成一维。
同时,张量的报头和batch维也可以分组,从而保证了注意力报头的独立处理,从而成为三维数据的多头注意力:
类似地,通过修改输入/输出的结构,其它神经块也可以在Einops模式下完成“升级”。
论文接收不是一帆风顺的Einops作者是来自俄罗斯的AlexRogozhnikov,拥有莫斯科大学的数学和物理学博士学位,目前的主要研究领域是机器学习。
Einops正是他最热的开发,不仅在GitHub收获了4.3k星,特斯拉AI高管、FAIR实验室工程师之家:
但是,作者将论文整理成论文后发表在峰会上时,认为这篇论文“读起来像技术博客”、“缺乏创新性”、“缺乏严密性”,因此收到了3分(拒绝)的意见。
但主席最终给予了一发定音的肯定评价,并同意将其作为Oral论文接受。
拥有Einops的使用者特意贴出议长最后的评价,如下所述。
不管这篇论文被如何广泛鼓励,至少对开发者AlexRogozhnikov本人来说,可以说是一个正面的结果。
论文:https://openreview.net/forumid=oapKSVM2bcj
GitHub链接:https://GitHub.com/arogozhnikov/Einops
作者主页:http://arogozhnikov.GitHub.io/about/