当前位置: 首页 > article >正文

从‘词向量搬家’到‘关系运算’:动手用NumPy模拟Transformer的QKV计算全过程(附代码)

从词向量到关系运算用NumPy拆解Transformer的QKV核心机制当你第一次听说自注意力机制时是否也被那些神秘的Q、K、V字母搞得一头雾水作为Transformer架构的核心QKV计算远不止是几个矩阵乘法那么简单。让我们暂时抛开那些抽象的理论推导直接动手用NumPy从零构建整个过程——你会惊讶地发现原来那些看似复杂的向量运算本质上是在进行一场精妙的词向量搬家游戏。1. 准备词向量语言的空间化表达想象一下如果每个词都能在三维空间中找到自己的位置中国可能位于(3,6,10)而熊猫在(2,5,9)附近。这就是词向量的魔力——将离散的符号转化为连续的数学对象。在实际应用中维度通常高达512或768但为了演示我们先用3维空间import numpy as np # 定义句子中国的熊猫很可爱 vocab { 中国: np.array([3, 6, 10]), 的: np.array([1, 1, 1]), 熊猫: np.array([2, 5, 9]), 很: np.array([1, 2, 1]), 可爱: np.array([0, 8, 3]) } sentence [中国, 的, 熊猫, 很, 可爱] X np.stack([vocab[word] for word in sentence]) # 形状(5,3)词向量的关键特性语义相近的词距离更近如中国与熊猫向量方向蕴含语法关系如中国→熊猫可能代表拥有关系位置编码会保留单词顺序信息此处简化为静态向量提示真实场景中词向量通过Embedding层学习得到这里我们手动定义是为了更直观地观察变化2. QKV变换为词向量赋予多重身份每个词向量现在要扮演三个不同角色查询者(Query)、被查询者(Key)和值载体(Value)。这通过三个独立的线性变换实现np.random.seed(42) d_model 3 # 原始词向量维度 d_k 2 # QK空间维度通常小于d_model # 初始化变换矩阵 WQ np.random.randn(d_model, d_k) * 0.1 WK np.random.randn(d_model, d_k) * 0.1 WV np.random.randn(d_model, d_model) * 0.1 # 计算Q,K,V Q X WQ # 查询矩阵 (5,2) K X WK # 键矩阵 (5,2) V X WV # 值矩阵 (5,3)为什么需要三个矩阵Q代表当前词的提问如中国想知道谁与我相关K代表其他词的应答如熊猫回答我与你相关度是0.8V携带实际要传递的信息如熊猫携带的语义内容3. 注意力分数词与词的社交网络计算注意力分数本质上是建立词与词之间的关联图谱。点积运算衡量Q与K的匹配程度attn_scores Q K.T / np.sqrt(d_k) # 形状(5,5) print(原始注意力分数\n, attn_scores.round(2)) # 应用Softmax归一化 def softmax(x): exp_x np.exp(x - np.max(x, axis-1, keepdimsTrue)) return exp_x / np.sum(exp_x, axis-1, keepdimsTrue) attn_weights softmax(attn_scores) print(\n注意力权重\n, attn_weights.round(2))示例输出可能显示注意力权重 [[0.45 0.12 0.3 0.08 0.05] [0.2 0.2 0.2 0.2 0.2 ] [0.25 0.1 0.4 0.15 0.1 ] [0.1 0.1 0.1 0.5 0.2 ] [0.15 0.05 0.1 0.3 0.4 ]]解读注意力模式中国最关注熊猫权重0.3可爱主要关注自身和很自我强化停用词的呈现均匀分布符合预期4. 加权合成关系向量的动态组合现在我们将注意力权重作用于V矩阵完成信息的动态重组Z attn_weights V # 形状(5,3) print(\n注意力输出\n, Z.round(2)) # 残差连接原始信息保留 Z XV矩阵的本质不是简单的词向量拷贝而是学习到的关系传递器每个V向量像是一个语义插件可以增强或修正原始词向量残差连接确保不会丢失原始信息梯度流动更顺畅5. 可视化解析追踪向量空间的变化让我们用Matplotlib观察中国一词的演变过程import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig plt.figure(figsize(15,5)) # 原始词向量 ax1 fig.add_subplot(131, projection3d) for i, word in enumerate(sentence): ax1.scatter(*X[i], colorr) ax1.text(*X[i], word) ax1.set_title(初始词向量) # 注意力权重 ax2 fig.add_subplot(132) im ax2.imshow(attn_weights, cmapReds) ax2.set_xticks(range(len(sentence))) ax2.set_xticklabels(sentence) ax2.set_yticks(range(len(sentence))) ax2.set_yticklabels(sentence) ax2.set_title(注意力热力图) # 输出向量 ax3 fig.add_subplot(133, projection3d) for i, word in enumerate(sentence): ax3.scatter(*Z[i], colorg) ax3.text(*Z[i], word) # 绘制从X到Z的箭头 ax3.quiver(*X[i], *(Z[i]-X[i]), colorb, arrow_length_ratio0.1) ax3.set_title(输出向量蓝色箭头表示变化) plt.tight_layout() plt.show()关键观察点中国向量向熊猫方向移动语义关联可爱向量长度增加情感强度强化的几乎保持不变功能词无需调整6. 扩展实践多头注意力与层叠真实的Transformer会使用多头注意力机制让我们实现一个简化版n_heads 2 head_dim d_model // n_heads # 分割到多个头 def split_heads(x): return x.reshape(x.shape[0], n_heads, head_dim) Q_heads split_heads(Q WQ_multi) # WQ_multi形状为(d_model, d_model) K_heads split_heads(K WK_multi) V_heads split_heads(V WV_multi) # 每个头独立计算注意力 attn_outputs [] for h in range(n_heads): attn_h softmax(Q_heads[:,h] K_heads[:,h].T / np.sqrt(head_dim)) attn_outputs.append(attn_h V_heads[:,h]) # 合并多头输出 Z_multi np.concatenate(attn_outputs, axis-1) # 形状(5,3)多头机制的优势不同头可以捕捉不同类型的关系如语法vs语义扩展了模型的表示能力并行计算效率高7. 工程实践中的关键细节在实际项目中有几个容易忽视但至关重要的实现细节缩放点积的数学原理# 错误的缩放方式会导致梯度消失 attn_scores Q K.T / d_k # 正确的缩放保持方差稳定 attn_scores Q K.T / np.sqrt(d_k)注意力掩码的实现# 解码器的自回归掩码 mask np.triu(np.ones((len(sentence), len(sentence))), k1) attn_scores attn_scores - 1e9 * mask数值稳定的Softmaxdef safe_softmax(x): x x - np.max(x, axis-1, keepdimsTrue) exp_x np.exp(x) return exp_x / np.sum(exp_x, axis-1, keepdimsTrue)在BERT等模型中QKV计算通常占整体计算量的40%以上。通过分析中间变量的内存占用我们发现张量名称形状内存占比Q/K矩阵(seq_len, d_k)25%注意力权重(seq_len, seq_len)45%V矩阵(seq_len, d_model)30%这解释了为什么许多优化工作聚焦于稀疏注意力或低秩近似——当序列长度达到1024时注意力权重的(1024,1024)矩阵会成为显存瓶颈。

