隐语课程学习笔记12 - 基于隐语的VisionTransformer框架

主讲老师:曾文轩 

学习链接:第12讲:基于隐语的Vision Transformer框架

论文:【ICCV2023】MPCViT: Searching for Accurate and Efficient MPC-Friendly Vision Transformer with Heterogeneous Attention

       隐语课程第12课,是一次论文及使用案例分享课,基于隐语实现Vision Transformer框架MPCViT。首先介绍了ViT在MPC环境下进行隐私推理的总体框架、研究动机以及算法流程。MPCViT借助SecretFlow-SPU搭建ViT框架,并测试不同模型架构的推理效率。介绍了SecretFlow-SPU的特点和功能,并展开讲解了基于SecretFlow和Jax的ViT框架搭建流程。最后,呈现了该工作的主要实验结果,效果均优于基线模型。

1. MPCViT:安全且高效的MPC友好型 Vision Transformer架构

  • 客户端与服务器:

    • 客户端: 提供输入数据。
    • 服务器: 执行ViT模型计算。
  • 数据处理流程:

    • 输入嵌入(Input Embedding): 将输入图像分割成小块(Patch),并对其进行线性投影。
    • 位置编码(Position Encoding): 为每个嵌入块添加位置信息。
    • 层归一化(LayerNorm): 对嵌入数据进行归一化处理。
  • 多头注意力机制(Multi-Head Attention):

    • 线性变换(Linear): 将输入数据进行线性变换。
    • 矩阵乘法(MatMul): 执行矩阵乘法操作。
    • Softmax: 应用Softmax函数来计算注意力权重。
    • MPC瓶颈(MPC Bottleneck): softmax是处理注意力计算中的瓶颈问题。
  • 倒置瓶颈(Inverted Bottleneck):

    • 线性层(Linear): 执行线性变换。
    • GELU激活函数: 应用GELU激活函数来提高模型的非线性能力也是MPC瓶颈之一。
    • 高维处理(High Dimension): 处理高维度数据。
  • 多层感知机(MLP):

    • 层归一化(LayerNorm): 对数据进行归一化处理。
    • 线性层和GELU激活函数: 包含两个线性层和一个GELU激活函数

        通过分析, ViT模型的主要通信瓶颈在于多头注意力机制中的Softmax和MLP中的GELU激活函数。其中Softmax函数中Max以Reciprocal操作又是主要耗时的算子。另外对比分析不同注意力机制变体的准确率和延迟。

        已有一些工作发现不是所有的注意力都同等重要,是存在差别的。这个也是引出MPCViT的一个主要动机之一。

       MPCViT的提出,主要是为了解决这两个主要问题: (1) 权衡模型准确率和推理延迟。(2)融合高准确率注意力机制和低延迟注意力机制。主要从四个角度出发进行算法优化:(1)设计合适的搜索空间;(2)MPC感知神经架构搜索;(3)基于延迟限制的架构参数二值化;(4)重训练异构注意力ViT。       

       搜索算法涉及三种粒度:(1)粗粒度(Transformer层级粒度);(2)中粒度(注意力头级粒度);(3)细粒度(注意力行级粒度 token级)。

 对每一个注意力分配了alpha参数,搜索过程中自动确定应该保留哪个注意力,可微分的搜索算法效率可以得到保证。搜索完成之后,可以对alpha进行排序,值较大的注意力设置为高延迟类型,值较小的注意力设置为低延迟类型。

       直接训练搜索后的异构注意力机制ViT会导致显著的准确率下降,采用多粒度的自蒸馏技术,将原始Softmax注意力机制ViT作为教师模型, 无需引入任何额外训练和推理开销。基于特征的token蒸馏,更加细粒度蒸馏,本文取最后一层特征蒸馏,效率更好。
 

2.  使用SecretFlow搭建ViT框架

  介绍完MPCViT的原理后,接下来就是使用SecretFlow搭建ViT框架。关于SPU的介绍,可以参考我之前的笔记《隐语课程学习笔记8-理解密态引擎SPU框架》。

       隐私推理协议的相关参数设置以及网络环境模拟。

       基于Jax的ViT模型搭建,之前我们已经实践过NN模型以及GPT2模型的SPU实践,所以对这一块内容理解起来会比较快。使用Jax实现明文的模型结构,主要分为patch embedding搭建、注意力机制搭建、MLP模块搭建、Transformer模块搭建。

       (1)Patch embedding搭建

    (2)注意力机制搭建

      (3)MLP模块搭建

       (4)Transformer模块搭建:基于之前的各个子模块,来构建完整的Transformer模块。

      (5)ViT模型的隐私推理:(1)初始化SPU环境;(2)设置输入变量维度(主要是编码维度、token数量、头数量等);(3)创建对象(注意力层等);(4)指定SPU设备以及执行函数,加密输入,在密文环境执行计算。

           ViT模型推理操作流程,包括(1)配置Python环境及安装SPU,并激活Python环境;(2)配置并模拟通信网络环境(以WAN设置为例);(3)模拟MPC环境及协议;(4)执行隐私推理。

