扩散模型中的注意力机制实现详解:从Self-Attention到Cross-Attention的代码解析

📅 发布时间:2026/7/4 8:25:57 👁️ 浏览次数:
扩散模型中的注意力机制实现详解:从Self-Attention到Cross-Attention的代码解析
扩散模型中的注意力机制都是怎么实现的一、Diffusers中的注意力机制实现diffusers中U-Net的注意力机制实现主要是UNet2DConditionModel这个类通过在特定的下采样、中间和上采样阶段加入CrossAttnDownBlock2D类的模块从而实现注意力层的加入。这些模块内部的核心单元是Transformer2DModel它负责把输入的2D特征图转换成序列形式。而在最底层的BasicTransformerBlock中通常包含了两层注意力• 第一层是处理图像内部关系的self-attention代码中通常叫attn1• 第二层则是融合文本条件的cross-attention代码中通常叫attn2这两者在代码层面都由Attention类定义并将具体的计算逻辑委托给AttnProcessor来执行。二、Self-Attention的实现关于self-attention的实现其核心目的是建模图像不同部分之间的correlation从而捕捉全局结构上的关联。在diffusers的官方代码中self-attention的实现如下query attn.to_q(hidden_states)encoder_hidden_states hidden_stateskey attn.to_k(encoder_hidden_states)value attn.to_v(encoder_hidden_states)query attn.head_to_batch_dim(query)key attn.head_to_batch_dim(key)value attn.head_to_batch_dim(value)attention_scores torch.baddbmm(torch.empty(…), query, key.transpose(-1, -2), alphaattn.scale)attention_probs attention_scores.softmax(dim-1)hidden_states torch.bmm(attention_probs, value)由于是自注意力query、key和value都是输入图像特征hidden_states的投影。大致的逻辑是首先通过to_q、to_k、to_v线性层将hidden_states映射到特征空间然后通过head_to_batch_dim操作将head维度折叠进batch维度剩下的就是标准attention中的计算了——attention weights、softmax归一化、加权到value上。 从数学角度看上面代码的过程如下 1. 1. 形状原本都是经过head_to_batch_dim的操作后变为的张量形式 2. 2. 计算注意力分数为得到的是一个的矩阵 3. 3. 通过将attention weights整合到value上 4. 4. 经由batch_to_head_dim还原维度并通过输出投影层结束self-attention的计算过程。 三、Cross-Attention的实现 在代码实现上cross-attention复用了与self-attention完全相同的AttnProcessor逻辑唯一的区别在于key和value的来源。 在attn2的前向传播中encoder_hidden_states不再是None而是传入了由CLIP编码好的text embedding记形状为。 plaintext 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # From image feature query attn.to_q(hidden_states) # From text encoder key attn.to_k(encoder_hidden_states) value attn.to_v(encoder_hidden_states) query attn.head_to_batch_dim(query) key attn.head_to_batch_dim(key) value attn.head_to_batch_dim(value) attention_scores torch.baddbmm(..., query, key.transpose(-1, -2), alphaattn.scale) attention_probs attention_scores.softmax(dim-1) hidden_states torch.bmm(attention_probs, value)这里的交互过程产生了一个的注意力矩阵它表示了图像特征中每一个位置与text prompt中每一个token的关联程度。最后唠两句为什么AI大模型成为越来越多程序员转行就业、升职加薪的首选很简单这些岗位缺人且高薪智联招聘的最新数据给出了最直观的印证2025年2月AI领域求职人数同比增幅突破200% 远超其他行业平均水平整个人工智能行业的求职增速达到33.4%位居各行业榜首其中人工智能工程师岗位的求职热度更是飙升69.6%。AI产业的快速扩张也让人才供需矛盾愈发突出。麦肯锡报告明确预测到2030年中国AI专业人才需求将达600万人人才缺口可能高达400万人这一缺口不仅存在于核心技术领域更蔓延至产业应用的各个环节。那0基础普通人如何学习大模型 深耕科技一线十二载亲历技术浪潮变迁。我见证那些率先拥抱AI的同行如何建立起效率与薪资的代际优势。如今我将积累的大模型面试真题、独家资料、技术报告与实战路线系统整理分享于此为你扫清学习困惑共赴AI时代新程。我整理出这套 AI 大模型突围资料包【允许白嫖】✅从入门到精通的全套视频教程✅AI大模型学习路线图0基础到项目实战仅需90天✅大模型书籍与技术文档PDF✅各大厂大模型面试题目详解✅640套AI大模型报告合集✅大模型入门实战训练这份完整版的大模型 AI 学习和面试资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】①从入门到精通的全套视频教程包含提示词工程、RAG、Agent等技术点② AI大模型学习路线图0基础到项目实战仅需90天全过程AI大模型学习路线③学习电子书籍和技术文档市面上的大模型书籍确实太多了这些是我精选出来的④各大厂大模型面试题目详解⑤640套AI大模型报告合集⑥大模型入门实战训练如果说你是以下人群中的其中一类都可以来智泊AI学习人工智能找到高薪工作一次小小的“投资”换来的是终身受益应届毕业生‌无工作经验但想要系统学习AI大模型技术期待通过实战项目掌握核心技术。零基础转型‌非技术背景但关注AI应用场景计划通过低代码工具实现“AI行业”跨界‌。业务赋能 ‌突破瓶颈传统开发者Java/前端等学习Transformer架构与LangChain框架向AI全栈工程师转型‌。获取方式有需要的小伙伴可以保存图片到wx扫描二v码免费领取【保证100%免费】