news 2026/6/10 0:24:17

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
扩散模型中的注意力机制实现详解:从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_states
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(
torch.empty(…), query, key.transpose(-1, -2), alpha=attn.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), alpha=attn.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%免费】🆓

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 11:05:19

AI算力之争:灵衢互联协议破局系统协同瓶颈

当全球开发者正在思考如何将万亿参数模型部署到异构芯片集群中,当主流厂商开始为其AI芯片设计高“外部缓存”时,一个产业共识已然形成:AI计算已从芯片算力的“单点竞赛”,全面转向系统级的“协同效率”之战。这一转变暴露了当前计…

作者头像 李华
网站建设 2026/6/10 12:54:25

P6KE16CA双向 TVS瞬态抑制二极管:600W功率16V电压中压浪涌防护

双向P6KE16CAtvs瞬态电压抑制二极管P6KE16CA双向 TVS瞬态抑制二极管 二极管产品已经跟我们的生活有着密不可分的联系了, TVS瞬态抑制二极管,是一种高效能保护二极管,产品体积小、功率大、响应快等诸多优点,产品应用广泛 TVS瞬态抑…

作者头像 李华
网站建设 2026/6/10 11:09:01

美国静态住宅IP购买选择哪家好?

在跨境电商、多账号运营、广告投放等场景中,美国静态IP一直是需求量非常高的一类资源。相比较数据中心IP,美国住宅IP更接近真实家庭网络,而“静态住宅IP”,可以让账号和业务环境更稳定,不需要频繁更换IP。那么问题来了…

作者头像 李华
网站建设 2026/6/10 13:20:25

SpringBoot4.0新特性-Null-safety消灭空指针

核心目标 该机制的核心目标就是通过在编译时进行静态代码检查,防止运行时抛出空指针异常。SpringBoot4.0默认集成JSpecify框架,支持使用JSpecify注解来声明API、字段及相关类型的可空性。 举个例子,现在有一个接口和实现类: pu…

作者头像 李华
网站建设 2026/6/10 11:17:45

已经 Push 到远程的提交,如何修改 Commit 信息?

在 IDEA 中写完了新增各种工具类的代码,完成了 Commit 和 Push,代码已经到了 GitHub远程仓库。 继续写着下一个功能的代码,突然,我发现刚才的Commit Message少写了一个已经完成的功能实现。 此时,我的工作区里已经有…

作者头像 李华