3. 该工作的主要实验结果,效果均优于基线模型

  • 三种实验基线模型包括:Linformer (FaceBook 2020), THE-X (ACL 2021), MPCFormer (ICLR 2023);
  • 三种实验数据集包括:CIFAR-10、CIFAR-100、Tiny-ImageNet;
  • 实验结论:在Tiny-ImageNet数据集上,相比基线ViT、MPCFormer、THE-X,MPCViT具有更低的延迟和更好的准确率,延迟分别降低6.2×、2.9×和1.9×,提高了1.9%、1.3%和3.6%的准确率;
  • 与仅使用交叉熵损失函数相比,基于logits和基于特征的知识蒸馏都使得ViT性能显著提升;
  • 两种知识蒸馏损失函数的结合进一步提高了准确率,在更大的数据集上表现更明显;

  • 在不同的λ、不同的数据集、不同的注意力头数量的设置下,搜索结构都可以表现出一致性;
  • 架构参数可视化与层级可视化一致,更倾向于保留中间靠前的注意力。

总体来说,将隐语应用于实际的算法工作中,可行度较高,对开发者也更加友好,后续也会在实际学习和工作中多多使用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目测试计划(Word)

1简介 1.1 目的 1.2 范围 2. 测试参考文档和测试提交文档 2.1 测试参考文档 2.2 测试提交文档 3. 测试策略 3.1整体测试策略 3.2功能测试 3.3 界面测试 3.4 性能测试 3.5 安全性测试 3.6 工具 4 测试阶段进入和退出标准 4.1进入标准 4.2退出标准 5 测试范围 5.1需要测试的模块 …

2024/6/28 英语每日一段

The Supreme Court on Thursday rejected a challenge to an obscure provision of President Donald Trump’s 2017 tax package, ending a lawsuit that many experts feared could destabilize the nation’s tax system. In a divided decision, the court upheld a one-ti…

uboot基本使用网络命令和从服务器端下载linux内核启动

网络命令ip地址设置: setenv gmac_debug 0; setenv mdio_intf rgmii; setenv bootdelay 1; setenv ethaddr 00:xxxx:81:70; // mac地址 setenv ipaddr xxx; //开发板 IP 地址 setenv netmask 255.255.255.0; setenv gatewayip xxx.1; setenv serverip xxxx; //服…

如何在LabVIEW中使用FPGA模块

LabVIEW FPGA模块是NI公司推出的一款强大工具,它允许用户使用LabVIEW图形化编程环境来开发FPGA(现场可编程门阵列)应用程序。与传统的HDL(硬件描述语言)编程相比,LabVIEW FPGA模块大大简化了FPGA开发的过程…

Ollama qwen2:7b

简介 一个简明易用的本地大模型运行框架,Ollama官网:Ollama ollama命令 ollama有类似docker的命令。下面是一些模型(large language models)的操作命令: ollama list:显示模型列表ollama show:显示模型的信息ollama pull&#…

kafka-高可用设计详解(集群架构、备份机制、消费者组、重平衡)

文章目录 kafka高可用设计集群架构Kafka集群选举ISR与OSRLEO和HWKafka分区Leader选举Leader Replica选举策略Leader Replica选举过程 副本机制(Replication)消费者组和再均衡消费者组再均衡(重平衡) 更多相关内容可查看 kafka高可用设计 Apache Kafka 的高可用设计…

第24篇 滑动开关控制LED<二>

Q&#xff1a;如何使用Intel FPGA Monitor Program创建滑动开关控制LED工程并运行呢&#xff1f; A&#xff1a;创建工程的基本过程与前面的Intel FPGA Monitor Program的使用<三>一样&#xff0c;不同的地方是&#xff0c;本实验工程用到了开发板的外设硬件LED和SW&…

[JS]节点操作

DOM节点 DOM树中的所有内容都是节点, 我们重点关注元素节点 作用 使开发者可以根据节点的关系获取元素, 而不是只能依赖选择器, 提高了编码的灵活性 节点分类 元素节点: 所有的标签都是元素节点, html是根节点属性节点: 所有的属性都是属性节点, 比如href文本节点: 所有的文…

Qt6.6编译Qt二维图形编辑器QVGE源码

