去掉乘法运算的加法移位神经网络架构

[CVPR 2020] AdderNet: Do We Really Need Multiplications in Deep Learning?

代码:https://github.com/huawei-noah/AdderNet/tree/master

核心贡献

  • 用filter与input feature之间的L1-范数距离作为“卷积层”的输出
  • 为了提升模型性能,提出全精度梯度的反向传播方法
  • 根据不同层的梯度级数,提出自适应学习率策略

研究动机

  • 加法远小于乘法的计算开销,L1-距离(加法)对硬件非常友好
  • BNN效率高,但是性能难以保证,同时训练不稳定,收敛慢
  • 几乎没有工作尝试用其他更高效的仅包含加法的相似性度量函数来取代卷积

传统卷积
在这里插入图片描述

其中, S S S是相似度(距离)衡量指标,如果定义为内积,则是传统卷积算法。

AdderNet
用L1-距离作为距离衡量指标:
在这里插入图片描述

从而,计算中不存在任何乘法计算。Adder层的输出都是负的,所以网络中引入batch normalization(BN)层和激活函数层。注意BN层虽然有乘法,但是其开销相比于卷积可以忽略不计。

为什么可以将卷积替换为加法?作者的解释是第一个公式类似于图像匹配领域,在这个领域中 S S S可以被替换为不同的函数,因此在卷积神经网络中把内积换成L1-距离也是很自然的想法。

优化方法
传统卷积的梯度:
在这里插入图片描述

signSGD梯度:
在这里插入图片描述

其中,sgn是符号函数。但是,signSGD几乎没有采取最陡的下降方向,随着维度的增长,下降方向只会变得更糟,所以不适用于大参数量的模型优化。

于是本文提出通过利用全精度梯度,精确地更新filter:
在这里插入图片描述

在形式上就是去掉了signSGD的sgn函数。

为了避免梯度爆炸的问题,提出将梯度裁剪到[-1, 1]范围内:
在这里插入图片描述
在这里插入图片描述

自适应学习率
传统CNN的输出方差:
在这里插入图片描述

AdderNet的输出方差:
在这里插入图片描述

CNN中filter的方差非常小,所以Y的方差很小;而AdderNet中Y的方差则非常大。

计算损失函数对x的梯度:
在这里插入图片描述

这个梯度的级数应该很小,本文对不同层weight梯度的L2-norm值进行了统计:
在这里插入图片描述

发现AdderNet的梯度确实相比于CNN非常小,这会严重减慢filter更新的过程。

一种最直接的思路就是采用更大的学习率,本文发现不同层的梯度值差异很大,所以为了考虑不同层的filter情况,提出了不同层的自适应学习率。

在这里插入图片描述

其中, γ \gamma γ是全局学习率, ∆ L ( F l ) ∆L(F_l) L(Fl)是第 l l l层filter梯度, α l \alpha_l αl是对应层的本地学习率。

在这里插入图片描述

k k k F l F_l Fl中元素的数量, η \eta η是超参数。于是,不同adder层中的filter可以用几乎相同的step进行更新。

训练算法流程
感觉没有什么特别需要注意的地方。
在这里插入图片描述

主要实验结果
在这里插入图片描述

在这里插入图片描述

可以看到,AdderNet在三个CNN模型上都掉点很少,并且省去了所以乘法,也没有BNN中的XNOR操作,只是有了更多的加法,效率应该显著提高。

核心代码
Adder层:

X_col = torch.nn.functional.unfold(X.view(1, -1, h_x, w_x), h_filter, dilation=1, padding=padding, stride=stride).view(n_x, -1, h_out*w_out)
X_col = X_col.permute(1,2,0).contiguous().view(X_col.size(1),-1)
W_col = W.view(n_filters, -1)output = -(W_col.unsqueeze(2)-X_col.unsqueeze(0)).abs().sum(1)

反向传播优化:

grad_W_col = ((X_col.unsqueeze(0)-W_col.unsqueeze(2))*grad_output.unsqueeze(1)).sum(2)
grad_W_col = grad_W_col/grad_W_col.norm(p=2).clamp(min=1e-12)*math.sqrt(W_col.size(1)*W_col.size(0))/5
grad_X_col = (-(X_col.unsqueeze(0)-W_col.unsqueeze(2)).clamp(-1,1)*grad_output.unsqueeze(1)).sum(0)

[NeurIPS 2020] ShiftAddNet: A Hardware-Inspired Deep Network

代码:https://github.com/GATECH-EIC/ShiftAddNet

主要贡献

  • 受到硬件设计的启发,提出bit-shift和add操作,ShiftAddNet具有完全表达能力和超高效率
  • 设计训练推理算法,利用这两个操作的不同的粒度级别,研究ShiftAddNet在训练效率和精度之间的权衡,例如,冻结所有的位移层

研究动机

  • Shift和add比乘法更高效
  • Add层学习的小粒度特征,shift层被认为可以提取大粒度特征提取

ShiftAddNet结构设计
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

反向传播优化
Add层的梯度计算
在这里插入图片描述

Shift层的梯度计算
在这里插入图片描述