相关文章:

从‘词向量搬家’到‘关系运算’:动手用NumPy模拟Transformer的QKV计算全过程(附代码)

从词向量到关系运算:用NumPy拆解Transformer的QKV核心机制 当你第一次听说"自注意力机制"时,是否也被那些神秘的Q、K、V字母搞得一头雾水?作为Transformer架构的核心,QKV计算远不止是几个矩阵乘法那么简单。让我们暂时抛…...

AI 会取代手工测试吗?测试工程师真正该担心什么?

很多做手工测试的人,最近都会有类似的担心:AI 会不会取代我的岗位?这个问题并不奇怪。因为过去很多测试工作,确实依赖人工完成:写测试用例、执行回归测试、整理测试数据、记录缺陷、验证修复结果……这些事情看起来繁琐…...

从游戏建模到数字孪生:聊聊三维重建技术在实际项目里到底怎么用(附Blender+RealityCapture案例)

从游戏建模到数字孪生:三维重建技术的实战指南 在数字内容创作领域,三维重建技术正从专业工作室走向大众视野。想象一下这样的场景:游戏开发者用手机拍摄几组照片,几小时后就能获得一个可直接导入引擎的3D角色模型;建筑…...

Windows系统必备:Visual C++运行库一键修复完全指南

Windows系统必备:Visual C运行库一键修复完全指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 当您在运行某些软件或游戏时,突然弹出&…...

如何快速下载国家中小学智慧教育平台电子课本:一站式解析工具使用指南

如何快速下载国家中小学智慧教育平台电子课本:一站式解析工具使用指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内…...

基于AI与静态生成的智能RSS聚合器FeedMe部署与定制指南