QVGE是一个开源的多平台QtC编写的图形编辑器&#xff0c;可以用来画网络节点图&#xff0c;或者其他作用。 QVGE可以轻松创建和参数设定的小型到中型图形(1000节点/边缘)&#xff0c;共同的视觉特性的节点和边缘&#xff1a;形状、尺寸、颜色、标签等。定义(用户定义)属性的图表…

【异常总结】SeaTunnel集群脑裂配置优化方法

集群配置 项目描述数量3台规格阿里云ECS 16C64GSlot模式静态50个ST内存配置-Xms32g -Xmx32g -XX:MaxMetaspaceSize8g 异常问题 4月份以来&#xff0c;出现了3次集群脑裂现象&#xff0c;均为某节点脑裂/自动关闭。 核心日志如下&#xff1a; Master节点 出现Hazelcast监控…

开源大模型RAG企业本地知识库问答机器人-ChatWiki

ChatWiki ChatWiki是一款开源的知识库 AI 问答系统。系统基于大语言模型&#xff08;LLM &#xff09;和检索增强生成&#xff08;RAG&#xff09;技术构建&#xff0c;提供开箱即用的数据处理、模型调用等能力&#xff0c;可以帮助企业快速搭建自己的知识库 AI 问答系统。 开…

Xilinx系列FPGA实现4K视频拼接,基于Video Mixer实现,提供1套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐FPGA图像处理方案FPGA视频拼接叠加融合方案推荐4K视频输入输出方案Video Mixer视频拼接方案 3、详细设计方案设计框图TPG测试彩条VDMA图像缓存Video Mixer介绍HDMI 1.4/2.0 Transmitter SubsystemVideo PHY Controller输出均衡电路…

RuleApp1.4.6文章社区客户端 广告联盟支持Docx导入

支持编译为安卓&#xff0c;苹果&#xff0c;小程序&#xff0c;H5网页的社区客户端代码&#xff0c;包括文章模块&#xff0c;用户模块&#xff0c;动态模块&#xff0c;支付模块&#xff0c;聊天模块&#xff0c;广告模块&#xff0c;商城模块等基础功能&#xff0c;包含VIP会…

黄历工具网/万年历/财神方位/日历/佛历/道历/24节气/PHP网站源码

黄历工具网/万年历/财神方位/日历/佛历/道历/24节气/PHP网站源码 演示地址&#xff1a; https://hl.caohongji.com/ 手机端地址&#xff1a; https://mhl.caohongji.com/ 客服&#xff1a; kkmp326 源码说明&#xff1a; 1、系统内的黄历宜忌、农历、日历、佛历、道…

傅里叶变换,拉普拉斯变换,卷积 卷积定理

傅里叶变换&#xff0c;拉普拉斯变换&#xff0c;卷积 & 卷积定理 文章目录 傅里叶变换&#xff0c;拉普拉斯变换&#xff0c;卷积 & 卷积定理开胃小菜&#xff08;收敛性&#xff09;一、傅里叶变换核心原理定义连续时间信号离散时间信号&#xff08;了解&#xff09;…

leetcode 二分查找·系统掌握 有序数组中的单一元素

题意&#xff1a; 题解&#xff1a; 一种可行的思路是&#xff0c;考虑这个单独的数加入之前和加入之后这个数组中其他元素的属性发生了什么变化&#xff0c;不难看出在这个单独的数之前每一对数的第一个索引为偶数&#xff0c;在这个单独的数之后每一对数的第一个索引为奇数&…

RISC-V知识总结 —— 向量(扩展)指令集

资源1:晏明 - RISC-V向量扩展指令架构及LLVM自动向量化支持 - 202112118 - 第13届开源开发工具大会&#xff08;OSDTConf2021&#xff09;_哔哩哔哩_bilibili资源2:张先轶 - 基于RISC-V向量指令集优化基础计算软件生态【第12届开源开发工具大会&#xff08;OSDT2020&#xff09…

Fizz Buzz 经典问题 - 蓝桥杯

基础知识要求&#xff1a; Java&#xff1a;方法、if else语句、算术运算符、逻辑运算符、Scanner类 Python&#xff1a; 方法、if else语句、算术运算符、逻辑运算符、input() 题目&#xff1a; 思路解析&#xff1a; 读取输入&#xff1a; 从标准输入或其他方式读取一个整数…

高效利用iCloud指南:打造无缝连接的数字生活

iCloud是苹果公司推出的一项云存储和云计算服务&#xff0c;它为用户提供了一个安全、便捷的云端存储空间&#xff0c;帮助用户在各个苹果设备之间无缝同步数据。无论是照片、文档、备忘录&#xff0c;还是应用程序数据&#xff0c;iCloud都能让你的数字生活更加高效和有序。本…