冻结shift层
冻结ShiftAddNet中的shift层意味着 s , p s, p s,p在初始化后一样,然后进一步剪枝冻结的shift层以保留必要的大粒度anchor weight。

[NeurIPS 2023] ShiftAddViT: Mixture of Multiplication Primitives Towards Efficient Vision Transformers

代码:https://github.com/GATECH-EIC/ShiftAddViT

核心贡献

  • 用混合互补的乘法原语(shift和add)来重参数化预训练ViT(无需从头训练),得到“乘法降低”网络ShiftAddViT。Attention中所有乘法都被add kernel重参数化,剩下的线性层和MLP被shift kernel重参数化
  • 提出混合专家框架(MoE)维持重参数化后的ViT,其中每个专家都代表一个乘法或它的原语,比如移位。根据给定输入token的重要性,会激活合适的专家,例如,对重要token用乘法,并对不那么重要的token用移位
  • 在MoE中引入延迟感知和负载均衡的损失函数,动态地分配输入token给每个专家,这确保了分配的token数量与专家的处理速度相一致,显著减少了同步时间

研究动机

  • 乘法可以被替换为shift和add
  • 如果重参数化ViT?ShiftAddNet是级联结构,需要双倍的层数/参数Shift和add层的CUDA内核比PyTorch在CUDA上的训练和推理慢得多
  • 如何保持重参数化后ViT的性能?对于ViT,当图像被分割成不重叠token时,我们可以利用输入token之间固有的自适应敏感性。原则上包含目标对象的基本token需要使用更强大的乘法来处理(这个idea和token merging很类似)

总体框架设计

  • 对于attention,将4个linear层和2个矩阵乘转换为shift和add层
  • 对于MLP,直接替换为shift层会大幅降低准确率,因此设计了MoE框架合并乘法原语的混合,如乘法和移位
  • 注意:linear->shift, MatMul->add

在这里插入图片描述

Attention重参数化
考虑二值量化,于是两个矩阵之间的乘累加(MAC)运算将高效的加法运算所取代。
( Q K ) V (QK)V (QK)V改为 Q ( K V ) Q(KV) Q(KV)以实现线性复杂度, Q , K Q, K Q,K进行二值量化,而更敏感的 V V V保持高精度,并插入轻量级的DWConv增强模型局部性。

在这里插入图片描述

可以看到,实际上ShiftAddViT就是把浮点数乘法简化为了2的幂次的移位运算和二值的加法运算。
在这里插入图片描述

其中, s , P s, P s,P都是可以训练的。

敏感性分析
在attention层应用线性注意力、add或shift对ViT准确性影响不大,但是在MLP层应用shift影响很明显!同时,使MLP更高效,对能源效率有很大贡献,因此需要考虑新的MLP重参数化方法。

在这里插入图片描述

MLP重参数化
MLP同样主导ViT的延迟,所以用shift层替换MLP的linear层,但是性能下降明显,所以提出MoE来提升其性能。

MoE框架

  • 假设: 假设重要但敏感的输入token,需要更强大的网络,否则会显著精度下降

  • 乘法原语的混合: 考虑两种专家(乘法和shift)。根据router中gate值 p i = G ( x ) p_i=G(x) pi=G(x),每个输入token表示 x x x将被传递给一位专家,输出定义如下:
    在这里插入图片描述
    在这里插入图片描述
    其中, n , E i n, E_i n,Ei表示专家数和第 i i i个专家。

  • 延迟感知和负载均衡的损失函数: MoE框架的关键是设计一个router函数,以平衡所有专家有更高的准确性和更低的延迟。乘法高性能但慢,shift快但低性能,如何协调每个专家的工作负荷,以减少同步时间?
    在这里插入图片描述
    其中,SCV表示给定分布对专家的平方变异系数(本文没介绍)。通过设计的损失函数,可以满足(1)所有专家都收到gate值的预期加权和;(2)为所有专家分配预期的输入token数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/221570.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS自适应分辨率 amfe-flexible 和 postcss-pxtorem:大屏高宽自适应问题

前言 继上篇《CSS自适应分辨率 amfe-flexible 和 postcss-pxtorem》。 发现一个有趣的问题,文件 rem.js 中按照宽度设置自适应,适用于大多数页面,但当遇到大屏就不那么合适了。 问题 使用宽度,注意代码第2 和 4 行:…

补题与周总结:leetcode第 376 场周赛

文章目录 复盘与一周总结2967. 使数组成为等数数组的最小代价(中位数贪心 回文数判断)2968. 执行操作使频率分数最大(中位数贪心 前缀和 滑窗) 复盘与一周总结 wa穿了第3题,赛时其实想到了思路:中位数贪心…

C#上位机与欧姆龙PLC的通信03----创建项目工程

1、创建仿真PLC 这是一款CP1H-X40DR-A的PLC,呆会后面创建工程的时候需要与这个类型的PLC类型一致,否则程序下载不到PLC上。 2、创建虚拟串口 首先安装,这个用来创建虚拟串口来模拟真实的串口,也就是上位机上有那种COM口&#xf…

【SplaTAM】基于RGB-D类型SplaTAM的定位与重建