1. 项目概述如果你和我一样,每天被淹没在几十个博客、新闻网站和科技媒体的信息洪流里,却总感觉抓不住重点,那 FeedMe 这个项目可能就是为你量身打造的。它不是一个传统的 RSS 阅读器,而是一个用 AI 帮你“咀嚼”信息的智能聚合器…...

3步魔法:浏览器中的革命性法线贴图生成器

3步魔法:浏览器中的革命性法线贴图生成器 【免费下载链接】NormalMap-Online NormalMap Generator Online 项目地址: https://gitcode.com/gh_mirrors/no/NormalMap-Online 你知道吗?现在你可以在浏览器中,仅用3步就能生成专业级的法线…...

抖音评论采集终极指南:3步获取完整评论数据,无需编程基础

抖音评论采集终极指南:3步获取完整评论数据,无需编程基础 【免费下载链接】TikTokCommentScraper 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokCommentScraper 还在为手动复制抖音评论而烦恼吗?想要分析热门视频的用户反馈却…...

Pearcleaner:macOS彻底清理应用的终极指南,释放宝贵磁盘空间

Pearcleaner:macOS彻底清理应用的终极指南,释放宝贵磁盘空间 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾经在macOS上删除…...

从dev到prod只需1次git push:基于renv+GitHub Packages+RSPM的Tidyverse依赖全生命周期管控体系

更多请点击: https://intelliparadigm.com 第一章:从dev到prod只需1次git push:基于renvGitHub PackagesRSPM的Tidyverse依赖全生命周期管控体系 在 R 工程化实践中,依赖漂移与环境不一致是导致“在我机器上能跑”问题的核心症结…...

为香蕉派Nano Pro构建国内优化版Armbian镜像与Docker集成指南

1. 项目概述:一个为国产香蕉派Nano Pro量身定制的系统镜像最近在折腾一块国产的单板计算机——香蕉派(Banana Pi)的Nano Pro。这板子尺寸小巧,接口丰富,性价比挺高,很适合用来做物联网网关、轻量级服务器或…...

Blender贝塞尔曲线插件完全指南:从入门到精通

Blender贝塞尔曲线插件完全指南:从入门到精通 【免费下载链接】blenderbezierutils Blender Add-on with Bezier Utility Ops 项目地址: https://gitcode.com/gh_mirrors/bl/blenderbezierutils Blender贝塞尔曲线插件是一款专为Blender 4.2版本设计的革命性…...

从手机闪屏到笔记本卡顿:聊聊那些由‘电感啸叫’暴露的隐藏电源问题

从手机闪屏到笔记本卡顿:聊聊那些由‘电感啸叫’暴露的隐藏电源问题 当你的手机屏幕在低亮度下莫名闪烁,或是笔记本电脑在浏览网页时突然卡顿,大多数人第一反应可能是系统bug或硬件老化。但鲜为人知的是,这些看似无关的故障背后&a…...

手把手教你用PaddleOCR的SVTR模型:从环境搭建到中文场景文字识别实战

手把手教你用PaddleOCR的SVTR模型:从环境搭建到中文场景文字识别实战 在数字化浪潮席卷各行各业的今天,光学字符识别(OCR)技术已成为连接物理世界与数字世界的桥梁。无论是金融行业的票据处理、零售行业的商品标签识别&#xff0c…...

抖音无水印视频终极下载指南:两款开源工具让你轻松保存高清内容

抖音无水印视频终极下载指南:两款开源工具让你轻松保存高清内容 【免费下载链接】douyin_downloader 抖音短视频无水印下载 win编译版本下载:https://www.lanzous.com/i9za5od 项目地址: https://gitcode.com/gh_mirrors/dou/douyin_downloader 还…...

Taotoken 路由策略在实际高并发调用下的稳定性表现观察

Taotoken 路由策略在实际高并发调用下的稳定性表现观察 1. 高并发场景下的路由机制 在业务高峰期或压力测试环境中,Taotoken的路由策略会基于预设规则自动分配请求到不同模型供应商。根据平台公开说明,当单一供应商的响应延迟超过阈值或返回错误码时&a…...

手把手教你用GoT框架优化GPT-3.5/4的排序与关键词统计任务,成本直降30%+

用GoT框架重构大模型任务:排序与关键词统计实战指南 当你在深夜调试代码时,是否遇到过这样的场景——大模型API的账单让你心跳加速,而任务效果却差强人意?传统提示工程方法就像用瑞士军刀砍树,既低效又昂贵。今天我们要…...

