2月25日,华为诺亚方舟实验室将AdderNet正式开源!目前,已经可以在GitHub上访问源代码(文末附GitHub代码库链接,感兴趣的开发者可以自行尝试)。
一个月以前,一篇名为《我们真的需要在深度学习中使用乘法吗?》的论文刷爆朋友圈,这篇来自华为诺亚方舟实验室与北大合作的论文提出了一种新的方法,名为:AdderNet。
根据论文介绍:与加法运算相比,乘法运算具有更高的计算复杂度。在深度神经网络中被广泛使用的卷积计算,正是衡量输入特征和卷积滤波器之间相似度的交叉相关计算,这涉及到浮点值之间的大量乘法。而AdderNet可以将深度神经网络中,特别是卷积神经网络中的乘法,转换为更简单的加法运算,以便减少计算成本。
在AdderNet中,研究者采用了 L1 正则距离,用于计算滤波器和输入特征之间的距离,分析了这种新的相似性度量方法对神经网络优化的影响。为了获得更好的性能,研究人员还开发了一种特殊的反向传播方法来研究AdderNet的全精度梯度。然后,根据每个神经元梯度的大小,提出一种自适应学习速率策略来增强AdderNet的训练过程。
因此,在不使用卷积乘法的情况下,AdderNet 在 ResNet-50 上对 ImageNet 数据集进行训练后,能够取得 74.9% 的 top-1 精确度和 91.7% 的 top-5 精确度,如下图所示:
开源后,用户可以在自己的设备上对AdderNet进行配置,需要的基础环境为:
用户可以按照pytorch / examples准备ImageNet数据。此外,官方表示预训练的模型将很快发布。
目前,开发者可以通过运行如下代码来对ImageNet val集进行评估:
python test.py --data_dir 'path/to/imagenet_root/'
在ResNet-50上对ImageNet数据集训练,用户将达到74.9%的最高精度和91.7%的Top-5精度。开发者可尝试运行如下代码,在CIFAR-10上进行求值运算:
python test.py --dataset cifar10 --model_dir models/ResNet20-AdderNet.pth --data_dir 'path/to/cifar10_root/'
此外,在ResNet-20上对CIFAR-10数据集进行训练,用户将达到91.8%的精度。
由于加法器过滤器是由torch.cdist实现的,所以AdderNet的推理很慢,但是用户可以编写cuda以获得更高的推理速度。
虽然AdderNet简化了运算成本,但是有一些反对的声音认为:类似的工作是可以通过硬件的优化(如AI芯片)来解决的,因此加法的优势其实并不算明显。如果有读者对AdderNet有更多见解,欢迎在留言区发表您的观点。
GitHub开源链接:
https://github.com/huawei-noah/AdderNet
论文地址:
领取专属 10元无门槛券
私享最新 技术干货