SplaTAM ubuntu配置与运行记录 1. 资料收集2. 环境配置与运行注意问题3. 在线运行 近期各种定会涌现出一种新的基于高斯的方法,备受关注,这里我们也来学习下sota效果的slam用于定位和重建。 1. 资料收集 coda link3D Gaussians 2.1 Dynamic 3D Gaussian…

百度侯震宇:AI原生与大模型将从三个层面重构云计算

12月20日,2023百度云智大会智算大会在北京举办,大会以「大模型重构云计算,Cloud for AI」为主题,深度聚焦大模型引发的云计算变革。 百度智能云表示,为满足大模型落地需求,正在基于「云智一体」战略重构…

linux 驱动——私有数据

文章目录 linux 驱动中的私有数据container_of驱动程序数据结构定义 应用程序模块使用 linux 驱动中的私有数据 前面的程序中,都只申请了一个从设备号,这里使用 alloc_chrdev_region 分配两个设备号,这两个设备共用 ops 方法。 所以需要在 …

企业网络常用技术-快速生成树RSTP原理与配置

STP协议虽然能够解决环路问题,但是收敛速度慢,影响了用户通信质量。如果STP网络的拓扑结构频繁变化,网络也会频繁失去连通性,从而导致用户通信频繁中断。IEEE于2001年发布的802.1w标准定义了快速生成树协议RSTP(Rapid …

【C++高阶(八)】单例模式特殊类的设计

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 单例模式 1. 前言2. 设计一个不能被拷贝/继承的…

3d游戏公司选择云电脑进行云办公有哪些优势

随着游戏行业的不断发展,很多的游戏制作公司也遇到了很多的难题,比如硬件更换成本高、团队协同难以及效率低下等问题,那么如何解决游戏行业面临的这些行业痛点,以及游戏制作公司选择云电脑进行云办公有哪些优势?一起来…

麒麟V10 ARM 离线生成RabbitMQ docker镜像并上传Harbor私有仓库

第一步在外网主机执行: docker pull arm64v8/rabbitmq:3.8.9-management 将下载的镜像打包给离线主机集群使用 在指定目录下执行打包命令: 执行: docker save -o rabbitmq_arm3.8.9.tar arm64v8/rabbitmq:3.8.9-management 如果懒得打包…

A01、关于jvm执行子系统

1、Class 类文件结构 1.1、Java跨平台的基础 各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode)是构成平台无关性的基石,也是语言无关性的基础。Java虚拟机不和包括Java在内的任何语言绑定,它只与 “…

OpenCV消除高亮illuminationChange函数的使用

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为1129字,预计阅读4分钟 导语 上一篇《OpenCV极坐标变换函数warpPolar的使用》中介绍了极坐标变换的使用,文中提到过因为手机拍的照片,部分地方反光厉害。OpenCV本身也有一…

FFmepeg——视频处理工具安装以及简单命令学习。

FFmpeg 是一个免费、开源且高度可定制的多媒体处理工具,它是一个强大的跨平台框架,用于处理音频、视频、多媒体流和图像。FFmpeg 的主要功能包括解码、编码、转码、流处理、多路复用、分离、合并、过滤等,支持多种音视频格式,包括…

外卖系统海外版:技术智能引领全球美食新潮流

随着全球数字化浪潮的推动,外卖系统海外版不仅是食客们品味美食的便捷通道,更是技术智能在美食领域的引领者。本文将深入剖析其背后的技术实现,揭开代码带来的美食革新。 多语言支持:构建全球美食沟通桥梁 def multilingual_su…

排序算法——快排

快速排序算法最早是由图灵奖获得者Tony Hoare设计出来的,他在形式化方法理论以 及ALGOL.60编程语言的发明中都有卓越的贡献,是20世纪最伟大的计算机科学家之—。 而这快速排序算法只是他众多贡献中的—个小发明而已。 快速排序(Quick Sort)的基本算法思…

最新国内可用使用GPT4.0,GPT语音对话,Midjourney绘画,DALL-E3文生图

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画,相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚至也可以和用户进行创作交流。 然而,GP…

2023/12/20 work

1. 使用select完成TCP客户端程序 2. 使用poll完成TCP并发服务器 3. 思维导图

智能优化算法应用:基于水基湍流算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于水基湍流算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于水基湍流算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.水基湍流算法4.实验参数设定5.算法结果6.…

MongoDB的原子操作findAndReplace、findOneAndDelete和deleteMany

本文主要介绍MongoDB的原子操作findAndReplace、findOneAndDelete和deleteMany。 目录 MongoDB的原子操作一、findAndReplace二、findOneAndDelete三、deleteMany MongoDB的原子操作 MongoDB的原子操作指的是在单个操作中对数据库的数据进行读取和修改,并确保操作是…

OpenHarmony应用开发环境搭建指南

OpenHarmony的应用开发主要是基于Deveco Studio(目前只支持Windows及Mac平台)搭配相应的SDK进行,现对开发环境的搭建进行说明。 1:Deveco下载安装 下载对应平台的安装包即可。接下来以Windows平台为例,进行开发环境的搭建。 下载…