导读:视觉Transformer的输入可视化方法,正广泛应用于百度内容理解和内容风控相关业务中,帮助研究人员构建效果更好的模型。百度内容策略团队,基于Transformer的输入可视化方法分析风控色情图像分类模型的误检数据,定向设计数据处理策略,在保持色情图像召回不变的情况下误检相比base下降76.2%,极大的提升了模型的准确性。
全文2760字,预计阅读时间7分钟
一、可视化含义与意义
自2012年AlexNet出现以来,卷积神经网络逐渐成为图像分类、目标检测、语义分割等常见视觉任务中效果最好的方法之一,引起了广泛的关注和使用。后来研究人员又将在NLP等序列任务中大火的Transformer引入视觉领域,在多项任务中取得媲美甚至超越CNN的效果。然而不论CNN还是Transformer都是端到端的训练和推理,一定程度上属于黑盒模型。研究人员对模型内部的参数分布和特征变化接触较少,对于模型效果的分析和掌控十分受限。
神经网络可视化的目的,在于将模型内部的参数或激活值转化成能直接传递信息的特征图或显著图,帮助研究人员直观准确的判断模型当前的拟合状态,或者在推理结果不正确时对可能出现的问题进行定位和分析。
此前,有研究人员训练了一个图片分类器来区分北极熊和森林棕熊,测试准确率100%。有好事者将北极熊照片p到森林环境后喂给分类器就被误判成棕熊了。原来这个图片分类器压根没学到北极熊和棕熊的特征,而是学到了根据周围环境来做判断。模型对于输入数据的可视化就可以用来解决这类问题,具体来说,给定一个图像分类模型和测试图像,希望能得到模型将测试图像分成某个类别C的输入依据,即模型是凭借哪些像素或区域判断出测试图像属于类别C的。
本文主要以图像分类任务为例,讨论模型对于输入数据的可视化。
二、视觉任务中CNN与Transformer的输入可视化区别
神经网络中的数据主要包括前向传播时神经元的激活值(Activation)和反向传播时神经元或参数的梯度值(Gradient),几乎所有可视化方法都是使用这两类数据来构造特征图或显著图。
2.1 CNN中的输入可视化
常见的图像分类CNN模型结构中,输入为具有一定宽高的1或3通道图片,经过一系列卷积层和pooling层,再经过GAP和全连接层,最终映射为各个类别的概率。网络中的特征图相比输入宽高缩小、通道数增加,可以看做是“更矮、更瘦但更厚”的输入。根据卷积和池化的计算原理可知,特征图在宽高维度的特征和输入图像在宽高维度的特征是对应的,即特征图宽高维度左上角区域的值也对应输入图像宽高维度左上角区域的值。因此CNN中常用特征图的激活值或梯度值来构建输入图像的可视化结果。
如Class Activation Map(CAM)方法中,将GAP前一层的特征图 上采样到输入分辨率 ,以全连接层学习到的weights为权重,将 的各个通道特征图加权求和归一化作为显著图。

再如Gradient Class Activation Map(Grad-CAM)方法中,采用输出对 中每个单张特征图的梯度均值代替全连接层学习到的weights作为权重,再对所有特征图加权求和归一化得到显著图,可以摆脱模型对全连接层的依赖。
2.2 Transformer中的输入可视化
Transformer处理的是序列数据,Vision Transformer(ViT)将输入图像切成n个小patch,每一个patch经过embedding后得到固定长度的一维token。加上class token总计n+1个token分别编码成q、k、v后进行self-attention得到权重,对所有的v进行加权求和得到输出,在ViT中不再有类似CNN中“更矮、更瘦但更厚”的特征图作为base来构建针对输入的可视化显著图。