告别裸机轮询:用沁恒CH582的TMOS构建高效低功耗蓝牙应用实战

告别裸机轮询:用沁恒CH582的TMOS构建高效低功耗蓝牙应用实战 在嵌入式开发领域,资源受限的MCU上实现多任务调度一直是个棘手问题。许多开发者习惯使用简单的while(1)轮询来处理按键扫描、传感器采集、蓝牙通信等并发需求,但这种粗暴的方式往往…...

Sunshine游戏串流服务器终极实战指南:零基础打造你的专属云游戏平台

Sunshine游戏串流服务器终极实战指南:零基础打造你的专属云游戏平台 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否曾经梦想过在轻薄笔记本上流畅运行最新的3A游…...

有人AI算力主机 | 多源数据,AI分析,边缘智理

工业物联网向边缘智能深度演进,机器视觉图像、设备时序传感、环境感知传感、多源融合数据的边缘端实时AI 分析,成为工业智能化升级的核心抓手。有人物联 AI 算力主机(EG9 系列、EG628-S/EG828-S、SH800/SH900 等)精准聚焦工业四大…...

为你的开源项目集成大模型能力利用 Taotoken 实现快速原型验证

为你的开源项目集成大模型能力利用 Taotoken 实现快速原型验证 1. 开源项目与大模型集成需求 在开源项目开发初期,集成大模型能力往往面临两个核心挑战:模型选型成本高和接入复杂度大。传统方式需要开发者逐一注册不同厂商账号、管理多个 API Key&…...

TVA在机器人核心零部件制造与检测中的体验分享(1)

重磅预告:本专栏将独家连载新书《AI视觉技术:从入门到进阶》精华内容。本书是《AI视觉技术:从进阶到专家》的权威前导篇,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan 师从美国三院院士、“AI教母…...

通过 Python 示例代码快速实现与大模型的多轮对话交互

通过 Python 示例代码快速实现与大模型的多轮对话交互 1. 环境准备与依赖安装 在开始之前,请确保您的 Python 环境版本为 3.7 或更高。我们将使用 openai 这个官方 Python 包来与 Taotoken 的 API 进行交互。通过 pip 安装所需依赖: pip install open…...

基于ETL与LLM的自动化新闻生成系统:从爬虫到发布的完整实践

1. 项目概述与核心价值最近在折腾一个挺有意思的东西,叫finaldie/auto-news。这名字听起来就挺直白的,一个“自动新闻”项目。但别被名字骗了,它可不是简单的RSS聚合器或者爬虫脚本。我花了点时间深入研究了一下,发现它的核心思路…...

阴阳师玩家必看:如何用OnmyojiAutoScript每天节省2小时游戏时间?

阴阳师玩家必看:如何用OnmyojiAutoScript每天节省2小时游戏时间? 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 还在为阴阳师里那些永远刷不完的日常任务…...

终极指南:5分钟上手REFramework,打造你的RE引擎游戏Mod开发环境

终极指南:5分钟上手REFramework,打造你的RE引擎游戏Mod开发环境 【免费下载链接】REFramework Mod loader, scripting platform, and VR support for all RE Engine games 项目地址: https://gitcode.com/GitHub_Trending/re/REFramework REFrame…...

为什么开发者都在研究 OpenClaw?

网罗开发(小红书、快手、视频号同名)大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方…...

旧手机别扔!用Magisk和BusyBox把它变成24小时在线的青龙面板服务器(保姆级教程)

将闲置安卓手机改造为青龙面板服务器的完整指南 手里那台退役的安卓手机,除了积灰还能做什么?今天我要分享一个极客玩法——把它变成一台24小时在线的青龙面板服务器。相比购买树莓派或云服务器,这个方案几乎零成本,功耗仅相当于…...

Spring Boot项目启动报‘non-compatible bean definition‘?别慌,这3种常见原因和排查思路帮你搞定

Spring Boot项目启动报non-compatible bean definition的深度排查指南 当Spring Boot应用启动时突然抛出"non-compatible bean definition"错误,就像在高速公路上突然遇到路障。这个错误表面上看是简单的Bean名称冲突,但背后可能隐藏着多种不同…...

抖音评论采集神器:5分钟掌握高效数据收集的终极方案

抖音评论采集神器:5分钟掌握高效数据收集的终极方案 【免费下载链接】TikTokCommentScraper 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokCommentScraper 还在为手动复制抖音评论而烦恼吗?想要分析热门视频的用户反馈却无从下手&#xf…...