那么ViT中应该使用什么数据来构建输入显著图呢?
我们注意到输入显著图代表的含义是:找出输入图像中那些对最终分类决策起到重要影响的像素区域。ViT的输出本质就是一系列value的加权和,权重的大小就代表了重要性。而权重是由不同token之间计算self-attention得到的,每个token又跟图像的每个patch一一对应,即某些patch的突出导致了最终的决策结果,这也正是输入可视化的含义所在。因此ViT的输入可视化关键就在于,哪个patch对应的token和class token做self-attention时得到了更大的权重,哪个patch对应的像素区域就对最终的分类结果起到更大影响。
三、Transformer输入可视化方法
3.1 常见Transformer输入可视化方法
目前Transformer的输入可视化研究成果不多,现有方法基本都是围绕self-attention模块构建。rollout[1]方法中使用模型前向传播的self-attention激活值构建输入显著图,但是构建结果是class-agnostic的,不能反映不同类别对于模型决策结果的影响。LRP[2]通过Deep Taylor Composition来建模神经元之间的相互影响,并结合反向传播的思路构建输入对输出logit的影响。Partial- LRP[3]考虑了Transformer中multi-head的重要性不同,通过对weights范数的排序剔除对结果贡献较小head的影响,基于LRP构建输入显著图。但是这类方法依赖复杂的LRP计算过程,且对小目标的可视化效果较差。
3.2 一种鲁棒的Transformer输入可视化方法
结合2.2节分析和Grad-Cam思路,我们提出一种鲁棒的Transformer输入可视化方法,使用self-attention的激活值和梯度值来构建输入的显著图。以ViT为例,假设模型有B个Transformer-Encoder Block,包括class token在内输入共n+1个token,每个Block b的self-attention部分包含h个heads,class token在Block b中与其他n个token的self-attention值 ,对应的梯度 由可视化目标类别对应的输出置1其余类别全部置0后反向传播得到。则Block b中class token对应的saliency map 为:
其中 为点乘,即saliency map 为Block b中各个head中self-attention模块激活值和梯度值点乘结果的均值。所有token/patch对应的输入显著图 为:
ε
即每个token/patch对应的输入显著值为所有Block b的saliency map累乘。对 进行值平移使得最小值为0防止出现偶数个负值相乘反而变成正值的情况,对 加上 ε 防止累乘时0值将其他Block的显著值淹没。得到每个patch对应的输入显著值后,再按照patch切分的顺序将其拼成二维数据并上采样至输入尺寸,归一化后作为输入的可视化结果。下图为ImageNet训练的ViT模型可视化结果,其中奇数列为输入图像,偶数列为模型预测结果top1 class对应的输入可视化显著图。可以看到模型的判断依据准确的命中了相应的像素区域,表明模型确实学习到了准确的输入信息分类标准。

下图为ViT模型在相同输入针对不同输出类别的可视化结果,其中奇数列为输入图像,偶数列为模型预测结果top2 class对应的输入可视化显著图,可以看到模型对于不同类别的可视化结果也十分准确,这对于分类模型的收敛效果是一个强有力的证明。

下图为ImageNet训练的ViT、Swin-Transformer和Volo模型使用本文方法在相同输入下的可视化结果,可以看到不同架构的Transformer使用都能够比较准确的得到输入可视化结果,证明了该方法良好的鲁棒性和泛化性。

3.3 业务应用案例
在内容风控任务中,我们训练了一个基于volo的图像分类模型来识别百度图片搜索场景下的色情图像。由于百度图片搜索场景的图片数据总量巨大,几乎覆盖了全网所有图像类别,模型在召回满足要求的情况下误检较高,很长一段时间难以继续优化。后来我们在充分测试的基础上通过本文方法对误检数据进行可视化分析和统计,归纳出暗色短裤、手臂交叉、婚礼、格斗、人群聚集等19种容易引起误检的物体和场景,定向补充了负样本对模型进行finetune。在保持召回相同的情况下误检相比base下降76.2%,极大的提升了模型的准确性。
四、结语
本文介绍了一种鲁棒的视觉Transformer输入可视化方法,实验结果表明该方法对于多种不同Transformer架构的模型都有良好的可视化效果,目前这项技术广泛的应用于百度内容理解和风控相关业务中,帮助研究人员构建效果更好的模型。本文方法主要考虑了Transformer中的token对应q、k之间的self-attention值对于分类决策的影响,后续可以进一步研究将token对应的v值也纳入可视化考量中,构造更加准确、鲁邦的视觉Transformer可视化方法。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】
2910



被折叠的 条评论
为什么被折叠?



